Open a room.
No account. No server. Just realtime.
Any name works: letters, digits, “-” and “_”. The room exists as soon as someone joins.
How it works
- 1
Pick a namespace
Any name is a room. The first peer to connect creates it; when everyone leaves, nothing remains.
const ws = new WebSocket("wss://relay.open-rooms.dev/rooms/babar") - 2
Join as a peer
Every connection gets a human-readable slug. Everyone sees who is here and what they can do.
const room = await openRoom("babar", { slug: "macbook" }) room.peers() // [{ slug: "macbook" }, { slug: "quiet-panda" }] - 3
Message and call
Broadcast or address peers directly, optionally with acknowledged delivery. Peers advertise actions anyone in the room can run.
await room.send({ hello: "world" }, { to: "quiet-panda" }) await room.run("add", "calculator", { a: 20, b: 22 }) // 42
The relay only routes. One Durable Object per namespace tracks who is connected and forwards frames. No message history, no accounts.
Lock it with a passphrase. Keys are derived in the client and payloads are end-to-end encrypted. The passphrase never leaves your device. Private rooms
Add audio and video. Rooms carry WebRTC signaling; media flows peer to peer, with Cloudflare TURN as a fallback. Media
Live demo
A laptop and a browser join a fresh room, exchange an acknowledged message and run an RPC — for real, through the relay.
Starts a fresh room with a laptop that exposes an add action and a browser that messages it and calls it. Then join the same room from your terminal.