Launch
OffCode tor chat
Visit
Example Image

OffCode tor chat

Tor Chat is designed to make secure self-hosting simple

Visit

Setting up your own self-hosted chat server has never been this easy. No port forwarding, no cloud account, and no complicated setup.

OffCode Tor Chat is designed to make secure self-hosting simple.

Messages are encrypted in-browser with WebCrypto AES-256-GCM (PBKDF2-v2, 600k iterations) before reaching the server — ChatServer relays and stores ciphertext only. Password rooms use separate KDF domains so the host cannot derive the key; open rooms are public encrypted channels. Guests connect through any Tor Browser — no app install, no account.

Host with Server Manager on Windows, or headless Docker (ChatServer + Tor HS). Password rooms are server-blind E2EE (the host cannot derive the room key). Open rooms still encrypt in the browser, but the key is derived from the room id: intentional public channels. Hidden rooms stay off the public list and use invite links; add a password for private E2EE. Creators get Settings for close joins, slow mode, lock later, and delete room, plus a Profile recovery code (My rooms for hidden). Required message TTL, E2EE attachments, and optional Full Vanguards complete the stack.

Example Image
Example Image
Example Image
Example Image
Example Image
Example Image
Example Image
Example Image

Features

Tor-only hosting

ChatServer binds 127.0.0.1 only. Tor Expert Bundle publishes a v3 .onion and forwards VirtualPort 80 (and the app port) to localhost; no clearnet chat listener. Optional Docker compose: ChatServer + Tor (no host ports).

  • HiddenServiceVersion 3, ClientOnly 1, SafeLogging 1
  • SOCKS disabled on the HS process (SOCKSPort 0)
  • Open in Tor Browser: http://ADDRESS.onion/
  • Client clearnet banner if the page host is not .onion / localhost

Rooms, invites & TTL

Open, password-protected, and/or hidden rooms with invite links and required per-message lifetime.

  • Hidden rooms: not listed; join via ?invite= (+ password if locked)
  • Message expiry required: 30 min … 1 week (default 8 h). No forever option
  • E2EE attachments (images + small files) on the same SendEncrypted path
  • Profile: hide date/time stamps; pick message time zone (Tor often shows UTC)
  • Unique senderId per room; server binds send identity to the session

Browser encryption (pbkdf2-v2)

WebCrypto PBKDF2-HMAC-SHA256 (600 000 iterations) → AES-256-GCM. Separate v2 KDF domains for join proof vs room key on locked rooms so the server cannot derive the message key from join material.

  • AAD binds roomId|senderId|nonce|clientSentAtUnixMs
  • Locked: password stays in the browser — server-blind E2EE
  • Open: key from torchat-open-material-v2:{roomId} — public by design
  • Server stores join-proof hash as 250000:salt:hash (250k PBKDF2)
  • 1:1 ECDH hybrid + safety number (3×5 decimal) for peer verify / TOFU
  • No Double Ratchet yet; prefer short message retention if passwords may leak

Ciphertext storage

SQLCipher database under LocalAppData (Windows) or Docker volume. DPAPI / env key. Parameterized queries. Plaintext is never written to disk.

  • Rooms + ciphertext envelopes only (encryption_version: pbkdf2-v2 / ecdh-hybrid-v1)
  • Max 500 messages per room (oldest trimmed)
  • Expired rows: secure_delete + WAL checkpoint / VACUUM
  • Replay fingerprints + restart-gap reject via server_meta

Full Vanguards - Guard-Discovery Protection

A standard Tor Hidden Service chooses its entry (guard) nodes randomly on every circuit build. Over time a network-level adversary can watch which relays the server connects to and gradually narrow down the real server IP. This is called a guard-discovery attack and is especially dangerous for long-lived hidden services.

Use Cases

Self-host your own chat server & Best privacy

Comments

Premium Products
Social Links

Comments

Premium Products