edvinaskrucas/notification
Edvinaskrucas Notification is a Laravel package for creating, storing, and managing user notifications. It offers database-backed notification feeds, customizable templates, and a simple API for sending notifications to Eloquent models.
Architecture fit. edvinaskrucas/notification is a thin, single-purpose service layer over two Laravel primitives: the session store and the Blade view factory. NotificationManager collects typed messages (success, error, info, warning, plus configurable custom types) into an in-memory container, flushes them to the session under a configurable key, and renders them through publishable Blade templates on the next request. There is no persistence layer, no queue, no event bus, no external service, and no database migration. This makes it an excellent fit for server-rendered, session-backed Laravel monoliths and a poor fit for stateless APIs, SPA/JSON response flows, Inertia, or anything requiring durable, cross-device, or asynchronous notification delivery. It solves "flash a message after a redirect," and nothing more.
Integration feasibility. High, on the right stack. Install is a single Composer require; Laravel 5.5+ auto-discovery means no manual provider or facade registration, and php artisan vendor:publish exposes config plus views for theming. A working integration is realistically 2–4 hours, most of it spent on template styling and deciding where showAll() lives in the layout. Blast radius is small and reversible: two files of config, one facade call per flash site, one Blade include per layout.
Technical risk. The dominant risk is version currency, not code quality. The last release is 2017-03-27 (Laravel 5.4/5.5 era); the package's Composer constraints target illuminate/* 5.x, so on Laravel 6+ composer require will typically fail on constraint resolution rather than on runtime behaviour. The underlying APIs it touches (session flash/get, view make) have remained stable, so a fork with widened constraints often works — but that is an unverified assumption you must spike, not a plan. Secondary risks: the 2017 code predates PHP 8.x and may emit deprecations; the package is effectively unmaintained, so any CVE or framework break is yours to fix; and the default templates' escaping must be audited if message content ever interpolates user input. The opportunity: 2.28 score reflects the honest reality that this is a commodity capability with many maintained alternatives — the package's value is convenience and existing usage, not differentiation.
Key questions.
Stack fit. Use it only where Laravel session state and Blade rendering already define the request lifecycle. In a legacy 5.x application it is a low-friction win; in a new build it should not be adopted, because the maintained alternatives provide the same API surface with current framework support.
Migration path. Two viable routes, decided by the spike result:
packages/ or a private VCS repo, widen illuminate/* constraints, add a PHP 8 CI job, and treat it as first-party code. Cost is low because the surface is a few hundred lines.Notification::success(...) call sites keep compiling. This converts an unmaintained dependency into an owned, testable internal utility with no call-site churn.Both routes should end at "not a third-party dependency," which is the strategic point: the capability is small enough that ownership is cheaper than dependency risk.
Compatibility. Verify three things before committing: Composer constraint resolution on the target Laravel, absence of PHP 8 deprecation noise in the manager and container classes, and correct behaviour of the session flash/reflash path across the login flow — the classic defect is notifications being wiped by session()->regenerate() on authentication, which the package does not abstract away.
Sequencing.
Maintenance. The package is unmaintained: no releases since 2017, no security response, no issue triage. Every future Laravel major becomes an owner-initiated compatibility exercise. The mitigating factor is scope — the code is small, dependency-free, and readable, so fork maintenance is measured in hours per framework upgrade, not weeks. Budget a named owner regardless.
Support. Community artifacts only: README, historical issues, StackOverflow. No vendor, no SLA, no LTS branch. Internal documentation should cover the session key, config location, view override path, and the intended UX for each notification type, so the knowledge is not held by one engineer.
Scaling. Operationally negligible. Cost is one session read and one write per request, plus a trivial render loop, well below any meaningful throughput threshold. The real ceiling is session payload size: each notification adds to the session, which matters under the cookie driver (~4 KB) or high-volume Redis session storage. Cap the container size and avoid unbounded accumulation in loops. This is never the application's bottleneck, but it can become a correctness bug in bulk-operation screens that flash per item.
Failure modes. The high-frequency ones are silent: notifications not rendering because the layout omits showAll(), or because the session was regenerated between flash and redirect (login, logout, CSRF refresh); messages rendering twice when both a layout include and a controller render path fire; unpublished views throwing View [notifications::...] not found; and Composer install failing outright on modern Laravel, which blocks CI rather than production. XSS is a live concern only if message strings carry user input and the template uses unescaped output — audit once, then treat as closed. None of these degrade gracefully; all are easy to detect with a single end-to-end test.
Ramp-up. Hours for any Laravel developer to use the API; half a day to understand the internals well enough to fork. The genuine ramp-up cost is not technical — it is the decision record explaining why this unmaintained package exists in the tree, who owns it, and what triggers its removal. Write that down at adoption time, or the next team will re-litigate it from scratch.
TPM verdict. Low strategic value, low integration cost, moderate unmaintained-dependency risk. Approve a timeboxed compatibility spike; default to replacing with an owned shim or a maintained equivalent rather than forking, unless the spike shows a fork is cheaper than one engineer-week.
How can I help you explore Laravel packages today?