qruto/laravel-wave
Laravel Wave adds real-time features to Laravel apps without WebSockets. It broadcasts your events to the frontend over Server-Sent Events, with a simple JavaScript client and seamless integration with Laravel's existing event system—no external services required.
Architecture fit. qruto/laravel-wave slots into Laravel's existing broadcasting abstraction as a transport driver, replacing the WebSocket/Pusher path with Server-Sent Events. For a Laravel codebase already emitting ShouldBroadcast events, this is architecturally appealing: domain events stay unchanged, only the delivery mechanism and client listener swap. It is a strong fit for one-directional, server-to-client notification workloads — order status changes, dashboard counters, activity feeds, progress indicators — and a poor fit for anything needing low-latency client-to-server messaging (chat presence, collaborative editing, typing indicators), where SSE's half-duplex nature forces a parallel HTTP path.
Integration feasibility. Low on the application side: Composer install, publish config, change BROADCAST_DRIVER to wave, add the JS client and subscribe. Event classes and channel authorization reuse Laravel's Broadcast::channel() conventions, so existing authorization logic transfers. The real integration cost sits in infrastructure, not code: the SSE endpoint must be exempt from proxy buffering and response buffering (nginx proxy_buffering off, X-Accel-Buffering: no, no CDN/edge caching, aggressive idle timeouts disabled), and it must be reachable at a stable path through the load balancer.
Technical risk.
Key questions.
Stack fit. Requires a modern Laravel (10/11) and PHP 8.1+; assumes Composer and a JS bundler for the client. Cleanest fit is a Laravel monolith on a single region with HTTP/2 termination and an Octane-based runtime. If the platform is shared PHP-FPM behind a buffering CDN, expect meaningful platform work before the first event ships.
Migration path. Adopt incrementally and in parallel, not as a cutover. Keep the existing driver (Pusher/Reverb/Echo) configured for any bidirectional or latency-critical channels, and route only new, read-only streams through Wave. Because channel authorization is shared, a feature can migrate per-channel with a config flag, giving a cheap rollback: flip BROADCAST_DRIVER back and the same events resume over WebSockets.
Compatibility. Verify three surfaces before committing: (a) the Laravel version constraint against our pinned framework, (b) whether Octane worker reuse interacts badly with long-lived responses in our deployment, and (c) the JS client's framework binding — Vue/React/Livewire support varies, and Livewire-heavy apps may need wire:poll fallbacks where the client doesn't integrate.
Sequencing.
Maintenance. Low ongoing code maintenance — the package is a thin driver — but we inherit the burden of a small-vendor dependency. Pin the version, subscribe to release notifications, and budget a periodic review of the repo's health (issue response, PHP/Laravel version support). Contingency: the surface area is small enough that a fork or in-house driver is a realistic fallback, which materially reduces the vendor risk.
Support. Community-only; no commercial SLA. Internal ownership must be explicit — name a backend owner for the SSE route and an ops owner for the proxy/runtime config. Documentation burden is modest but real: reconnect semantics and "events may be missed" must be written into the frontend contract, or teams will assume WebSocket-grade delivery.
Scaling. Scales linearly with nodes only if connections are evenly distributed and the broadcast reaches the right node. Connection density, not request throughput, becomes the capacity metric — a fundamentally different autoscaling signal than CPU/RPS. Expect to scale on open-connection count and PHP worker saturation, and to isolate SSE onto its own worker pool so a traffic spike in streaming cannot take down checkout or login.
Failure modes to instrument.
Ramp-up. Application developers ramp in under a day — the API mirrors Laravel broadcasting they already know. The real ramp is on the ops side: capacity planning for persistent connections, proxy tuning, and observability for connection counts and reconnect rates. Budget roughly a sprint of platform engineering before production exposure, and treat the frontend reconnect/reconciliation contract as a first-class deliverable rather than an afterthought.
How can I help you explore Laravel packages today?