$
Wallet-rooted usernames. Passkey on open. Device certs until process death.
01 open source · p2p · e2ee
Blockchain-backed usernames. Local-first private history. Public rooms. Privacy-routed discovery. No telemetry. ISC license.
02 / features
$
Wallet-rooted usernames. Passkey on open. Device certs until process death.
$
Double Ratchet + X3DH. Forward secrecy. Relays never hold private bodies.
$
MLS (RFC 9420) for private groups. Epoch rotation on membership change.
$
Public ownerless chatrooms. Signed plaintext. Cooldown + votekick.
$
WebRTC direct when possible. Relay for signalling and fallback only.
$
History on your devices. Sender-held offline. No central message store.
03 / stack
primitives
signatures Ed25519
key agreement X25519
aead XChaCha20-Poly1305
hash BLAKE3-256 (derive_key)
dm Double Ratchet + X3DH
groups MLS / ts-mls (RFC 9420)
wire CBOR CDE
runtime
client/tui TypeScript · Bun
relay/presence Cloudflare Workers
transport WebRTC (werift / browser)
chain app inauguration .in
non-negotiables
· relays never store private message bodies
· chain holds scarce public state only
· messages immutable (no edit / unsend)
· delivered receipts only — no read receipts
· no invented cryptography
04 / status
$ cat /etc/hosts | grep nexnet
Workers on Cloudflare. Presence · relay · discovery. Private chat stays on devices.
exit code 0
$
Clone the monorepo. Run the TUI. Point clients at the live workers — or host your own relay.
git clone https://github.com/tschk/nexnet
cd nexnet && bun install
bun test