xcoorp/laravel-webpush-notifications
A Laravel package for sending Web Push notifications to browsers. It integrates with Laravel’s notification system, manages push subscriptions and VAPID keys, and lets you deliver messages even when users aren’t actively on your site.
Architecture fit. xcoorp/laravel-webpush-notifications is a Laravel-native package providing Web Push delivery (VAPID-based) through Laravel's notification/channel abstractions. It fits any Laravel monolith or modular service already using Notifiable models and queued notifications; the integration surface is a trait on the notifiable model, a published subscriptions table, and a config file for VAPID keys. No separate broker or vendor SaaS account is implied by the package's shape, which is attractive versus hosted push providers on cost and data residency.
Integration feasibility. Composer-only installation; no infrastructure change. The two real integration tasks are (a) frontend service worker registration and permission-prompt UX, and (b) key management for the VAPID keypair across environments. Both are standard and well-understood; neither requires a platform change.
Technical risk. Low-to-moderate. v1.0.3 is a pure chore release — dependency bumps, lock file maintenance, and explicit Laravel 13 support — with no breaking changes, no API surface movement, and no deprecations. The signal value here is maintenance posture, not capability: the maintainer is keeping CI actions and the Composer constraint graph current, which is the leading indicator of whether the package will survive the next framework major. Residual risks are (1) single-maintainer/small-team bus factor, (2) reliance on the underlying web-push protocol library and, transitively, on minishlink/web-push-class crypto dependencies, and (3) browser-specific delivery behavior (Safari/iOS, FCM endpoint churn) that no PHP package can fully abstract.
Key questions.
illuminate/support: ^10|^11|^12|^13), and are we free to move to 13 without a coordinated package bump?Stack fit. Drop-in for a Laravel app on PHP 8.2+ with queue workers already running. Delivery is asynchronous by nature, so it should be dispatched through the existing queue rather than synchronously in a request cycle. If the product already uses Laravel notifications for email/SMS, web push becomes a third channel on the same notification classes — the lowest-friction possible shape.
Migration path. No migration from an incumbent provider is forced. If a hosted push vendor is currently in place, run the package in parallel behind a feature flag on a single notification class, compare delivery rates and subscription survival over two to three weeks, then cut over. If this is greenfield, adopt directly; there is no legacy to reconcile.
Compatibility. v1.0.3 explicitly adds Laravel 13 support, so the package spans the framework versions we are likely to be on during this planning horizon. Confirm the constraint is a widened range rather than a hard bump to 13 only — if the latter, the package becomes a forcing function on our upgrade calendar and should be sequenced accordingly. Frontend compatibility is bounded by the Push API: evergreen Chromium and Firefox are safe; iOS requires the PWA "Add to Home Screen" install path and iOS 16.4+, which is a product constraint we must state in the spec, not a package defect.
Sequencing.
Maintenance. Low steady-state cost. The package owns its own config and migrations; our recurring obligations are VAPID key custody (rotate-on-compromise, never commit private keys, store per-environment in the secret manager) and periodic subscription-table pruning. Dependency-update noise is real but cheap: this release alone carries nine lock-file maintenance commits, so expect frequent patch releases with no behavioral content. Pin with a caret constraint and let Renovate/Dependabot handle the cadence, with human review reserved for minor and major bumps.
Support. Internal: whoever owns the notification layer. External: upstream is a small team, so we should assume best-effort response and budget for the possibility that we carry a fork or a pinned patch for a critical dependency CVE. Establish a named owner and a documented fallback (fork-and-patch, or swap to direct web-push calls) before go-live rather than during an incident.
Scaling. Push delivery is fan-out, not request-path — cost scales with notification volume and queue throughput, not user concurrency. A 100k-subscriber broadcast is 100k queued jobs; chunk the fan-out and rate-limit against FCM/Mozilla endpoints to avoid provider throttling. Watch queue depth as the primary capacity signal, and cap per-user notification frequency at the product layer to avoid permission revocation, which is the irreversible failure mode.
Failure modes.
Ramp-up. Roughly one engineer-day to a working prototype, three to five days to production-grade including the service worker and permission UX, plus a half-day of runbook and on-call documentation. No new hires, no new platform skills — the work sits inside existing Laravel and queue competence. The main non-obvious time sink is iOS behavior verification on real devices, which cannot be validated in a desktop browser or an emulator.
How can I help you explore Laravel packages today?