This password locks your keys on this device only. It is never sent
anywhere — there is no account and no password reset. If you forget
it, the 12 recovery words on the next screen are the only way back in.
✓ Two keys were just created in your browser. Nothing was sent to any server.
Your 12 recovery words
These words are your identity. Anyone who has them can be you.
If you lose them and this device, the identity is gone — nobody can reset it,
because nobody else has it. Message history never leaves your devices either way,
so it can't be recovered from the relay. Write the words on paper, not in a screenshot.
or
Totally fine — that's a feature, not a failure. Treat this identity like a
burner: use it, then delete it (Menu → Delete identity), or just clear
this site's data. Next visit, create a fresh one in seconds — new address, clean slate.
Contacts from this session won't be able to reach the new you.
You're ready
This is your address — a fingerprint of your public key.
A number, not a name. There's no phone number or email anywhere in this system.
Someone points their camera at this and they can message you. That's the whole sign-up.
Import Identity
Restore from an exported .json bundle. Provide the password
you used when the identity was created.
Enter your 12 seed words separated by spaces, plus your passphrase if you set one (13th word). Set a new App Password to protect the restored identity on this device.
Tap + Add — show someone your QR code, or trade a 6-letter share code.
Select a conversation
or tap + Add to connect with someone.
Add Contact
Have them scan you
They point their camera app at this — it opens B.E.Chat with your key filled in.
Why scanning in person is the gold standard
A QR scanned face-to-face hands over your public key with no
middleman who could swap it for theirs. Keys here are trusted on first use, so the
moment of exchange is what matters. (Public keys are safe to show anyone — they
can't be used to read anything.)
or add them
Scan their QR with your camera app, or paste their key below.
Name
Their key
Not in the same room?
Get a 6-letter code and tell them — out loud, over a call, however. They type it in and you're connected.
What the relay sees (and why 10 minutes)
The relay never sees the code itself — only its SHA-256 hash,
mapped to your public key for 10 minutes. Anyone who learns the code in that window
could add themselves as you, so say it directly to the person rather than posting it
somewhere public. After 10 minutes it's useless.
or enter theirs
Name
Their code
Your Identity
Your QR
Friends scan this with their camera to add you.
Your address
A SHA-256 fingerprint of your public key — this number is all the relay ever knows about you.
Show the full key string
Two P-256 public keys (encryption : signing). Safe to share with anyone — this is what the QR encodes.
This identity predates recovery phrases, so it has no 12 words — your backup is the
JSON export below. To get a recovery phrase, create a new identity (it will have a new address).
Settings
On this device
Identity keys (encrypted with your App Password)
Messages & contacts
Total site storage
Messages are stored readable in this browser's database — the password
locks your keys, not your history. Anyone with full access to this browser profile can
read it. The relay holds only sealed envelopes, for at most 24 hours.
Install
Installed, B.E.Chat works offline and your data is less likely to be evicted by the browser.
Relay URL
The demo relay works out of the box. Run your own with one command — see the GitHub README.
Sync interval (seconds)
Danger Zone
What's on your device
Exactly two things. ① Your identity vault: both private keys and your
recovery words, sealed with AES-256-GCM under a key derived from your App Password
(PBKDF2, 600,000 rounds) and kept in this browser's localStorage.
② Your message database: conversations, contacts, and groups, stored
readable in this browser's IndexedDB — the password protects your keys,
not your history. That's the complete list. Nothing about you exists anywhere else.
What the relay sees
The relay is a dumb, blind mailbox. It stores sealed envelopes for at most 24 hours,
has no user accounts, and rate-limits per IP. Anyone can run one — it's ~200 lines of
open-source code.
Field
Relay receives
What it learns
Message
Padded ciphertext
nothing
Sender
Key hash (SHA-256)
a number, not a name
Recipient
Key hash (SHA-256)
a number, not a name
Timing & size
Timestamps; length padded to 256-byte blocks
approximate traffic patterns
Password
Never sent
nothing
Private keys
Never sent
nothing
Contacts
Never sent
nothing
Show me the actual bytes — the last thing this app sent
Nothing sent yet this session. Send a message, then look again.
If you lose your keys
Your 12 recovery words recreate your exact keys on any device — same
address, so contacts can still reach you (ID → Recovery words to view them
again). Message history does not come back: it only ever existed on your devices,
which is the point — there is no server copy of it for anyone to recover, including you.
No words and no backup file means the identity is gone permanently. Nobody can reset it,
because nobody else has it.
Burner mode
Don't want permanence? Skip the backup. Use an identity for a session, then
Menu → Delete this identity. Fresh keys take five seconds and cost
nothing — new address, clean slate. Contacts from the old session can't reach the new
you. Disposable identities are a feature here, not an accident.
How the encryption works
Each message gets a fresh ephemeral ECDH P-256 key, run through
HKDF into a one-time AES-256-GCM key, and is signed with
your long-term ECDSA key — all with the browser's native Web Crypto API, zero libraries.
Payloads are padded to 256-byte blocks so length reveals nothing. Replay attacks are
rejected with a counter sealed inside the ciphertext.
Groups
Groups use a shared AES-256-GCM key distributed over the existing encrypted 1:1
channels. The relay sees the group as one anonymous address — it doesn't even know it's
serving a group. Add or remove a member and the key rotates: removed members can't read
anything sent after they left.
Auto-delete
In any conversation, tap Auto-delete to expire messages from
your device (1h–7d). The other side keeps their copy until they set their own
timer. The relay independently deletes all envelopes after 24 hours.
Honest limitations
Keys are trusted on first use. There are no safety numbers yet. For high-stakes contacts, exchange QR codes in person, or compare your identicons over a channel you trust.
Forward secrecy is sender-side only. If your long-term key leaks, messages previously sent to you that an attacker recorded could be decrypted. (Sent messages stay safe — their ephemeral keys are gone.)
Local history is readable on your device. Use your OS's disk encryption and screen lock; the App Password protects keys, not the message database.
Relays see metadata. Timing, padded sizes, and IPs. The demo relay is shared; run your own to control it.
iOS can evict browser data after ~7 days of disuse. Install to your Home Screen and write down your 12 words.
Add to your Home Screen
Tap the Share button in Safari's toolbar (the square with the arrow pointing up)
Scroll down and tap Add to Home Screen
Tap Add — B.E.Chat opens full-screen like a native app
Installing also tells iOS to keep this site's data, so your messages and keys aren't evicted if you don't open the app for a while.
Security Warning — Key Export
This file contains your encrypted private key — the master credential for your identity on this network.
Anyone who obtains this file and knows your App Password can impersonate you and decrypt all messages you have not yet received.
Do not send this file over email, iMessage, AirDrop, Slack, or any channel you do not fully control. Assume any cloud storage (iCloud, Dropbox, Google Drive) may retain copies even after deletion.
After importing on your new device, delete this file using secure erase — not just Trash. On macOS: Finder → right-click → Move to Trash is not sufficient; use rm -P in Terminal or a secure-delete utility.
If you lose track of this file, change your App Password immediately by creating a new identity and notifying your contacts.
Your Seed Phrase
These 12 words can recreate your exact keypair on any device — without a JSON file or your App Password.
Anyone with these words (and your passphrase, if set) can impersonate you and read your future messages.
Write them on paper only. Do not screenshot, type in any other app, or store them digitally.
If you set a passphrase (13th word) when restoring, it is required alongside these words.
If you used a passphrase (13th word) when creating this identity, you will need it along with these 12 words to restore access.
Create Group
Group Name
Invite Contacts
Group Members
Add Member
Auto-delete messages
Messages in this conversation are deleted from your device after the selected time. The other person keeps their copy until they set their own timer — tell them your setting so both sides match.