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

Notification Bundle Laravel Package

reliefapps/notification-bundle

Symfony bundle that adds a flexible notification system to your app: create, persist, and deliver notifications to users through configurable channels. Includes Doctrine integration, Twig templates, and simple setup so you can wire notifications into existing projects quickly.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a Symfony 3 bundle, not a Laravel package. Its integration surface is idiomatic Symfony: a Bundle subclass, a DependencyInjection/Extension for the config tree, YAML/XML service definitions, tagged services, and container compilation passes. None of that maps onto Laravel's service provider / facade / config-repository model. There is no laravel-compatible autodiscovery, no PackageManifest entry, no Illuminate\Support\ServiceProvider. A Laravel team cannot composer require this and get working push notifications; at best they can instantiate the underlying transport classes manually and wire them in a service provider, which means owning the glue layer from day one.

Integration feasibility. Low as a dependency, moderate as a reference implementation. The package is small (a notification bundle typically spans a handful of transports plus a dispatcher), so the extraction cost is bounded. The realistic path is to read it, port the APNs/FCM adapters behind a Laravel-native contract, and discard the bundle scaffolding.

Technical risk. High, and concentrated in three places:

  1. Ecosystem mismatch. Symfony 3 is end-of-life (3.4 security support ended November 2021). The bundle's PHP constraint will be PHP 5.5–7.x era, which is incompatible with any Laravel version you would deploy today (Laravel 10/11 require PHP 8.1/8.2+). Expect typed-property, readonly, and return-type incompatibilities on a straight port.
  2. Provider protocol decay. The description says iOS and Android. The Android path almost certainly targets GCM (shut down 2019) or legacy FCM HTTP API (deprecated 2024, removed 2025). The iOS path likely uses the legacy binary APNs protocol rather than HTTP/2 with token-based auth. Both are likely non-functional against current Google and Apple endpoints, independent of the Laravel issue. This must be verified before any estimate is trusted.
  3. Abandonment surface. Archived repo, 3 stars, 0 dependents, no security advisory process, no release cadence. Every future CVE in a transitive dependency is yours to fix. Notification transport code touches long-lived credentials (APNs .p8 keys, service account JSON), which raises the cost of an unpatched dependency well above the "we'll get to it" tier.

The aggregate score of 0.0225 is the honest signal here; the 0.94 opportunity sub-score is not a reason to adopt.

Key questions for engineering (time-box these into the spike):

  • Which APNs protocol does the code use — binary or HTTP/2? Does it support token-based (.p8) auth, or only certificate auth?
  • Which FCM API does the Android transport call — GCM, legacy FCM, or FCM v1? Is the endpoint even resolvable today?
  • What is the declared PHP and Symfony version constraint in composer.json, and how many classes fail to parse under PHP 8.2?
  • Does the bundle expose a provider-agnostic dispatcher interface we can implement ourselves, or are the transports concretely coupled to the bundle's container?
  • How are device tokens stored and invalidated? Is there any feedback/unregistration loop, or is token hygiene left to the host app?
  • What does the bundle do on 401/403 and on APNs 410 Unregistered? Silent failure is the most expensive outcome to discover in production.

Integration Approach

Stack fit: do not adopt as a dependency. Recommendation to the steering group is to treat reliefapps/notification-bundle as a design reference, not a vendor package. The Laravel ecosystem has maintained alternatives for every capability this bundle offers — kreait/firebase-php for FCM v1, edamov/pushok or paragraph1/php-apns for APNs HTTP/2, laravel-notification-channels/* for channel wiring, or managed providers (SNS, OneSignal, Pinpoint) if we want to avoid owning transport code at all. Any of these is a lower total-cost-of-ownership bet than resurrecting an archived Symfony 3 bundle.

Migration path (if the team still wants to mine it):

  1. Spike, two days. Clone, run composer install against a PHP 7.4 container, static-analyze, and determine whether the provider calls are live or dead. Document the transport class list.
  2. Define the contract first. Write a PushChannel interface in our own namespace with send(DeviceToken $token, Notification $payload): DeliveryResult and an explicit DeliveryResult enum covering success, invalid token, throttle, and transient failure. This is the artifact we actually keep.
  3. Reimplement transports. Port the APNs and FCM logic only where it is correct against current provider specs; otherwise write fresh against official docs. Budget one engineer-week for both channels, including tests against provider sandboxes.
  4. Backfill the operational features the bundle lacks. Token lifecycle (registration, dedupe, invalidation on 410/UNREGISTERED), per-provider rate limiting, retry with jitter on 429/5xx, and structured delivery logging.

Compatibility. Assume nothing passes composer validate or static analysis against PHP 8.2. Plan for the port to be a rewrite of the transport layer with the bundle as a spec, not a cherry-pick. Also check the license header on each file you lift — MIT is permissive, but keep the attribution file.

Sequencing. Do not put this on the critical path of a feature release. Sequence it as: provider-API investigation → interface definition → parallel build of APNs and FCM adapters → token-lifecycle work → load test. If the product deadline is tight, buy a managed push provider and move on; the bundle is not a schedule-saver.

Operational Impact

Maintenance. Zero upstream. The moment it enters the codebase, it is a fork with no remotes. Assign a named owner. Budget roughly 10–15% of one engineer per quarter for dependency patching and provider-API drift — Google and Apple do change auth and payload schemas, and APNs certificate rotation is an annual at-minimum operational task.

Support. No maintainer, no issue triage, no Slack, no security contact. Incident response for a broken push pipeline is entirely internal. Escalation paths end at the provider's status page.

Scaling. Provider-side limits dominate: FCM v1 rate-limits per project, APNs enforces per-connection HTTP/2 stream limits. The bundle-era code predates connection reuse and batching patterns, so plan to run sends through Laravel queues with per-provider worker pools, bounded concurrency, and exponential backoff. Fan-out cost is linear in device count — model it before a marketing blast, not during one.

Failure modes to instrument explicitly:

  • Expired APNs certificate or revoked .p8 key → total iOS outage, often silent from the app's perspective.
  • Android send returning 404/UNREGISTERED because the endpoint is the retired GCM host → 100% Android failure that looks like a transport bug, not a config bug.
  • Token-table bloat from missing invalidation → degraded throughput and inflated provider quota consumption.
  • Provider 429 during a burst → dropped sends if retries are not queued.
  • Silent catch-and-log in legacy transport code → no alerting signal; you learn about failures from user complaints.

Emit a delivery metric per channel per attempt with a result code, and alert on error-rate and on zero-traffic (a dead channel is more dangerous than a failing one).

Ramp-up. Reading and understanding the bundle is cheap — one to two days for a mid-level PHP developer, given the small codebase. The expensive ramp is provider knowledge: HTTP/2 APNs semantics, FCM v1 OAuth scopes, and token lifecycle. That knowledge is not in this repository, so staff or train for it separately and do not assume the package's presence shortens the learning curve.

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.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package