# smolmail A small decentralised mail protocol with cypherpunk leanings, encrypted end to end. It is simple enough that writing your own client is an afternoon of fun. You get an address, a key and a message. That's all there is to it. There are five operations and no way to add more. Underneath sit four cryptographic primitives that have been around long enough to be boring. Your identity is a single 32-byte key, and that key is the only thing you ever have to back up. Nothing expires, and nobody vouches for anybody: you pin a server's key the first time you connect, and from then on your client only has to check that it still matches. Each message is sealed with a key that exists for that message alone and is discarded straight after, which leaves nothing behind to trace or to forge. Keeping spam out does not require anyone to read your mail. Every mailbox has a limit on how much it will hold, and a stranger needs a token from you before the server will accept their message. The server can turn mail away, but it cannot open it. Your client talks straight to the recipient's server, with nothing in between. Your name is yours on that server because you signed for it with your key, and nobody without that key can claim it. If you ever have to switch keys, your old key signs over to the new one and your name follows. Messages still sent to the old key arrive as before, so contacts can catch up in their own time. ## Send your first message Get started with a @smol.place address. Pin our server's public key before you connect: > `po3cxpzjrt73dypt2rplskbkywizr44afhqthaa5x47mfpe4kesq` Your smol mail client checks it on every connection, so you always know you're talking to us and never an impostor. Not sure what any of this means? No problem! Just visit our [Webmail Client](http://webmail.smol.place) to register your address and start sending encrypted messages. ## Identity The only secret is a 32-byte master. Back that up and nothing else: the Ed25519 signing key, the encryption key derived from it, and the key that issues accept tokens all come out of it. One thing to hold, move between servers, print on paper or scan from a screen. Signatures prove authorship. A throwaway key per message means a stolen identity key cannot decrypt anything already sent. ## Addressing ``` alice@example.org short form, resolved via the server smol://alice@example.org/mfrggzdfmztwq2lknnwg23tpo… self-certifying, carries its own key ``` The short form is typeable. The long form carries the key itself, so an address shared by QR code, contact file or link needs no trust in any server at all. Either way, changing servers never changes an identity. Keys learned from a server are pinned on first use. Later changes need a rotation certificate signed by the previous key, or explicit confirmation. ## Cryptography Ed25519 · X25519 · ChaCha20-Poly1305 · SHA-256. Four established primitives, no novel cryptography, nothing else anywhere in the protocol. Transport is TCP with a Noise handshake. No certificates, no CA, no expiry. ## Specification [SPEC.md](SPEC.md): wire format, operations, trust model and conformance. [WS.md](WS.md): smolmail over WebSocket annex.