nexnet

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

nexnet@protocol:~/stack utf-8
        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

curl -s nexnet.tsc.hk utf-8

$ cat /etc/hosts | grep nexnet


Workers on Cloudflare. Presence · relay · discovery. Private chat stays on devices.

exit code 0

nexnet@invite:~ utf-8

$

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

github.com/tschk/nexnet