Skip to content

What is Ricochet?

Peer-to-peer messaging has a basic problem: the peer you are writing to is often offline. Ricochet solves it the way email did. Each peer names the store-and-forward servers it trusts, with priorities like MX records. A sender hands a message to one of those servers, and the server holds it until the recipient comes online to collect it.

Ricochet servers are ordinary libp2p peers. They run over UDX, Noise and Yamux, find each other through GossipSub announcements, and relay for clients behind NAT.

The server is split into agents, named after their email counterparts.

Agent Protocol Role
MSA, mail submission /sf-network/submit/1.0.0 Accepts messages from senders
MTA, mail transfer internal Routes and validates them
MDA, mail delivery internal Stores them and pushes notifications
MAA, mail access /sf-network/access/1.0.0 Retrieval, IMAP-style flags, expunge
MMA, mailbox management /sf-network/admin/1.0.0 Mailbox lifecycle, ACLs, capacity
SDA / SFA / SCA /ricochet/store/{doc,feed,collection}/1.0.0 Documents, append-only feeds and keyed collections

Every connection is authenticated with Noise, and every access check uses the peer identity the connection proved, never an identity the request claims. Message payloads can be end-to-end encrypted with NaCl box, using keys derived from the peers’ Ed25519 identities, so the server stores ciphertext it cannot open. The envelope (sender, recipient, folder, timestamps) stays visible to the server. The scheme has no forward secrecy by design. Applications that need it run a ratchet such as Signal on top.