Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Push Notification Laravel Package

asacanell/push-notification

A Laravel package for sending push notifications to your users, wrapping delivery logic behind a simple, framework-friendly API so you can dispatch alerts from anywhere in your app with minimal setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package targets a well-understood gap: a single Laravel service provider + facade that fans out to three transports (GCM, FCM, APN). For a TPM, the shape is right — config-file credentials, a façade call, no bespoke domain coupling — but the substance is stale. The transports it wraps are the ones that were deprecated and removed: GCM was shut down by Google in 2024, the FCM legacy HTTP API was retired in favour of HTTP v1 (OAuth2 service accounts), and the APNs binary provider protocol was replaced by the HTTP/2 token-based provider API in 2020–2021. A package last released 2023-03-02 is therefore, at best, a thin wrapper over APIs that will not authenticate today; at worst it is a compatibility shim that masks 404/410 responses from dead endpoints.

Integration feasibility. composer require plus a published config file is a sub-hour integration in isolation, so the effort is not in wiring — it is in whether the artifact resolves against a current Laravel/PHP constraint set. With zero stars and zero dependents there is no public evidence of anyone running it on Laravel 10/11/12 and PHP 8.2–8.4. The realistic integration is not "install the package" but "fork the package, port the transport layer to FCM HTTP v1 and APNs HTTP/2, and own it thereafter." That reframes the decision from procurement to a small internal build.

Technical risk. High, and concentrated in four places. (1) Sunset dependency: the upstream protocols are gone; any success path requires rewriting the transport layer, which is most of the package's value. (2) Abandonment: single maintainer, no releases since March 2023, no issue triage signal, no security disclosure channel — you inherit CVEs silently. (3) Credential handling: push credentials (FCM server keys, APNs .p8 signing keys, certificates) are high-value secrets; a 0-star package has had no third-party review of how it reads, logs, or caches them. (4) No battle-testing: zero dependents means zero production feedback on payload edge cases, token invalidation, or partial-batch failure — exactly the failure surface that push notification code has to get right.

Key questions. Which FCM API does the transport actually call — legacy fcm/send with a server key, or HTTP v1 with a service-account bearer token? Does it speak APNs HTTP/2 with JWT .p8 auth, or the retired binary protocol with a .pem? What are the declared illuminate/* and php constraints? Does it dispatch through Laravel's queue, or issue blocking HTTP calls inline in the request cycle? Does it expose per-token result parsing (canonical IDs, UNREGISTERED, NotRegistered) so we can prune dead tokens? How are credentials loaded — config, env, or a file path — and are they redacted from exception traces? And critically: is the maintainer responsive to a PR, or is this a hard fork on day one?

Integration Approach

Stack fit. Conceptually clean for a Laravel monolith — service provider, config, facade, one send() call. It fits a notification dispatch layer that sits behind our own interface, but it should never be called directly from controllers or domain services. The package's API surface is small enough to wrap in a day; the wrapper is what makes the vendor swap cheap.

Migration path. Do not adopt the package as a dependency. Adopt it as a reference implementation: lift the payload-shaping and driver-selection logic (which is genuinely reusable), and replace the transport classes with maintained clients — kreait/laravel-firebase / firebase/php-jwt for FCM HTTP v1, and a current APNs HTTP/2 client for iOS. If a fork is preferred over a rewrite, vendor it (vcs repository type or a path repo), pin the commit SHA, and never track upstream. Either way the deliverable is an internal PushGateway contract with FcmDriver and ApnsDriver implementations exposed through a Laravel NotificationChannel, so future provider churn is contained to a driver.

Compatibility. Verify PHP/Laravel constraints first; expect them to be the blocker on modern stacks. Because GCM is dead, the Android driver must be rewritten regardless of constraint resolution — there is no "as-is works" path for two of three transports. Treat iOS as the only candidate for reuse, and only if it uses token-based HTTP/2 auth. Plan for payload differences: FCM HTTP v1 requires structured notification/data with string-only values and a 4KB cap; APNs enforces its own 4KB limit and different priority/apns-push-type semantics. Unified payload abstraction is the real engineering cost.

Sequencing. (1) Two-day discovery: read the source, confirm the API generation and Laravel constraints, answer the key questions above. (2) Decision gate: if FCM HTTP v1 and APNs HTTP/2 are present, fork-and-pin is viable; if legacy, treat as greenfield. (3) Build the PushGateway interface and a single working driver (Android first — highest volume, simplest auth). (4) Add iOS behind the same interface. (5) Backfill queue integration and token lifecycle before the first production send. Do not sequence iOS first; APNs key management and HTTP/2 connection reuse will dominate the timeline.

Operational Impact

Maintenance. The dominant cost. Score 0 with no releases in ~2 years and no dependents means we are the maintainer from day one — dependency bumps, PHP major upgrades, and any FCM/APNs API change land on our roadmap, not a vendor's. Budget a steady ~1–2 engineer-days per quarter for a forked version, plus a spike whenever Apple or Google revises their API. A rewrite-behind-our-interface path has a higher upfront cost and a materially lower carrying cost.

Support. None. No maintainer SLA, no community, no Stack Overflow corpus. Internal triage is the only escalation path, so the on-call runbook must include the FCM/APNs provider status pages and the exact credential-rotation procedure — because the first 401 after a key rotation will be diagnosed by us at 2 a.m.

Scaling. Push fan-out is bursty (marketing blast, breaking-news alert) and the package almost certainly issues synchronous HTTP calls. That must be wrapped in queued jobs with per-batch chunking (FCM caps at 500 tokens per HTTP v1 sendEach, APNs is per-device over a pooled HTTP/2 connection) and rate limiting to stay inside provider quotas. Unbounded fan-out from a web request is the classic failure here: one large broadcast saturates the PHP-FPM pool and takes the app down with it.

Failure modes. Enumerate them before launch: silent token invalidation (UNREGISTERED/NotRegistered) with no pruning job leads to a shrinking effective audience and wasted quota; expired APNs certificates or a revoked .p8 key fail closed with opaque 403s; an HTTP/2 connection that isn't reused causes per-message TLS handshakes and upstream throttling; oversized payloads get rejected with no user-visible signal; and a dead GCM endpoint returns 404s that look like application bugs. Each needs a metric and an alert — delivery success rate by platform, invalid-token rate, provider error code breakdown, and queue depth. Absent instrumentation, push failures are invisible until a stakeholder asks why nobody got the alert.

Ramp-up. Low for a mid-level Laravel engineer — the package's own code is small, so reading it is hours, not days. The ramp-up cost sits in the surrounding knowledge: FCM service-account auth and OAuth2 token caching, APNs JWT signing and HTTP/2 multiplexing, token lifecycle and feedback loops, and the platform-specific payload semantics that determine whether a notification actually renders. Assume 3–5 days before an engineer is productive on the transport layer itself, and plan to pair that with whoever owns mobile client integration, since the receiving side's entitlement and permission configuration is a common silent-failure source that no server-side package can fix.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums