laravel-notification-channels/pusher-push-notifications
Send Laravel notifications as push notifications through Pusher's Push Notifications (Beams) service. This channel lets you deliver mobile and web push messages using Laravel's familiar notification system, with support for device interest subscriptions and rich payloads.
Architecture fit
This package is a thin adapter between Laravel's first-party Notification system and Pusher Beams (Pusher's managed push service for iOS/Android/web). It contributes one channel class and one message value object; it does not own transport, retries, or device state. That is architecturally clean if — and only if — we are already committed to Laravel Notifications as the outbound messaging abstraction. In that case the marginal footprint is small and idiomatic: one entry in a notification's via() array plus a toPusherBeams() method. If we are not on Laravel Notifications, adopting this package is really a decision to adopt that abstraction, not a decision about push.
The important architectural boundary is that the package is not the dependency — Pusher Beams is. The adapter can be replaced in an afternoon; the Beams account, the device-registration flow in our mobile clients, and the interest/user topology cannot.
Integration feasibility
Server-side is genuinely low-effort: composer require, provider auto-discovery, publish the config, supply the Beams instance ID and secret key via environment/secret manager, then reference the channel in notification classes. Message construction is declarative (title, body, deep link, sound, target interests or user IDs). No queue, worker, or schema changes are required, and it composes with Laravel's existing ShouldQueue notifications and rate limiting.
Release 4.4.0 (Laravel 13.x compatibility) does not change the integration surface — no new features, no new config, no client-side implications. It is a version-matrix release and is relevant only to the compatibility gate below. It is, however, a useful signal: the adapter is being kept current with Laravel majors via automated (laravel-shift) PRs rather than going dormant.
The real integration cost sits in the clients and in targeting design, not in PHP:
Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Vendor concentration on Pusher Beams | High | Managed push with a niche footprint; product longevity and pricing leverage sit entirely outside our control |
| Low community validation | Medium | 279 stars and effectively zero dependent packages means thin StackOverflow/GitHub issue coverage; expect to debug against the Beams API docs directly rather than the adapter |
| Thin-wrapper maintenance coupling | Low–Medium | 4.4.0 adds Laravel 13.x support, which suggests an active, automated upgrade cadence — reduced from Medium. Residual risk is the other axis: the upstream PHP Beams SDK, which this release does not touch |
| Support-window ambiguity after 4.4.0 | Low–Medium | A minor bump adding Laravel 13 may coincide with dropping earlier Laravel support; confirm the supported range before assuming our current version is still covered |
| Duplicate/lost delivery semantics | Medium | Beams offers best-effort delivery and minimal per-message observability; idempotency and "did it arrive" are our problem |
| Credential blast radius | Medium | A leaked instance secret permits arbitrary pushes to our install base; secret handling and rotation must be designed, not assumed |
Key questions
Stack fit Assumes Laravel 9+ on PHP 8.x with the standard Notification stack and a queue worker. No database, cache, or infrastructure changes. With 4.4.0 the package now covers up to Laravel 13.x; confirm the lower bound of that range against our pinned framework version before commitment — the package's version matrix, not its feature set, remains the likely blocker, but the matrix has moved in our favour.
Migration path
Lock-in is contained but not eliminated. Because targeting is expressed as a Laravel channel, call sites remain vendor-neutral: swapping providers means changing the channel class in via() and adding a sibling toX() method per notification. Two practices turn that from theory into reality:
via() array behind a config-driven resolver or feature flag so channel selection is a config change, not a code change.Compatibility 4.4.0 removes the most likely upgrade-time conflict: Laravel 13 no longer forces us to fork, pin, or patch the channel. Verify: the full supported Laravel/PHP range in 4.4.0 (specifically whether our current version is still inside it), the upstream Beams PHP SDK version it pins, and whether that SDK imposes a Guzzle/cURL constraint that conflicts with our existing HTTP clients. Note the release touches only Laravel compatibility — the Beams SDK pin is unchanged from 4.3.0, so no new client-side or network-surface risk is introduced. Also confirm that our mobile teams' Beams SDK versions are still supported by Pusher; client SDK deprecations, not PHP ones, remain the more common long-tail surprise.
Sequencing
Maintenance Ongoing PHP maintenance is near-zero and 4.4.0 reinforces that: Laravel-major tracking is being handled upstream, apparently on an automated cadence, so the adapter is unlikely to become the reason we cannot take a framework upgrade. The sustained obligations remain (a) tracking the Beams PHP SDK, (b) tracking Beams client SDK versions, and (c) owning the device-registration endpoint and its auth semantics forever. Budget for (c), not (a).
Support Community-supported only. For production push, assume we need a paid Pusher plan to get a support channel, plus an internal runbook covering secret rotation, instance failover, and "push isn't arriving" triage. Allocate a named owner; a package with zero dependents has no informal peer network to lean on — 4.4.0 shows the maintainers are active, but that is not the same as a support contract.
Scaling Fan-out and delivery scale with Beams, not with our infrastructure — this is the package's main operational selling point. Our constraints are the publish API's per-request targeting limits (batch large audiences rather than issuing one call per user), Beams' per-message pricing as the device base grows, and the throughput of the queue workers draining notifications. Model cost against projected monthly sends per platform before the pilot, not after. 4.4.0 has no scaling or cost implications.
Failure modes
notify() can abort the entire notification, including co-channels like mail or database. Wrap the channel or isolate it per-notification; do not let a push outage suppress an email.Ramp-up A mid-level Laravel developer reaches productive use in under a day; the adapter's surface is small enough to read in full. The onboarding cost that matters is cross-functional: mobile engineers need Beams SDK fluency, and whoever owns the auth endpoint needs to understand both our identity model and Beams' registration contract. Plan roughly one engineer-day server-side, one to two engineer-weeks across mobile, and a half-day of on-call runbook work before the pilot goes live. 4.4.0 does not change any of these estimates.
How can I help you explore Laravel packages today?