A FIELD GUIDE TO LARAVEL · VOLUME II · THE ECOSYSTEM
ENTRY II.16 · BROADCASTING
Echo
Package · first recorded 2016, with Laravel 5.3
The JavaScript client for Laravel broadcasting. One object subscribes to channels, authorises private and presence ones against your app, and hands each event to a callback, whatever sits behind: Reverb, Pusher, Ably or Mercure.
Specification
Kind npm package, in the browser. No PHP of its own
Protocol Pusher protocol over WebSocket, or Socket.IO; EventSource for Mercure
Runs on The browser; React, Vue and Svelte hooks via @laravel/echo-*
Installed by php artisan install:broadcasting · npm i laravel-echo pusher-js
Voice none. Echo has no artisan commands
Scales by One socket per tab, as many channels on it as needed
Range Cloud: yes. Pairs with managed Reverb
Forge, VPS: yes, against a Reverb process or a vendor
Vapor: yes, against Pusher or Ably; Vapor injects a Pusher broadcast driver
Neighbours
Broadcasting is the framework contract on the server side: events, channels and the auth routes. Reverb is a WebSocket server that speaks the Pusher protocol, and on Cloud a managed Reverb cluster injects Echo's variables for you. Echo is the browser half: it listens, it never serves.
Field marks
window.Echo in resources/js/
VITE_REVERB_APP_KEY
routes/channels.php
@laravel/echo-react in package.json
Fig. II.16.1 · the listening side, exploded
Parts
1 Broadcaster. Reverb, Pusher, Ably or a Mercure hub. Echo's broadcaster option and the VITE_* keys choose which.
2 Socket, one per tab, in blue. pusher-js carries the Pusher protocol; Mercure uses the browser's own EventSource.
3 Echo instance. window.Echo = new Echo({...}) in resources/js. socketId() tags your own requests for toOthers().
4 Subscription. Echo.channel, Echo.private, Echo.encryptedPrivate, or Echo.join for presence: here, joining, leaving.
5 Authorisation. Private and presence subscriptions POST to /broadcasting/auth; routes/channels.php says yes or no.
6 Listener. .listen('OrderShipped', cb); .listenForWhisper for client events. useEcho hooks leave the channel on unmount.
Hidden joinery
The Reverb broadcaster needs laravel-echo 1.16 or later. Echo prepends App\Events to event names; a leading dot opts out, which is how broadcastAs names are heard. toOthers works because Echo adds X-Socket-ID to global axios, jQuery and Turbo requests. useConnectionStatus reports connected, connecting, reconnecting, disconnected or failed.
Every line checked on 2026-10-08 against the 13.x docs, laravel/echo source and npm.
TITLE
Echo · the listening side
SOURCES
laravel.com/docs/13.x/broadcasting · laravel.com/docs/5.3/releases · github.com/laravel/echo/tree/2.x/packages/laravel-echo/src · registry.npmjs.org/laravel-echo · registry.npmjs.org/@laravel/echo-react · laravel.com/docs/13.x/reverb · laravel.com/cloud/docs/resources/websockets · laravel.com/forge/docs · docs.vapor.build
STATUS
Verified · 2026-10-08
SHEET
II.16 of 48
REV
A · 2026-10-08
DRAWN
BS
FINISH
All faces, including the back