Private Chat Rooms
Every Word is a Key
A shared word is your key. Choose a word together, then enter it independently. The same word opens the same private encrypted room.
Join from your browserAny device — phone, tablet, or desktop.
Ten words, ten rooms
Every room began as one ordinary word. Borrow one of these — or invent your own.
- treehouse
the best-friends corner
- harbor
a hideout for love without a label
- embargo
your news, before it's public
- ticker
stock talk between trusted friends
- stork
the good news family hears first
- campfire
the friend group, gathered from anywhere
- greenroom
your team, before the launch
- nightowl
the 2 a.m. conversations
- roadtrip
the trip, planned together
- bookshelf
a tiny book club
Borrow a word to look around — for a room of your own, bend it until only your people would guess it.
How it works
Choose a name
Your identity is a key created on your device. No email, no phone number.
Enter a word
Everyone with the same word lands in the same room. For private rooms, share an unguessable word.
Talk
Messages are sealed end-to-end and travel directly between members when possible, and sealed through the site's mailbox when they can't.
Security in plain terms
Protected
- Message content — encrypted on your device, a key per message
- Room keys — sealed individually for each member
- Your identity — a key pair that exists only on your device
Honest limits
- A compromised device reads what's on its screen
- Guessable words aren't safe for private rooms
- No global traffic-analysis resistance; keys live in browser storage — mind shared machines
FAQ
Do I need an account?
No. Choose a name and enter a room word. Your device creates a local identity key the first time you join.
How do rooms work?
Everyone typing the exact same word meets in the same room. For private conversations, share an unguessable word — only people who know it can find you.
Where do my messages live?
In your browser session, encrypted — close the tab and the transcript is gone. The site never sees or stores a single word.
Someone was offline. Is my message lost?
No — it waits, sealed, in the site's fallback mailbox and arrives when they're back, usually within a minute or two.
Does it work on phones?
Yes — open /join in any browser, nothing to install.
The encryption, technically
The primitives. Everything is one AEAD cipher — XChaCha20-Poly1305 — with keys derived through HKDF-SHA256, identities as Ed25519 keypairs, and the word stretched through Argon2id at 64 MiB / t=3 / 1 thread. Every sealed frame carries AAD binding its context (kind, room, epoch, sender, seq), so a ciphertext can't be replayed into another room, generation, or slot — the tag fails.
The key stack, bottom to top. (1) The word is
stretched with Argon2id into an "effective GK" (the GK is the public
per-release universe key — it opens no room by itself); the room id is
just SHA256("OH1-room-v1|" + egk) truncated to 16 bytes —
the word itself never crosses the network, and the hash is one-way.
(2) The room key is 32 random bytes minted by the founder; it's the
actual chat key. (3) Every single message gets its own key:
HKDF(roomKey, room+epoch, kind+sender+seq) plus a random
nonce — so no message reuses a keystream, and compromising one
ciphertext teaches nothing about the next. (4) Your Ed25519 identity
signs every envelope; peer id = hash of the public key, so nobody can
claim an id they can't sign for.
How deep the nesting goes. Keys are sealed under keys, always forward: the room key is delivered to new members sealed under the GK channel, whose keystream itself is bound to (room, epoch, recipient) — a capture of that envelope only works for that one recipient in that one generation. Rotation mints a fresh 256-bit key sealed under the current one, so only current members transition and evicted members hold a dead key forever; epoch counters forbid key regressions. Warp goes one level deeper still — it re-keys the entire universe, so today's key unlocks nothing from any previous universe. So the deepest an attacker can reach by unwinding is: compromise one member device → read that room until the next rotation — that's the floor, and it's also the eviction lever (word = admission, rotation = eviction).