edulazaro/wiretoast
Wiretoast is a framework-agnostic toast notification system for Laravel, Livewire and Alpine, with pure CSS themes, five semantic types, seven stacked positions, dark mode, progress bars, group mode, and zero JavaScript dependencies.
composer require, one <x-wiretoast /> tag in the layout, and one $this->notify() line per action — versus a sprint of custom Blade partials, JS listeners, and z-index debugging. The buy side wins decisively; the only question worth debating is which library.session()->flash() banners, bespoke alert partials, and silent mutations with one consistent pattern. This is a roadmap item that historically gets deferred because it's unglamorous — it ships in an afternoon now.app.css, not in a PR against business logic. It also decouples us from Tailwind/Bootstrap, so the choice survives a future restyle.timeout: 0 for errors establishes a rule we can write down: success ephemeral, failures persistent until read. That's a UX standard, not a technical one — the PM owns it.Consider it when:
Look elsewhere when:
$this->notify() helper are the substance; the "framework-agnostic" framing is generous.The honest risk statement: this is a young, low-adoption package. The mitigation is structural, not wishful — MIT license means we can fork and vendor it permanently if the maintainer disappears. That is an acceptable, quantified risk only behind our own wrapper.
To executives: We can close a persistent "product feels unpolished after actions" complaint in roughly one engineering day, using a free MIT-licensed library with no license cost, no vendor contract, and no added runtime dependencies. It's a small, reversible bet — and because the code is MIT and we'll consume it through a thin internal wrapper, a bad outcome costs us an afternoon to undo, not a migration.
To engineering: One composer require, one Blade tag in the layout, assets through the existing Vite bundle (no second HTTP request, no separate cache-busting setup). No Tailwind, no Bootstrap, no JS dependency tree. Testable by asserting the dispatched event rather than the DOM. The one trap is loading assets twice — once via Vite and once via :assets="true" — which silently double-fires every toast; we'll pick the Vite path and document it.
To design: 11 production-quality themes plus full CSS-variable control, automatic and opt-in dark mode, and theming by attribute on any ancestor — so brand styling lives in our stylesheet and can ship independently of the notification logic.
The ask: approval to adopt behind an internal wrapper, with a written convention (errors persist, successes auto-dismiss, all calls go through window.toast/our base-component helper). If we skip the wrapper, we shouldn't adopt at all.
How can I help you explore Laravel packages today?