Open source · no accounts

Meetings that
start with a link.

Meet is a browser video-room app. Create a room, send the link, and talk with your camera and microphone. Audio and video travel peer to peer — the server only introduces people to each other.

0 installs · 0 accounts · 1 link

A Meet room with two participants, host controls and the chat panel open

a live room — two people, host controls, chat

01 — What's inside

Everything a small meeting needs, nothing it doesn't.

Built as one HTML file and one Worker. No framework, no bundler, no database to run.

01

One-tap rooms

A random code like kdp-xm4q-9ztb appears instantly. The link is the invitation — paste it in any chat.

02

Mic, camera, screen

Mute, turn the camera off, share your screen. Every change applies to the live call without dropping it.

03

Front / back camera

On a phone, switch cameras mid-call. The outgoing video track is swapped in place, so the other side sees no reconnection.

replaceTrack · no renegotiation
04

Chat with typing

Messages and a live "Rahul is typing…" indicator, relayed through the room. Unread counts wait for you in the corner.

05

Host controls

Whoever creates a meeting runs it: remove someone, force their camera or mic on, or end the meeting for everyone.

SHA-256 host key
06

Your meetings list

The home screen shows the rooms you created or joined that are still alive, with a live headcount and one click to rejoin.

02 — Architecture

Signalling in the cloud, media straight between people.

One Durable Object per room handles the handshake and remembers who hosts it. Once two browsers know about each other, they talk directly.

Browser A
WebRTC peer
camera · mic · chat
Cloudflare
Room Durable Object
offer · answer · ICE · host key
Browser B
WebRTC peer
camera · mic · chat
audio + video, peer to peer — never touches the server

Host identity without accounts

Creating a room generates a random host key in the browser. Only its SHA-256 hash is stored, inside that room's Durable Object.

  • Come back any time — the same browser presents the key and is recognised as host, even after leaving.
  • Guests can't fake it — the server never holds the key itself, only its hash.
  • Honest trade-off — the role follows the browser. Clear site data and it's gone.

When everyone leaves

Room metadata lives in durable storage, so an empty room doesn't vanish.

  • Idle, not dead — it shows on your dashboard and reopens when you do.
  • Ended means ended — once the host ends a meeting the link stops working for good.
  • Empty rooms still accept guests — they wait for the host, and only the host key holder gets host powers.
03 — Tested

79 automated checks, no mocking of the hard parts.

The room object is driven directly, and the browser suites click through the real interface in two isolated Chromium profiles.

32
Room logic
Host recognition, hashing, kick, force, end, chat relay, status, late joins.
34
End to end
Two browsers through a full meeting: create, join, chat, kick, leave, rejoin, end.
13
Camera switch
Track swap, stable signalling, mirroring, mute state across a flip.
0
Databases
One Worker, one Durable Object class, durable storage for room state.
04 — Run it

Clone it, run it, deploy your own.

Node 18 or newer. Locally, two browser windows are enough to see a call between two people.

Local developmentbash
# install and start
npm install
npm run dev

# open two browsers at
http://localhost:8099
Deploy your ownbash
# one Worker + one Durable Object
npm install -g wrangler
wrangler login
npm run deploy

# → https://meet.<you>.workers.dev

Mesh, not an SFU

Comfortable to about 4–6 people. Everyone sends to everyone, so a bigger room costs more bandwidth per person.

NAT traversal

STUN plus a public TURN relay covers most networks. A strict corporate firewall may still refuse — bring your own TURN credentials for anything serious.