Coming soon

NobleChat

Private messaging over a real mix network. Hybrid post-quantum keys, Sphinx routing, and a server that never sees your messages. We are still testing.

X25519 + ML-KEM-768 Ed25519 + ML-DSA-65 AGPL-3.0
◆ NobleChat

Private messaging over a real mix network

Every message is encrypted in your browser with hybrid post-quantum keys and routed through layered mix nodes. The server never sees content, and it cannot tell a real message from cover traffic.

X25519 + ML-KEM-768 Ed25519 + ML-DSA-65 Sphinx mix routing AGPL-3.0 self hostable
you
encrypts
L1
mix
L2
mix
L3
mix
provider
mailbox
them
decrypts

Constant size packets, Poisson delays, cover traffic. Each node only ever learns its own hop.

What you get

A messenger built so that the operator cannot help an attacker, even if they wanted to.

01 Post-quantum end to end

Hybrid key exchange (X25519 with ML-KEM-768) and hybrid signatures (Ed25519 with ML-DSA-65). Harvest now, decrypt later does not work here.

02 Metadata protection

Not just the content. Layered mix nodes, uniform packet sizes and optional cover traffic hide who talks to whom, and when.

03 Zero-knowledge gateway

The server holds opaque onion packets, a mailbox id, public contact cards, a password hash and a client encrypted contacts blob. Nothing else.

04 Works when you are offline

Messages wait in an encrypted mailbox until your device reconnects. Multi device fan out included, keys never leave the device that made them.

05 Groups, files and calls

1:1 and group chats, encrypted attachments, auto-deleting images, replies, reactions, plus voice and video calls with signalling carried end to end.

06 Install it anywhere

A PWA for desktop, Android and iOS home screens, plus native desktop and Android builds. Or route over the public Nym mixnet instead of the built-in one.

Where this stands today

The cryptographic primitives come from the audited @noble libraries, but the way they are composed here (the Sphinx layer, the packet and mailbox format, the account and multi device model) has not had an independent security audit. This instance is in private testing behind an access password. Please do not rely on it to protect real secrets yet. Found a problem? Report it privately.

How it works

Three things happen before a message ever reaches the network.

Your device makes the keysPost-quantum key pairs are generated locally in your browser on first run and stay there. There is no key escrow and nothing to hand over.
The message is sealed, then wrapped in layersContent is encrypted for the recipient, then packed into a fixed size Sphinx packet with one encryption layer per hop.
The mix network shuffles itEach node peels its own layer, waits a random delay and forwards. Cover traffic looks identical, so timing tells an observer nothing.

There is a longer, animated explainer with no jargon at /info.html.

Run your own

The whole stack is AGPL-3.0 and ships as compose services: gateway, mix nodes, providers and PostgreSQL.

# requires docker and docker compose
git clone https://github.com/OneNobleSoul/noblechat
cd noblechat
cp .env.example .env   # set a strong value for every secret
docker compose up -d --build

The gateway listens on loopback only. Put Caddy or nginx in front of it for TLS. Full notes are in the README.