Skip to content

Security & encryption

Consortium is built so that the server syncs ciphertext, not your code. This page states precisely what that means — including the limits.

For your own (single-user) data, only your devices hold the keys. The server stores and relays ciphertext for:

  • Session messages, session metadata, and agent state
  • Machine metadata and daemon state
  • Artifacts (headers and bodies) and attachments
  • Key-value store values
  • Drive file contents and file names (per-node encrypted metadata)

Encryption uses libsodium/TweetNaCl primitives: XSalsa20-Poly1305 (legacy envelope) and AES-256-GCM with a per-session data-encryption key (DEK), wrapped per recipient. Sessions support DEK rotation: rotating a key bumps its version so previously distributed ciphertext can no longer be decrypted by revoked parties.

Being honest about the boundary matters more than a long feature list:

  • Structural plaintext: IDs, sequence numbers, timestamps, session tags, and versions (needed for sync and ordering).
  • Names of containers: organization, Drive, and workspace names are plaintext today (contents are encrypted).
  • Shared/team data is encrypted and access-controlled by Consortium. Sharing inside organizations is enforced by server-side permissions (roles, members, wrapped keys distributed by the server) — not yet by cryptography alone. Treat team sharing as “the server is trusted to route keys correctly,” which is a different guarantee than single-user E2EE.
  • Third-party service tokens you connect for server-side use (e.g. GitHub) are encrypted at rest but are usable by the server on your behalf — that’s their purpose.
  • Your identity is a 32-byte master seed, exportable as a 24-word recovery phrase. Keep it safe; it is the root of your encryption.
  • There are no passwords. Devices authenticate by public-key challenge/response and hold per-device, revocable tokens (90-day lifetime).
  • On web and desktop, the seed at rest can be protected with a passkey (WebAuthn PRF) unlock.
  • Provider keys for BYOK stay in your devices’ secure storage unless you explicitly opt a credential into server escrow.
  • The web app’s trust model is weaker than native. The browser runs code served by the same operator that stores your ciphertext; a malicious server could serve altered code. Native/desktop builds don’t have this property. Use the desktop or mobile apps when this matters to you.
  • 2FA (TOTP) is available at sign-in; admin surfaces require it.
  • OAuth refresh tokens rotate on every use, and reuse revokes the grant.
  • Emergency version blocking lets known-bad client builds be forced to update.

For the precise wire formats and field-by-field encryption tables, the engineering source of truth is docs/encryption.md in the repository.