Talon Self-hosted E2E messenger 1.0

Talon is an end-to-end encrypted messenger you host yourself. A small Node relay stores and forwards encrypted blobs and never sees message content, contact names, group names, avatars, or any private key; the browser client performs all cryptography locally. Registration is a username and a password, with no phone number, email, or account on any third-party service. The protocol is X3DH for session establishment, the Double Ratchet for messages, and an ML-KEM-768 post-quantum hybrid mixed additively alongside X25519. Plaintext is padded to fixed buckets, and the sender identity travels inside a sealed envelope so nothing the relay writes to disk records who sent what. Features include multi-device with sent messages mirrored across your devices, encryption at rest by default, owner-signed group rosters, attachments and voice notes, WebRTC voice and video, encrypted backups, and push notifications carrying a single opaque tag. The client installs as a PWA and works offline. Requires Node 20+, has three server dependencies and no framework. It generates its own certificate authority on first run and pairs with Tailscale for remote access. The build is reproducible: npm run verify rebuilds from the committed source and confirms it reproduces the shipped bundle byte for byte. It does not hide metadata and is not audited; both are documented explicitly. Most of the code was written with Claude Code (Opus 5), with the design directed and changes reviewed by the author.

Tags messenger chat encryption end-to-end-encryption self-hosted privacy nodejs javascript pwa tailscale websocket zero-knowledge
License MITL
State initial

Recent Releases

1.010 Aug 2026 10:11 major feature: First public release. End-to-end encrypted messaging over a self-hosted relay: X3DH, Double Ratchet, ML-KEM-768 hybrid, sealed sender, padded plaintext. Multi-device with per-device sessions and sent-message mirroring. Encryption at rest on by default. Owner-signed group rosters. Attachments, voice notes, WebRTC calls, encrypted backups, push notifications carrying only an opaque tag. Relay persistence is a snapshot plus an append-only journal. Log output is redacted by default. Reproducible build with a published manifest and Subresource Integrity. 391 tests plus mutation testing on every safety property.