Open a room.

No account. No server. Just realtime.

Any name works: letters, digits, “-” and “_”. The room exists as soon as someone joins.

wss://relay.open-rooms.dev/rooms/babar
npx open-rooms babar

How it works

  1. 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. 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. 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.

Read the docs →
DemoTwo peers in this tab, talking 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.