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

Rms Push Notifications Bundle Laravel Package

richsage/rms-push-notifications-bundle

RMS Push Notifications Bundle is a Laravel/PHP package for sending push notifications to mobile devices via providers such as APNs and FCM, with a simple API for managing devices, payloads, and delivery.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — non-existent for Laravel. The decisive TPM finding is a framing mismatch that must be surfaced in the first sentence of any stakeholder review: this is a Symfony2 bundle, not a Laravel package. There is no ServiceProvider, no config/*.php publishable file, no facade, no Illuminate\Notifications channel, and no queue/job wiring. Its integration contract is Symfony's ContainerBuilder, DependencyInjection\Extension, and Bundle registration — machinery Laravel does not run. Any "Laravel integration" would be a hand-built shim in a service provider, which is precisely the kind of task that looks like 2 days and turns into 3 weeks once lifecycle, config resolution, and container semantics are reconciled. For a TPM, this is a stop condition, not a tradeoff.

Integration feasibility — effectively zero as a dependency. Every transport is provider-dead: C2DM (shut down 2012/2015), GCM (superseded by FCM HTTP v1 in 2019), BlackBerry BIS/BES (discontinued), Windows Mobile MPNS (retired). Only the APNs path is conceptually alive, and it uses the legacy binary protocol and certificate auth, not the current HTTP/2 provider API with .p8 JWT. You cannot make four of five transports work by writing code — the remote endpoints no longer exist. Feasibility is therefore not "hard," it is "not possible."

Technical risk — critical and terminal. Archived with an explicit NOT MAINTAINED marker, 0 dependents, no CI/test surface visible, Symfony 2.x-era idioms (EOL since Nov 2018), and pre-PSR code style. MIT licensing is permissive and unproblematic, but licensing is not the risk here — ownership is. Adopting it transfers 100% of maintenance for a codebase with no upstream, no CVE feed, and no community forks to inherit from. The 317 stars are historical archaeology, not adoption signal. The score of 10.02 with opportunity 22.74 should be read as an artifact of the scoring model rewarding topical relevance (push notifications are a real problem) over viability (this package cannot solve it).

Key TPM questions to put to engineering before any decision:

  • Is there any live requirement — a BlackBerry or Windows Mobile fleet still in the field — that only this package's transport list addresses? (If yes, that is a device-lifecycle/sunset program, not a library decision.)
  • What is our actual transport mix and OS floor (iOS/Android/Web), and does anything we ship need more than FCM + APNs?
  • Do we already own a device-token registry, or would we be inheriting this bundle's token/feedback model wholesale?
  • Is anyone proposing this as a reading reference (acceptable) or as a dependency (reject)? The distinction must be explicit in the ticket.
  • If a fork were somehow mandated, who is the named owner and is the estimate 2 weeks or 2 quarters? Force the number.

TPM verdict: the only legitimate use is design prior art. The bundle is a useful catalog of the shape of a multi-provider push abstraction — driver-per-platform, message DTO, token store, stale-token feedback loop. That shape is reusable knowledge; the code is not. Frame the deliverable as a requirements input, not an integration.

Integration Approach

Stack fit: reject at intake. This does not belong in a Laravel composer.json under any framing, including as a "temporary bridge" or a "quick unblock." The correct disposition is a one-line entry in the dependency policy — no archived packages on the notification path — plus an ADR recording why it was evaluated and declined, so it is not re-proposed by the next engineer who greps for "push notifications" and finds 317 stars.

Harvest the contract, discard the implementation. The TPM-artifact from this evaluation is a short interface spec to hand to either an internal build or a vendor RFP:

  • A PushSender / PushChannel contract with one driver per platform, bound via a Laravel manager/factory so drivers are swappable.
  • A message DTO carrying device token, payload, badge, sound, collapse key, and per-platform options.
  • A result object surfacing per-token success/failure — the prerequisite for token pruning.
  • A stale-token reconciliation concept, folded into per-send error responses (410 Unregistered, BadDeviceToken) rather than the legacy separate APNs feedback polling loop.

Replacement mapping (target state versus the bundle's legacy paths):

Legacy path in bundle Modern replacement
APNs binary client APNs HTTP/2 provider API, .p8 JWT auth
GCM / C2DM FCM HTTP v1 with OAuth2 service account
BlackBerry push Retire — sunset path only
Windows Mobile toast Retire — sunset path only
Symfony bundle service wiring Laravel service provider + config + driver manager

Compatibility constraints the target must satisfy (none satisfiable by the archived code without a total rewrite): PHP 8.x typed properties, no mcrypt, PSR-7/PSR-18 HTTP client, Laravel queue workers, TLS 1.2+ only.

Sequencing for the TPM to run:

  1. Discovery (week 1). Inventory platforms and OS floors in scope; confirm BlackBerry/Windows Mobile have no live requirement; audit existing token storage. Output: go/no-go on scope.
  2. Contract definition (week 1–2). PushSender/PushChannel interfaces, message DTO, error taxonomy in our own namespace. No third-party types leak into domain code.
  3. Adapter build (week 2–4). Two adapters only — APNs HTTP/2 and FCM v1 — wrapping maintained libraries so they remain swappable.
  4. Token lifecycle (week 3–5). Registry table, pruning on 410/BadDeviceToken, idempotency keys, per-token send audit.
  5. Cutover (week 5–6). Feature-flag the route; shadow-send in staging against APNs sandbox and FCM; then delete any legacy reference entirely.
  6. Decommission + ADR. Remove from docs and runbooks if present anywhere; record the decision.

Escape hatch: if a hard dependency somehow surfaces (a legacy Symfony2 service still in the tree), isolate it behind an anti-corruption layer, pin an internal fork, and budget explicitly for full self-maintenance — assume no upstream security patches, ever.

Operational Impact

Maintenance: unbounded and entirely ours. Archived + zero dependents + no maintainer means every future PHP, Symfony, OS, and TLS change becomes our patch. There is no upgrade path, no CVE feed, and no issue tracker with a human on the other end. Even a "small" fork is a permanent ownership line item — and push infrastructure is exactly the class of code that fails silently when TLS roots rotate or a provider bumps protocol requirements. A TPM should model this as a recurring headcount fraction, not a one-time integration cost.

Support: no vendor, no community, no path. 317 stars is a historical artifact; with 0 dependents there is no downstream user base generating forks or patches. Any incident becomes from-scratch debugging against protocols whose provider documentation has largely been pulled offline. For an on-call engineer at 2 a.m., that is the worst possible position: undocumented, unsupported, unmaintained, and unowned.

Scaling: wrong shape for modern fan-out. The legacy model assumes synchronous batch sends with small per-request device limits (GCM's ~1000-token ceiling, APNs binary framing constraints). Modern fan-out expects queued, parallel, per-device delivery with backpressure and retry semantics — which is exactly what Laravel's queue system plus a managed provider gives you, and exactly what this bundle does not.

Failure modes to log in the risk register: silent delivery failure from dead endpoints (no error, just no notification); token-registry drift with no pruning loop; TLS/cipher incompatibility surfacing as a hard outage rather than a warning; and the organizational failure mode — an unfamiliar engineer adding it to composer.json because it is the top search result for "push notifications PHP."

Ramp-up: negative. There is no ramp-up value to the team, because the skills it teaches (Symfony2 DI, retired binary protocols, certificate-based APNs) are all dead. Ramp-up cost runs the other way: time spent understanding this code is time not spent on FCM v1 and APNs HTTP/2, which are small, well-documented surfaces that a mid-level engineer can own in days.

TPM bottom line for the ops review: risk if adopted is high and permanent (unsupported code on a customer-facing path). Risk if ignored is low and one-time (someone re-proposes a dead package). The asymmetry is decisive — close it with a policy line and an ADR, and spend the actual effort on a token-lifecycle PRD plus a managed-provider evaluation (OneSignal, SNS, Pusher Beams, Expo, or kreait/laravel-firebase for the Firebase-native path).

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.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console