// the find
laravel/reverb
Laravel Reverb provides a real-time WebSocket communication backend for Laravel applications.
Reverb is Laravel's first-party WebSocket server, implementing the Pusher protocol so you can drop it in as a self-hosted replacement for Pusher without changing your frontend JS. It runs as a ReactPHP event loop inside your existing Laravel app process. Target audience is Laravel shops that want real-time features without a Pusher bill or a separate Node process.
Pusher protocol compatibility means Laravel Echo, pusher-js, and the whole existing ecosystem just work — zero client-side changes. Redis pub/sub support means horizontal scaling across multiple Reverb processes is handled natively, not bolted on. Laravel Pulse integration ships out of the box, so connection counts and message rates show up in your existing observability dashboard. The spec-tests directory runs against the official Pusher client spec JSON, which is a credible correctness guarantee rather than just hand-rolled happy-path tests.
Connection state is in-memory by default (ArrayChannelManager), so a server restart drops all subscribers with no reconnection orchestration — Redis mode fixes this but adds operational complexity. Single-threaded PHP event loop means one slow message handler can stall the entire server; there's no worker pool or backpressure mechanism exposed to userland. The HTTP server is custom-built on ReactPHP rather than reusing battle-tested infrastructure like nginx+mod_php, which means you're trusting a relatively young implementation with your production WebSocket traffic. Multi-app support exists in config but the docs and test coverage are noticeably thinner for that path than single-app.