Yeetline: chat, mail and search that mind their own business

About Yeetline: chat, mail and search that mind their own business

Chat and search from Yeetline that mind their own business: end-to-end encrypted chat and calls, and a search engine that keeps no record of who asked.

What It Is

Yeetline: chat, mail and search that mind their own business runs Yeetline, a secure chat and video-calling service: end-to-end encrypted rooms, direct messages, files, pictures and calls, in a web app that the Android, iOS and desktop apps host unchanged. One codebase, one set of bugs, and never a "please update the app to read this message".

Yeetline is free at its core — the end-to-end encrypted chat itself is not a paid feature — and it is sold to governments and organizations that need their communication kept private. Each organization gets a dedicated deployment, with its own server and its own accounts, run for it as a service.

What the Server Can Read

Nothing. And we mean that in the boring, provable sense, not the marketing one. Messages are encrypted on the device that sends them and decrypted on the devices that receive them; this server stores and forwards the ciphertext and holds no key that can open any of it. Nobody — not Yeetline, not this deployment's operator, not a moderator or an administrator — can read a message, because no key that opens one ever exists on the server. It could be subpoenaed, stolen, or read aloud at a dinner party, and the most anyone would learn is that somebody sent about 1.3 kilobytes to somebody else on a Tuesday.

Every device runs its own key exchange and ratchet with every device it talks to — X25519 to agree keys, Ed25519 to prove who is who, AES-GCM to seal, HKDF to roll the keys forward — so a message is sealed once per device rather than once per account. Yes, that is more work. Yes, it is worth it. The server's opinion of your messages is the same as /dev/null's: it has none.

What it does see is what any relay must: who is online, who exchanges messages with whom, and how large those messages are. Names, pictures and the words themselves are not among them — a fact you can check against the source rather than take from this page.

The Safety Number, Checked For You

Every pair of people has a safety number: sixty digits derived from both of their identity keys, identical on both sides. Other apps hand you those digits and wish you luck. Open a direct message here and the two apps compare them themselves, inside the encrypted channel, and the seal at the top of the conversation reads No Middleman when they agree — or turns red and says so loudly when they do not.

Being precise about what that buys you, because a green check mark that overpromises is worse than no check mark at all: it proves the key your app is sealing to is the key their app is sealing to. A key swapped after the two of you started talking is caught, and so is a stale key, a reinstalled app or a device made again — which together are the ways a server that turned hostile would try it. What no automatic check can settle, here or anywhere, is somebody who was in the middle from the very first message: they would simply hold one conversation with each of you and pass the digits along. That is why the number is still printed in full, for reading aloud over a call or across a table. The app does the check it can actually do, and tells you the truth about the rest.

And if the number ever changes — a key replaced under a name you have talked to before — nobody has to notice it themselves. Every client is told the moment it happens: the seal at the top of the conversation turns red, gains a ring that pulses, and says so; a notice waits in the bell until it is read; and the safety panel comes up ringed in the same red with the digits and a button to accept the new key, which is the only way the old one is ever replaced. Reinstalling an app does this legitimately, and so does somebody stepping into the middle, and the two look identical from here — which is exactly why you are asked rather than told.

And you are asked properly. Until each side says, in as many words, that it understands what a changed number means, that conversation will not let you write in it: the thread stays there to read, the digits are one press away, and the message box waits. Saying you understand is not the same as accepting the new key — accepting is the considered decision, taken after you have compared the digits, and it is the only thing that ever moves the pin. This is the app declining to let a secret be typed into a conversation that has just told you it might not be the one you thought.

And when the two apps do agree, they say so with some ceremony: a padlock swings shut at the top of the conversation, settles into a quiet pulse beside the words Encryption Enabled, and is a button that takes you to the digits. It is the one moment in a conversation where something was actually checked rather than merely promised, and we think that is worth a small animation.

