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

modera/notification-bundle

Modera Notification Bundle adds a flexible notification system to Modera CMS applications, letting you compose, queue, and deliver messages through channels like email and SMS, with reusable templates, recipient handling, and simple integration into Laravel-based projects.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

The headline finding: this is not a Laravel package. modera/notification-bundle is a Symfony bundle from the Modera business-application platform. It ships a Bundle subclass, a DI extension, compiler passes, and Doctrine ORM entity mappings — none of which have a native counterpart in Laravel's service container. The framing of this evaluation as a "Laravel/PHP package" matters, because the honest answer is that the Laravel half of that phrase does not apply.

Architecture fit — poor. Laravel already solves this problem in-framework via Illuminate\Notifications and its database channel: a notifications table, a Notifiable trait, read/unread state via read_at, and channel fan-out. Adopting a Symfony bundle to reproduce that means importing an entire foreign DI paradigm to get a schema we can write in a migration in under an hour. There is no architectural seam where this bundle adds value inside a Laravel app.

Integration feasibility — split verdict. Drop-in adoption: not feasible. There is no service provider, no facade, no config publish; a Laravel integration would require booting a Symfony container alongside the Laravel container, which is unjustifiable for notification storage. Data-model extraction: feasible, roughly 1–2 engineer-days — read the entity schema, port to Eloquent migrations, reimplement the store/retrieve service against a clean interface.

Technical risk — high and compounding.

  • Staleness: last release 2017-12-12, roughly eight years. That places it in the PHP 5.6/7.0 and Symfony 2.x/3.x era.
  • Doctrine annotations: the entity mappings almost certainly rely on docblock annotations, which are deprecated in Doctrine ORM 2.x and removed in 3.x. On PHP 8.1+ with a modern ORM, this is a hard failure, not a warning.
  • Dependency gravity: bundles of this vintage typically pull modera/foundation or sibling packages, plus pinned Symfony components. Composer resolution against a modern Laravel composer.json is likely to be an unsolvable conflict rather than a resolvable one.
  • Signal: 2 stars, 0 dependents, score 0.16. There is no production usage to learn from and no crowd-sourced bug surface.

The one interesting number is opportunity at 38.2 — materially higher than the 0.16 adoption score. That divergence is the actual insight: the problem (persistent, per-user notification storage with read state) has real value in almost every business app; this artifact does not deliver it. Build the capability, don't acquire this implementation.

Key questions before any further spend:

  1. What does composer.json actually require, and does it resolve on PHP 8.2/8.3 at all?
  2. Is the recipient model user-only, or does it support roles/groups/tenancy? (If the latter, the schema is the only asset worth reading.)
  3. Does it have any queue, digest, or batching abstraction, or is dispatch synchronous?
  4. Is there a Modera commercial support path for this bundle, or is it an abandoned internal artifact?
  5. What is our real requirement — storage only, or transport + storage + preferences? Laravel covers all three.

Integration Approach

Stack fit — no. Laravel 10/11 on PHP 8.2+ with Eloquent is the wrong host for a Symfony 2/3-era Doctrine bundle. Forcing compatibility would mean pinning doctrine/orm to a 2.x line, adding symfony/dependency-injection and symfony/http-kernel, and maintaining a container bridge — a large, permanent tax for a CRUD table.

Recommended path: reference-only, then rebuild native. Treat the repository as a design document, not a dependency.

  1. Read the entity schema and service API; note the state model (read/unread, timestamps, recipient typing).
  2. Author Eloquent migrations and a Notification model with a narrow NotificationStore interface (create, forRecipient, markRead, unreadCount).
  3. Implement against the interface; wire into Laravel's notification channel or call it directly from domain services.
  4. Keep the interface as the swap boundary so a future vendor decision stays cheap.

This yields the same persisted capability with zero foreign-runtime risk, and it lands in days rather than weeks.

Migration path (if there is legacy Modera data to import). Export the notification table, map recipient identifiers to your users/tenants keys, backfill read_at from whatever boolean or status column the original used, and load via chunked inserts. Watch for orphaned recipients and for timestamp columns stored in server-local time rather than UTC.

Compatibility notes. If anyone insists on evaluating the bundle directly, do it in an isolated container pinned to PHP 7.4 — not in the application — so a failed composer resolution cannot contaminate the lockfile. Expect annotation-parsing fatals on anything newer.

Sequencing.

  • Day 0.5: isolated composer spike + composer.json review. Gate: does it install and boot at all?
  • Day 1: schema and API extraction; document the recipient and state model.
  • Day 1.5: build-vs-native decision with the interface sketch in hand.
  • Days 2–4: implement native store, migrations, tests, backfill script if needed.

Kill the track at the first gate if the spike fails — which is the likely outcome.

Operational Impact

Maintenance — you become the maintainer. Eight years without a release, no open-issue triage, no security advisories filed against it. Any fork inherits PHP-version drift, Doctrine annotation removal, and Symfony component churn with no upstream to rebase onto. Budget ongoing ownership, not a one-time integration.

Support — effectively zero. Community support is nonexistent at 2 stars and 0 dependents. Modera is a real agency and may offer commercial support for its platform, but there is no evidence of a support commitment for this bundle specifically. Escalation path is "read the source."

Scaling — unproven at any volume. A 2017-era notification store typically offers no retention or archival policy, no partitioning guidance, no fan-out abstraction, and no documented indexing. Expect the inbox query to be a WHERE recipient = ? ORDER BY created_at DESC with no limit contract — fine at thousands of rows, painful at millions. If we adopt the schema, add indexes on (recipient_type, recipient_id, read_at, created_at) from day one and define a retention window before launch, not after.

Failure modes to plan for:

  • Hard install failure — composer conflict or annotation fatal on PHP 8. Detect in the spike, not in CI.
  • Dual-container fragility — if a bridge is attempted, Symfony container boot failures surface as opaque 500s inside request handling.
  • Silent notification loss — synchronous writes inside a rolled-back transaction drop notifications with no error surfaced to the producer.
  • Unbounded reads — missing pagination contract pushes memory pressure to the application layer as inboxes grow.
  • Unpatched transitive dependencies — the real security exposure sits in pinned 2017-era libraries, not in this bundle's own ~small surface.

Ramp-up — moderate for a small task. Modera's conventions (bundle config trees, compiler-pass wiring, entity mapping strategy) are sparsely documented and unfamiliar to a Laravel team. Realistic estimate: half a day to read the source well enough to judge the schema, and no amount of reading makes the runtime a good fit.

Recommendation. Do not integrate. Extract the data model if it is cleaner than what we would design ourselves — likely it is not, given Laravel's built-in notifications table already encodes the same semantics. The 0.16 score is accurate for adoption; the 38.2 opportunity score is a signal about the problem domain, and the correct response to that signal is to build the capability natively.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
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
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core