Open Source

Real-time WebSockets.
Self-hosted.
Free forever.

Replace Pusher and Ably with a single binary you control. Drop-in Pusher protocol compatibility. Works with Laravel, Node, Rails, and Django out of the box.

MIT Licensed · Pusher Compatible · Single Binary
terminal
$ docker run -d -p 6001:6001 \
    -e RELAY_APP_KEY=my-key \
    -e RELAY_APP_SECRET=my-secret \
    relayhq/relay:latest

Server starting on 0.0.0.0:6001
App registered: my-key
Dashboard: http://localhost:6001/dashboard
WebSocket ready — accepting connections

Features

Everything real-time needs. Nothing else.

A single binary that handles WebSocket connections, channel management, presence tracking, and authentication.

Self-Hosted

Runs on your own infrastructure. Full control over data, latency, and uptime. No third-party dependencies.

Framework Agnostic

Official SDKs for Laravel, Node.js, Rails, and Django. Works with any language that can make HTTP requests.

Pusher Compatible

Drop-in replacement. Existing Pusher apps switch with one config change. Same protocol, same client libraries.

Single Binary

One file. No runtime, no JVM, no Node. Download and run, or use Docker. Production-ready in seconds.

Open Source

MIT licensed. Read every line of code. Contribute, fork, extend. No vendor lock-in, ever.

Free Forever

No per-message pricing. No connection limits. No surprise bills. Unlimited everything, forever.

Getting started

Three steps to real-time

From zero to production-ready WebSockets in under five minutes.

1

Run the server

A single Docker command. That's it.

$ docker run -d -p 6001:6001 relayhq/relay:latest
2

Connect from JavaScript

Subscribe to channels and bind event handlers.

const relay = new Relay('my-key', { host: 'localhost' }) const channel = relay.subscribe('chat') channel.bind('message', (data) => console.log(data))
3

Publish from your backend

One HTTP call from any framework.

broadcast(new MessageSent($message));
await relay.publish('chat', 'message', { text: 'Hello' })
relay.publish('chat', 'message', {'text': 'Hello'})
client.publish('chat', 'message', { text: 'Hello' })

Integrations

Works with your stack

Official SDKs for every major framework.

Laravel
Node.js
Rails
Django
JavaScript

Comparison

Why developers choose Relay

See how Relay compares to hosted real-time services.

Feature Relay Pusher Ably
Self-hosted
Open source MIT
Free connections Unlimited 100 1,000
Messages/day free Unlimited 200k 6M
Channel history ✓ Free Paid Paid
Webhooks ✓ Free Paid Paid
Multi-app ✓ Free Paid Paid
Laravel SDK ✓ Official Community
Rails SDK ✓ Official Community
Starting price $0 $49/mo $29/mo