There is one tier above that, and it costs you a key. Settings will generate you an Ed25519 keypair — the same 32 bytes written down as an ssh-ed25519 line for GitHub and as an OpenPGP block gpg will import — or take the one you already have. Only the seed is kept, sealed with your passphrase inside the keystore this server stores and cannot open, so it follows you to every device. What goes on your profile is the public half and a signature saying this account’s identity key is mine. Everybody else checks that signature themselves. When both people in a conversation have done it, the strip reads Ultimate Encryption Enabled in amber — because a key we have never held, and could not forge, is vouching for who you both are here. That is the one claim an operator gone bad cannot manufacture, and it is the only thing we are willing to spend the word Ultimate on.

It Works With Your YubiKey

Not "supports security keys" in the sense that means we sent the browser a standard request and wished everyone luck. This server knows 14 Yubico models by name, across 83 of the identifiers Yubico has shipped, and says which one you are holding when it asks you to touch it — because the list on this page and the code that reads your key are the same table.

A passkey on an ordinary website replaces a password. Here it does not, and the reason is worth a sentence: your password is not a login secret this server checks, it is the key your messages are encrypted under, and no authenticator can produce it. So the order is your username and password, and then your key — two locks, one after the other, and the second one cannot be phished, reused or read off a screen. Nothing here ever holds a copy of your password: not the server, not the key.

That order is also why this works with whatever you already use. Your account is known before the prompt opens, so the browser is told exactly which credential to ask for — which is what a passkey in Bitwarden, and a YubiKey with no discoverable slots to spare, both need in order to be offered at all. A key that can only ever be a second factor is not a category here: there is one kind of passkey, and every one of them works.

And there is a button that says so. Add a security key sits beside Add a passkey: it tells your browser to open on insert your security key rather than a menu that offers this phone first, and it does not ask your key for one of its two dozen discoverable slots — so a key with none left is added there and works like any other. Both buttons make the same credential; the second one is for when you already know what is in your hand.

The difference between a passkey that lives on one piece of metal and one that syncs through an iCloud or Google account is not something you have to take our word for, or the marketing’s: the authenticator itself reports whether the credential is copyable, in a signed flag, and your key list says which yours is. An operator who needs it can refuse the copyable kind outright, and then every credential on the deployment is a physical object somebody has to steal.

YubiKey 5 Series
USB-A, USB-C, Nano and NFC, including the Enhanced PIN models.
YubiKey 5Ci
Lightning and USB-C on one key, for an iPhone and a laptop.
YubiKey 5 FIPS Series
The FIPS 140-2 validated line: USB, NFC and Lightning.
YubiKey Bio Series
A fingerprint on the key itself — FIDO and Multi-protocol editions.
YubiKey 5 CCN Series
The smart-card line, with NFC.
Security Key by Yubico
The FIDO-only keys, with and without NFC, consumer and Enterprise.

Every other FIDO2 authenticator works too — the standard is the standard, and nothing here is Yubico-only. 19 other makes are recognized by name as well (1Password, Apple, Bitwarden, Dashlane, Feitian, Google, Hypersecu, IDmelon, Keeper, Microsoft, Nitrokey, NordPass, OnlyKey, Proton, Samsung, SoloKeys, Swissbit, Thales and Token2); a key this server cannot name works in exactly the same way and is listed by what it told us it speaks. Being unrecognized is not being unsupported.

Things It Cannot Do, On Purpose

Joining

Anyone can create an account here. No waiting list, no "request access", no form that asks for your job title. You pick a name and a passphrase; the passphrase never leaves your browser, and nobody here can reset it for you. Choose it like you mean it — a sentence you will remember beats a jumble you will not. If you sign in with Google instead, the only thing we take from Google is your email address, and the only thing we do with that is reach you.

Open the app

What changed lately: the changelog.

For the Nerds

Keys
X25519 agreement, Ed25519 identities, AES-GCM sealing, HKDF ratchets. Your passphrase becomes a key with scrypt and never leaves the device.
Wire
One WebSocket, JSON frames, TLS only. The server is a relay with a database, and it likes it that way.
Devices
Each one has its own keys and its own session with everyone else. Losing a phone loses that phone, not the account.
Pages
This one, /status and the legal pages are rendered server-side with no script, so a crawler, a text browser and you all read the same words.

Is It Working?

The status page reports what this deployment is doing right now — and carries an htop that is entirely made up, which it also says, because a real one would be a briefing.

Built to know as little about you as possible.