mrad/notifications-bundle
A PHP notifications bundle that provides a reusable notification layer for your application, with support for multiple delivery channels, templated messages, and a clean API for triggering alerts from domain logic. Ideal for adding user-facing notifications without rebuilding delivery infrastructure...
Scoping the "real-time notifications" roadmap item. This package only supports the narrowest version of that feature: fire-and-forget push of an event over Pusher to a channel. It is not a notifications platform. It brings no persistence, no read/unread state, no user preferences, no digests, no email/SMS fallback, no retries, and no delivery analytics. If the roadmap item is "tell the user something happened right now," it is directionally in scope; anything richer is a separate initiative. Use it to draw that line explicitly with stakeholders rather than discovering the gap mid-sprint.
Build vs. buy, framed correctly. The real decision is not "this bundle vs. custom code" — the bundle is a thin wrapper around the Pusher API and gives you almost nothing over calling the Pusher PHP SDK directly. The decision that actually costs money is Pusher (managed) vs. self-hosted WebSockets (Laravel Reverb/Soketi) vs. a managed notification platform (Ably, SNS, OneSignal). This package's only legitimate role is as a cheap way to prototype the Pusher path and get a latency and cost read before committing.
Vendor selection and lock-in. Adopting it functionally commits you to Pusher as a paid third-party dependency. That is a pricing, data-residency, and exit-cost decision that belongs in the roadmap review, not buried in an engineering ticket. Notification volume scales with users, so the bill scales with the roadmap — worth surfacing to finance early.
Framework-fit and cost re-estimation. This is packaged as a Symfony bundle, not a Laravel package. For a Laravel codebase there is no drop-in integration; any use means writing and owning an adapter. That materially changes the cost side of any build-vs-buy comparison and should reset the estimate before it goes into a plan.
Prototype vs. production gating. 7 stars, 0 dependents, single maintainer, no visible CI or release cadence. The defensible product use is an internal spike or MVP demo that proves the UX of live notifications to stakeholders — not a dependency on a customer-facing release path.
Reference-value decision. The most likely correct outcome is "read it, don't ship it." Sponsoring a half-day read to extract its event payload shape and Pusher wiring is a legitimate, low-cost research investment; adding it to composer.json is a different and much worse decision.
Consider it only when all of the following hold:
Look elsewhere when:
For executives: This is a tiny, MIT-licensed, single-purpose package that forwards real-time events to Pusher. It is not a notifications platform — it does one narrow thing and does it narrowly, with no persistence, no user preferences, no retries, and no delivery reporting. The strategic question it actually informs is whether we pay for a managed real-time vendor or build on infrastructure we already run. My recommendation: treat it as a cheap experiment, not a dependency. Fund a short spike — a few days — to validate the live-notification UX and produce a Pusher cost estimate at expected user volumes. Do not place it on the critical path of a customer-facing release. Two caveats to hold in mind: it is a Symfony artifact, so for a Laravel codebase it means adapter work we own; and it is a single-maintainer project with 7 stars and no downstream dependents, so nobody else in the ecosystem is validating it against current PHP or current Pusher APIs. Any adoption requires a named internal owner and an explicit "we will fork and maintain this" decision, which is almost never worth it.
For engineering: Three things to align on before anyone touches this. First, it is a Symfony bundle, not a Laravel package — no service provider, no auto-wiring, no config publishing. Treat any Laravel use as an adapter we own, and price it that way. Second, the health signals are weak across the board: 7 stars, zero dependents, one maintainer, no visible CI, no security disclosure path. Zero dependents is the loudest signal — nothing in the ecosystem is exercising this against modern PHP or Pusher SDK versions, so expect pinned legacy dependencies and deprecation or hard failures on PHP 8+. Third, the abstraction is thin enough that we can replicate it in an afternoon behind our own interface.
If the spike validates the UX, the production path is Laravel's native notifications and broadcasting — or Reverb/Soketi if we want to avoid vendor spend — which gives us queues, retries, multi-channel delivery, and an actively maintained surface. Whatever we build, define our own Notifier interface first (notify(userId, event, payload)), put Pusher behind it, and build queueing and retry in from the start rather than retrofitting delivery guarantees once notifications are load-bearing. Use this repo as a 30-minute reading reference for its payload shape, not a dependency, and do not fork it — forking converts a free read into a permanent maintenance liability with no upstream to rebase against.
How can I help you explore Laravel packages today?