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

Unified Push Laravel Package

zbox/unified-push

Unified push notification package for Laravel that sends messages through multiple providers behind one clean API. Configure your drivers, target devices or topics, and deliver consistent push notifications without rewriting provider-specific code.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a Laravel-style multi-driver push abstraction: one facade/config surface over three transports (APNS, GCM, MPNS). Conceptually it follows the Manager + driver pattern Laravel itself uses for Mail, Cache, and Filesystem, which is the right shape for the problem. The problem is the layer: Laravel now ships a first-class notification system, and the community has settled on laravel-notification-channels/* packages as the integration point. This package predates that convention, so it sits beside the framework rather than inside it. Any real leverage comes from the driver contract and config ergonomics, not from the transports.

Integration feasibility. Low as a dependency, moderate as a fork. At 14 stars, 0 dependents, and a last release of 2016-09-29, the package was built against the Laravel 5.1–5.3 era: expect illuminate/support constraints that hard-conflict with Laravel 9+/10+/11+, PHP 5.5/5.6-era syntax, manual service-provider registration (pre-5.5 auto-discovery), and no published test suite to validate behavior against. A composer require on a current stack will almost certainly fail resolution, and forcing it past --ignore-platform-reqs would be the wrong call for anything touching credentials or device tokens.

Technical risk: high, and concentrated in the transports. The abstraction is fine; every protocol underneath it is dead or degraded.

Channel Status Consequence
GCM Deprecated Apr 2018, shut down Apr 2019; superseded by FCM (whose legacy HTTP API itself closed in 2024) Requests to android.googleapis.com/gcm/send fail outright; any Android path must be rebuilt on FCM HTTP v1
MPNS Retired with the Windows Phone / Silverlight platform No live endpoint; dead code weight in the codebase
APNS Binary provider protocol deprecated Nov 2020, unsupported since Mar 2021; current path is HTTP/2 Provider API with token (.p8 JWT) or cert auth If the package uses binary stream sockets — near-certain for 2016 — iOS delivery is broken until reimplemented

So the honest read: two of three channels are unrecoverable, and the third needs its transport rewritten. The salvageable asset is a few hundred lines of config/manager code and whatever ergonomics the original author got right.

Key questions to answer before committing.

  1. Does the code expose a clean driver interface we can reimplement, or is provider logic inlined into the facade?
  2. What are the actual composer.json PHP and illuminate/* constraints — is this a Laravel 5-only artifact?
  3. How are APNS certificates/passphrases handled (file paths, config, env)? This determines whether there's a security finding to remediate or just code to discard.
  4. Is there queue integration (Laravel ShouldQueue, retry semantics), or is sending synchronous and blocking?
  5. Are there any tests at all — even characterization tests would reduce fork risk?

Integration Approach

Stack fit. If the estate is genuinely on Laravel 5.x and PHP 7.0, this is a plausible drop-in and the calculus changes to "patch the transports." On Laravel 9+ it does not fit as a dependency and should be treated as a reference implementation to mine, not a library to adopt.

Migration path — three options, in preference order.

  1. Reimplement at the notification layer (recommended). Build Notification classes using laravel-notification-channels/fcm for Android/web and a maintained APNS HTTP/2 client (e.g., edamov/pushok or riverline/apns) for iOS, behind a thin internal PushGateway interface. Preserves the multi-channel ergonomics this package was reaching for, on supported protocols, with an upgrade path the team owns.
  2. Fork and swap transports. Keep the manager/driver/config surface, replace the GCM driver with FCM HTTP v1, the APNS driver with HTTP/2 + JWT, and delete MPNS. Viable only if question 1 above comes back clean and the codebase is small enough to read in a day.
  3. Vendor as-is. Acceptable only for a frozen legacy app with no Android and no iOS 15+ requirement — which is to say, almost never.

Compatibility work either way. Modernize composer.json constraints, add illuminate/support ^9–^12, register via extra.laravel.providers for auto-discovery, add PHPUnit/Pest characterization tests around the driver contract, and pin credentials to config/env rather than hardcoded paths.

Sequencing. (1) Two-day code audit answering the five questions. (2) Decision gate: fork vs. reimplement. (3) One-week spike delivering a single working APNS HTTP/2 send plus an FCM v1 send against sandbox credentials, to price the real work. (4) Port remaining channels, delete MPNS. (5) Contract tests, then cutover behind a feature flag with dual-send shadowing on a sample of devices. Expect 2–4 engineer-weeks for full reimplementation, versus roughly half a day if option 3 were acceptable.

Operational Impact

Maintenance. Effectively unmaintained: no release in roughly nine years, one author, no dependents to absorb breakage. There is no upstream to file issues against and no patch stream — the moment you fork, you own it permanently. MIT licensing makes the fork clean legally; it does nothing about the ongoing cost.

Support and security. No CVE feed, no advisory process, no security review. Credential handling is the live concern: APNS certificate passphrases and FCM server keys read from files or config will land in logs and config caches if the original code is careless. Push credentials are high-value — a leaked FCM key permits sending to your entire Android install base. Treat a code review of secret handling as a gating item, not a nice-to-have.

Scaling. Legacy APNS binary transport typically holds one long-lived stream per certificate with synchronous, blocking reads — under queue workers this serializes delivery and can starve the pool. There is no connection pooling and no per-device concurrency control. GCM legacy capped at 1,000 registration IDs per request and offered no per-message result granularity beyond the response body. None of this matters if you reimplement over HTTP/2, which multiplexes natively; it matters a great deal if anyone tries to run the original code at volume.

Failure modes — the dangerous part. These protocols fail quietly. GCM legacy returned HTTP 200 with per-message errors inside the body, so naive integrations logged success while delivering nothing. The APNS binary protocol reported errors asynchronously on a separate feedback channel, easy to miss entirely. MPNS returned 404/410 for retired channels. In all three cases the system looks healthy while notifications silently vanish — the worst failure shape for a TPM, because it surfaces as a user-experience complaint weeks after the regression. Compounding this: certificates expire with no built-in alerting, and invalid device tokens accumulate without pruning. Any adopted or forked version needs explicit delivery telemetry, token hygiene jobs, and expiry monitoring added on top.

Ramp-up. Reading the code is cheap — it's small. Institutional knowledge is the expensive part: nobody on the team will have operated these protocols, and the documentation and Stack Overflow answers that once supported them have decayed alongside the services. Budget for the team learning dead APIs in order to replace them, and weigh that against the far shorter path of starting directly from supported clients.

Recommendation. Opportunity score of 3.31 reflects the abstraction's residual value, not the package's. Use it as a design reference for the driver/config surface, reimplement the transports on FCM v1 and APNS HTTP/2, and delete MPNS. Adopting it directly carries high probability of silent delivery failure for a modest savings in upfront design work.

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.
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator