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

Backport Laravel Package

laravel-notification-channels/backport

Brings Laravel's modern notification channel features to older framework versions, letting legacy apps use mail, database, broadcast and other channels through a familiar, lightweight backport that requires minimal setup and keeps existing notification code unchanged.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This package is a shim, not a platform, and should be evaluated as such. It replays Laravel 5.3's notification subsystem — Notification facade, base Notification class, Notifiable trait, channel manager, and mail/database/broadcast drivers — onto 5.1/5.2, where Illuminate\Notifications\* does not exist. Its architectural value is entirely conditional: on 5.3+ it is dead weight and should be removed. The defensible case is a product pinned to 5.1/5.2 that wants to ship notification features without funding a framework upgrade first. The single most important architectural property to verify before committing is that the package's PSR-4 registration genuinely maps to Illuminate\Notifications\* — every line of application code, and the entire forward-portability story, depends on that mapping. Read composer.json yourself rather than assuming.

Integration feasibility. Feasible but entirely manual. Package auto-discovery does not exist in 5.1/5.2, so a developer must register the service provider and alias the facade in config/app.php, then publish and run the migration before the database channel works at all. Composer resolution is the gating risk: the package pins old illuminate/* constraints and an end-of-life PHP floor, so composer why-not and composer update --dry-run against the exact PHP and Laravel minors should run before any feature work. If the resolution requires --ignore-platform-reqs or hand-editing root constraints, that is a decision point for the PM, not a routine workaround — it means the dependency is fighting the platform and will keep fighting it.

Technical risk. Ranked: (1) the MailMessage bridge is the highest-risk component, because the 5.3 builder assumes mailable infrastructure — markdown rendering, Mailable classes, Mail::to()->send() — that 5.1/5.2 does not have; partial support here is likely and mail is usually the primary channel, so this is the make-or-break test. (2) Third-party channel drift: Slack webhook payloads and Nexmo/Vonage have moved on considerably since 2016 and should be assumed broken until proven otherwise. (3) On-demand notifications (Notification::route('mail', ...)) are a 5.5 feature and likely absent, which matters for the ops-alert use case. (4) Silent setup failures — Class 'Notification' not found means a missing alias line, Base table or view not found: notifications means an unpublished migration — are cheap to fix but expensive to diagnose without documentation. Documentation risk is itself material: no doc site, last release November 2016, 26 stars, zero dependents, no community troubleshooting corpus. The vendor directory is the specification.

Key questions for the team. Are we actually on 5.1/5.2, and is that a hard constraint or an assumption? What namespace does the package register, and does it match the 5.3 imports we intend to write? Does the published migration match the standard 5.3 notifications schema (uuid, notifiable_id, notifiable_type, type, data, read_at)? Do Notification::fake() and assertSentTo() survive the backport, and if not, what is the test mechanism? Does markdown mail render, and do action() buttons and attachments work? Is on-demand delivery supported? Who is the named owner of the fork, and what is the ticket number for removing it?

Integration Approach

Stack fit. Narrow by design. The package is viable only on 5.1/5.2 with a PHP runtime at or near the package's EOL floor. Any application on 5.3+ should not adopt it; any application with a near-term framework upgrade should treat adoption as a short-lived bridge with a scheduled demolition date. The opportunity score is high because the package displaces roughly a sprint of hand-rolled notification plumbing — a Notification base class, channel manager, Notifiable trait, queue integration, and mail/database drivers — at zero license cost. That is the honest business case, and it is a scheduling argument more than an architectural one: it decouples feature delivery from platform work.

Migration path. The exit path must be designed on day one, and it is cheap if the team is disciplined: write every notification class as if already on 5.3. Import from Illuminate\Notifications\*, use via(), toMail(), toDatabase(), toArray(), routeNotificationForMail(), Notification::send(), and $user->notify() exactly as the 5.3 docs describe. Treat the Laravel 5.3 notification documentation as the reference manual — it is accurate for this package by design and is the only complete documentation that exists. The moment someone invents a shim-specific API or patches vendor code, the removal cost goes from deleting a provider line to a refactor, and the bridge becomes a second legacy layer.

Compatibility and containment. Vendor or fork the package on day one: clone it, pin the commit, place it behind a VCS repositories entry in a packages/ path, and commit the tests alongside. There will be no upstream fixes, so containment is the substitute for maintenance. Register custom channels via Notification::extend() rather than editing vendor code whenever a driver breaks — a channel is a class with send($notifiable, $notification) and ports forward cleanly, which a patched vendor file never will.

Sequencing. Confirm the framework version first; nothing else matters until that is settled. Then run composer resolution checks. Then install, register provider and alias, publish and read the migration before running it, and ship mail to yourself synchronously in tinker as the first proof — it exercises the widest surface. Only after mail works end-to-end does the work become channel-by-channel verification rather than new architecture. Follow with the dispatch wrapper, queue enablement, the database channel via the trait, custom channels for any broken driver, and one test per channel in production. File the "remove backport, upgrade framework" ticket the same week, with a named owner.

Operational Impact

Maintenance. The team is the maintainer. There is no upstream triage path, no issue corpus, and no release cadence — the package has not shipped since November 2016. Budget this explicitly: hours to integrate, roughly a day to harden, and an ongoing stewardship line item with a named owner. Framing it as "free" is the trap; it is cheap to acquire and non-trivial to own.

Support and ramp-up. Onboarding cost is real and front-loaded. The first thirty minutes of adoption should be spent reading the package source, not documentation, because there is no documentation. New developers will hit confusing setup errors and, without an owner and a written runbook, will lose time rediscovering the alias/migration gotchas. Mitigate with a short internal README covering provider registration, the migration, the dispatch wrapper, and the channel allow-list.

Scaling. Queue everything transactional — ShouldQueue plus SerializesModels on notification classes — and verify against a real queue driver, not sync, that via() evaluates at dispatch time while the notifiable is re-resolved on the worker, and that a model deleted between dispatch and processing fails gracefully rather than fatally. Route all dispatch through an application-owned Notifier service so logging, channel allow-listing, and feature flags live in one place and the package stays swappable. Model per-user channel preferences inside via() rather than hardcoding, so mail can ship first and database/in-app can be added later without re-architecting. Keep toArray() payloads lean — IDs and short strings — because the JSON data column becomes painful to query and prune when it grows, and plan a retention policy for the notifications table.

Failure modes. Expect these and pre-assign responses: broken or partial MailMessage rendering (fall back to a custom mail channel calling Mail::send() with a Blade view, keeping toMail() returning a MailMessage-shaped object); third-party channel SDK drift; composer resolution breaking on a PHP minor bump; missing alias or unpublished migration surfacing as opaque runtime errors; and namespace collisions at the eventual 5.3+ upgrade if any shim-specific API leaked into domain code. That last one is the strategic failure mode — a stopgap that quietly becomes permanent. The package's real value is feature velocity now; the discipline of writing 5.3-shaped code behind a swappable dispatch wrapper is what keeps that velocity from calcifying into debt the roadmap has to pay down later.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource