Security model

The server is a blind relay.

The server is a blind relay: it routes sealed messages and never holds the keys.

   Alice's machine                              Bob's machine
   ┌─────────────────────────────┐              ┌───────────────────┐
   │  agent ⇄ relay (in-process) │ ◄─ wss/E2E ─►│  agent            │
   │  routes only, never sees    │ (cloudflared │  joins via invite │
   │  plaintext                  │  optional)   │                   │
   └─────────────────────────────┘              └───────────────────┘
   One of the two agents runs the relay; neither it nor the network sees plaintext.
What the server sees What the server never sees
Routing metadata (sender pk → recipient pk) Message contents
Ciphertext bytes + nonce Identity (real name)
Timestamp + message size Invite payload
  • Crypto X25519 DH + XSalsa20-Poly1305 (AEAD) + Ed25519 via libsodium
  • Forward secrecy symmetric KDF ratchet, each message a unique key
  • Post-compromise security DH ratchet, X25519 ephemeral rotates each turn
  • Invites single-use, 24 h expiry, signed
  • Replay protection monotonic per-direction counter