Every Circlo conversation is end-to-end encrypted following the design pioneered by the Signal protocol: X3DH key agreement to start a session, then a ratcheting session that advances as you talk. This is how the app works. There is no switch that turns it off, and a payload that is not encrypted is rejected by our servers.
How a message travels
- 1The first time you open Circlo on a device, it creates a long-term identity key pair locally. Only the public half is uploaded; the private half stays encrypted on that device.
- 2When you message someone, your device fetches their published prekeys and performs an X3DH key agreement, establishing a separate session for each of their approved devices.
- 3Your message is encrypted with a key derived for that message from the session chain before it leaves the device. Our servers receive ciphertext, and store ciphertext.
- 4The recipient's device derives the matching key and decrypts locally. Keys are never transmitted to us in a usable form.
Group conversations
Group messages use a sender key that is distributed to each member's approved devices separately, and rotated when membership changes. Someone who joins later cannot read what was said before they arrived, and someone who leaves or is removed cannot read what is said afterwards.
Your devices and your keys
A browser or phone becomes trusted only when a device you already trust approves it, by proving possession of its private key. To link a device, scan its short-lived, single-use QR code on a trusted device and compare the new device's key fingerprint before approval. The QR expires after three minutes and never contains private keys. Revoking a device removes its trust immediately, so it stops receiving keys. We hold an encrypted backup of your device key, so a returning browser can be restored — but the 32-byte secret that unlocks that backup is generated on your device and is never sent to us, which is why the backup is unreadable without it, including to us.
No one — not our engineers, not an administrator, not anyone with a court order — can read your encrypted conversations, because the keys needed to do so are never on our servers. The same fact has a hard edge: if you lose every trusted device and your recovery material, your earlier history cannot be recovered. We would rather say that plainly than offer a backdoor.
What encryption does not cover
- Your profile: display name, username, bio, avatar and links, which other people must be able to see.
- Group and community structure: names, avatars, membership, roles and admin settings.
- Status updates, which are stored in a readable form so they can be shown to your chosen audience and reviewed if reported.
- Conversation metadata: who is talking to whom, when, how often, and how large the messages are.
- Security and account data: sign-in history, device and browser labels, and approximate country.
- Anything you deliberately send to us, such as a report, a support message or a verification request.
Because we hold only ciphertext, we cannot build a searchable index of your conversations across the service, and notifications cannot show what a message said. A push notification tells you that a message arrived, not what it contains.
Verification. Our encryption design is documented in full, and the client is written so its cryptographic layer can be reviewed and replaced on its own. We have not yet published an independent third-party audit of that layer, and this page will say so plainly when we do.