A small, decentralised mail system where every message is encrypted end to end. It's simple enough that you can write your own client in an afternoon.
Open webmail · Read the specification
| PGP email | smolmail | ||
|---|---|---|---|
| Server reads mail | Yes | No | No |
| Server sees sender | Yes | Yes | No |
| Spam filter reads mail | Yes | Partly | No |
| Relayed by other servers | Yes | Yes | No |
| Needs the internet | Yes | Yes | No* |
* Only when the server is also reachable over Reticulum. See "Beyond the internet" below.
Go to webmail.smol.place to register a @smol.place address and start sending encrypted mail. Nothing to install. It runs gsmol, which does all its encryption in your browser.
Download Carrier, a smolmail client for your computer:
Connect to smol.place and confirm this server key before you connect:
po3cxpzjrt73dypt2rplskbkywizr44afhqthaa5x47mfpe4kesq
Your client checks the key every time it connects, so it always knows it's talking to us and not an impostor.
The whole protocol is five operations and four well-known cryptographic building blocks, with no extensions and nothing to negotiate. SPEC.md has everything you need.
Your identity is a single 32-byte secret called the master. Your signing key, your encryption key and the key that lets people write to you all come from it. Back up the master and nothing else. You can print it on paper or scan it from a screen. (SPEC §2)
alice@smol.place short form, looked up on the server smol://alice@smol.place/mfrggzdfmztwq2lknnwg23tpo… full form, carries alice's key
The short form is easy to type. The full form contains the key itself, so a contact you add from a link or QR code doesn't depend on any server telling the truth. To check a contact in person or on the phone, compare fingerprints: the first 20 characters of the key, read in groups of four. (SPEC §3)
Each message is locked with a key made for that message alone, then thrown away. The envelope names the recipient but not the sender, so the server can't see who writes to whom. Inside, the message is signed, so the recipient knows who wrote it and that nobody changed it. (SPEC §5)
Servers can't read your mail, so they can't filter spam by content. Instead, you give each person you correspond with an accept token. Mail that carries a token goes to your main mailbox. Mail without one goes to a small requests area that holds less and clears out sooner. Anyone can still write to you, but nobody can fill your mailbox. Your client decides what to do with each message after opening it. (SPEC §5.8)
If you need a new key, your old key and your new key both sign a handover, and your address moves to the new key. Mail sent to your old key still arrives, so your contacts can catch up in their own time. Clients show you when a contact's key changes. (SPEC §7)
The server learns which mailbox each message is for, its size, when it arrived and was collected, and the IP address you connect from. It doesn't learn the sender, the subject, the content or which messages belong together.
Some things smolmail doesn't protect:
Messages don't stay on the server forever. Mail in your main mailbox is kept for 30 days and mail in requests for 7 days, unless you delete it sooner. (SPEC §9, §10)
Servers never talk to each other. Each one is an independent mailbox store, so running one is a small job. Anyone with a smolmail address can write to anyone on any other server.
bunshin is a smolmail server written in Rust. To start one with Podman or Docker, run:
podman run -d --name bunshin \ -p 1961:1961 \ -v bunshin-data:/data \ code.randogoth.com/randogoth/bunshin
On first start, bunshin creates a server key. Run podman logs bunshin to see its public key, then publish it somewhere your users trust, so their clients can pin it. Restarts and upgrades keep the same key. The bunshin page also covers NixOS, hosting several domains on one server, and Reticulum.
The reference client and server are written in Python, for both TCP and Reticulum. gsmol is a webmail client you can host yourself. It runs entirely in the browser and reaches mail servers through a small WebSocket bridge.
The specification is licensed under CC BY-SA 4.0.