symfony/ux-notify
symfony/ux-notify provides a simple notification system for Symfony apps, letting you send user-facing alerts from PHP and display them in the browser through Symfony UX. It integrates with Symfony Notifier and offers straightforward setup for consistent, real-time notifications.
Architecture fit. The release in question is symfony/ux-notify v3.6.0 — a Symfony UX bundle providing server-driven flash/toast notifications rendered through Twig components and Stimulus controllers. It is a PHP package but not a Laravel package: no service provider for Laravel's container, no Blade/Livewire components, no Laravel Mix/Vite integration. Architecture fit against a Laravel codebase is therefore low to moderate: the PHP runtime is compatible, the Symfony components it depends on can coexist in a Laravel vendor/ tree, but its delivery model (Symfony Flex recipes, bundle registration, AssetMapper, Twig) does not map onto Laravel's Blade + Vite + service-provider conventions without a bespoke integration layer.
Integration feasibility. Feasible but non-trivial and not what this package is designed for. A Laravel adoption would require: rendering the notification markup into Blade (or an Inertia/JSON channel instead of Twig), re-implementing the Stimulus controller as a Vite-bundled JS module, replacing MercureBundle wiring with a Hub client configured manually, and hand-managing the CSS/asset payload rather than using Flex's asset workflow. Realistically, the marginal value over Laravel-native options (session flash + a JS toast library, or Livewire/Filament notifications) is negative unless the organization is already running Mercure as a shared event hub across Symfony and Laravel services.
Technical risk. v3.6.0 is a minor, backward-compatible release: no breaking API changes, no deprecations announced. Notable content:
#4056 adds MercureBundle ^0.6 support; #4036 adds ^0.5 / Mercure ^0.8 support — a widening compatibility matrix, which is good for adoption but means the Mercure integration surface is churning across minor versions and is now the primary evolution point of the package.#3919 adds a conflict with symfony/asset-mapper >= 8.2 — a hard constraint guard, not a fix. If the project already pins a newer asset-mapper (e.g. pulled in transitively), Composer resolution will fail until the constraint is lifted. This is the single highest-risk item in the release for an evaluator.#3904 checks shipped assets against Web Platform Baseline and #3907/#4086 are tooling/README hygiene — signals of healthy maintenance, not capability.Key questions.
symfony/asset-mapper >= 8.2? If yes, this release is blocked and we must stay on 3.5.x or patch the constraint.#4086) imply a raised CI/dev floor?Stack fit. Treat this as a Symfony-side component in a polyglot estate, not a Laravel package. Clean fit exists in a Symfony app using Flex, Twig, AssetMapper and a Mercure hub. In a pure Laravel app, fit is poor; in a mixed estate with a shared Mercure hub, the more sensible pattern is notify from Symfony, consume in Laravel — publish notification events on Mercure and render them with a small Laravel/Vite toast consumer. That keeps Laravel native and gets the real interoperability benefit.
Migration path. If adopting inside Symfony: upgrade 3.5.x → 3.6.0 as a routine minor, no code changes expected. If pursuing Laravel integration: (1) spike a Mercure topic contract first, (2) build the Blade/Vite renderer, (3) vendor or port the Stimulus controller, (4) only then evaluate whether symfony/ux-notify remains a runtime dependency at all — in most Laravel scenarios it will not, and we would carry the dependency without using its bundle surface.
Compatibility. Verify before merging: PHP floor, Symfony component ranges, symfony/asset-mapper must be < 8.2 or the install fails per #3919, Mercure hub version must match one of the declared ranges (^0.8, MercureBundle ^0.5/^0.6), and front-end asset pipeline must tolerate the Baseline-checked assets from #3904. Run composer why symfony/asset-mapper before committing to the upgrade; a transitive major bump is the likely failure path.
Sequencing.
composer.json.Maintenance. Upstream cadence is steady and disciplined (minor-version tooling upkeep, README fixes, Baseline checks) — a positive maintenance signal. Budget for routine minors every few weeks during active development, plus occasional constraint-tightening releases like #3919 that can break Composer resolution without any API change. Pin with a caret constraint and review each minor, since the Mercure compatibility matrix is still moving.
Support. No first-party vendor support; reliance on Symfony community channels and GitHub issues. If this lands in a Laravel app, internal owners will be supporting an unsupported integration pattern — a real and under-estimated cost. Identify a named owner with Symfony UX familiarity before adoption.
Scaling. Notification rendering is lightweight and stateless; the scaling characteristics are dominated by the Mercure hub, not this package. Plan hub capacity, connection limits, and horizontal scaling at the Mercure layer. Server-side notification generation scales with the app tier; the Stimulus consumer is per-connection and will need CDN/HTTP-2 treatment at high concurrency.
Failure modes.
symfony/asset-mapper >= 8.2 (#3919) — build-blocking, no runtime warning.#3904) may behave inconsistently on older browsers in an enterprise fleet; confirm browser baseline expectations.Ramp-up. For a Symfony team: under a day to evaluate, roughly a sprint to production. For a Laravel team: 1–2 sprints of exploratory work with uncertain payoff, plus ongoing ownership of a bespoke bridge. Recommended position: do not adopt into Laravel as a Laravel package; adopt on the Symfony side and, if cross-framework notifications are the actual goal, integrate at the Mercure event layer. Version 3.6.0 itself is safe to take on the Symfony side once the asset-mapper constraint is confirmed clear.
How can I help you explore Laravel packages today?