LaravelCloud The year in Laravel

A capability story

Realtime is a contract.
The socket is a resource.

Laravel has broadcasting in the framework, a WebSocket server of its own in Reverb, and Echo to listen in the browser. On Laravel Cloud, Reverb runs as a managed cluster you attach like a database. No second account, and no second set of credentials to copy.

Follow one event

The idea in one line Same event, same listener; one setting decides who carries it.

The wireOne event, end to end

OrderShipped · implements ShouldBroadcastFramework
Broadcast job · on the queue, picked up by a workerFramework
Reverb · fans out to subscribed socketsCloud runs it
Echo · listener fires in the browserFramework

BROADCAST_CONNECTION=reverb

Socket open

One event, numbered

From dispatch
to the screen.

An order ships and the customer's open page updates without a refresh. Six steps, four of them the framework's own. The shaded steps are the ones Cloud runs for you.

01 · SubscribeThe browser asks to listen

Echo joins a private channel. It calls /broadcasting/auth, and a callback in routes/channels.php says yes or no.

Echo.private(`orders.${id}`)
02 · DispatchSomething happens

The application fires an event that implements ShouldBroadcast and names its channel in broadcastOn().

OrderShipped::dispatch($order)
03 · QueueA job is queued

The framework queues a broadcast job on the default queue. ShouldBroadcastNow skips the queue.

implements ShouldBroadcast
04 · SendA worker hands it over

A queue worker sends the payload to the broadcaster's HTTP API. On Cloud, the REVERB_* variables are injected for you.

BROADCAST_CONNECTION=reverb
05 · Fan outReverb delivers it

Reverb pushes the message to every socket on that channel. Across several servers it relays through Redis pub/sub; on Cloud that is the cluster's job.

private-orders.42
06 · ListenThe page updates

The Echo listener fires. In Livewire, an attribute does the same, and the component re-renders.

#[On('echo-private:orders.{order.id},OrderShipped')]
Framework, any hostRun by Cloud when you attach WebSockets

Sources: Broadcasting docs, Reverb docs (scaling), Cloud WebSockets docs (injected variables).

Why a process

A socket needs
something that stays up.

A WebSocket is a connection held open for as long as the page is. Something has to hold it. That is why realtime has usually meant a separate service, and why Reverb is a long-running server rather than a request handler.

On functionsNo socket to hold

A serverless function ends when its request does. On Vapor, realtime meant a separate hosted service.

Reverb on your serversA process you tune

A ReactPHP event loop. Past about 1,000 connections it wants ext-uv; open files, ports and Supervisor need raising. Forge configures the proxy for it by default.

Reverb on CloudA cluster you attach

Choose a region and a maximum of concurrent connections, split it across applications, and read connection and message metrics in the dashboard.

SinceGenerally available, 1 December 2025

After a developer preview from 31 October 2025.

Sources: Reverb docs, Running Reverb in production; Cloud WebSockets docs; Monitor 508 (developer preview, 31 October 2025), 501 (GA, 1 December 2025).

Who carries it

Two ways to run Reverb.
One event class.

Laravel's broadcasting is a framework contract, and Reverb is its first-party server. Run it yourself or let Cloud run it: the choice is about who operates the sockets.

Reverb on Laravel Cloud

A managed WebSocket cluster in the same dashboard as the application. Attach it, redeploy, and the server and Vite variables Echo needs are injected.

Who runs the sockets
Laravel Cloud
Choose it when
The app is already on Cloud and you want one bill, one set of permissions and no credentials to copy between services
Watch for
Sized by maximum concurrent connections: 100 to 5,000 in the published table, messages up to 10 kb. Detaching does not stop the cluster's charges.
Your code
ShouldBroadcast events and Echo listeners, unchanged

Source: Cloud WebSockets docs, Plans and Pricing (Laravel Reverb).

In use, in their figures

A flag lit by hand.
A founder's half month.

Each figure is the customer's own, from their published story. Redberry's campaign used Pusher as its broadcaster; the event, the queue and the Echo listener were the framework's, as they would be on Reverb.

Bank of Georgia campaign · Cloud

Redberry

150,000visitors in four hours, with no ramp-up
  • 63,622 submissions, each lighting a pixel on an LED screen in Tbilisi
  • One app cluster, Pro 2 vCPU and 2 GB, scaling to two instances; managed PostgreSQL; one Redis cache
  • Broadcast through Pusher and Laravel Echo
Monitor 1002 · customer story
Gaming platform · Cloud

Gnarlux

Half a monthintegrating Reverb by hand, in the founder's words, before managed Reverb
  • An early access user of managed Reverb on Cloud
  • Three environments: development, beta, production
Monitor 1001 · customer story
Laravel Cloud · changelog

WebSockets

1 Dec 2025generally available, powered by Reverb
  • Developer preview from 31 October 2025
  • API endpoints for WebSocket clusters and applications since January 2026
Monitor 501, 508, 604 · changelog

Keep the contract.
Attach the socket.

Three questions for a team with a live feature: which realtime service do you pay for separately today; how many connections are open at your busiest hour; and would you rather run the socket server, or attach one.