๐Ÿ”’ sueta

a complete, working stack for serverless p2p end-to-end-encrypted web apps โ€” this page is also the git repo.

try the live chat clone the repo

Clone

This site serves the repository over git's dumb-HTTP protocol as plain static files (it's hosted on IPFS โ€” there is no git server here, or any server at all):

git clone https://git-chat.ardegazu.ro/sueta.git
cd sueta

What you get

client/src/lib/ โ€” the p2p core

Reusable, app-agnostic TypeScript: WebRTC full-mesh with perfect negotiation, E2E crypto (HKDF + AES-GCM, structurally nonce-safe), blind signaling client, TURN credentials, persistent Ed25519 identities with emoji fingerprints.

server/ โ€” one Go binary

Blind WebSocket relay (routes only ciphertext), coturn REST credential minter, built-in Let's Encrypt. No database, no state, no logs of content.

client/src/app/ โ€” the chat

Installable PWA: rooms as capability links, threads, reactions, EXIF-stripped image sharing, peer-to-peer history sync + on-device persistence, numbered releases with an in-app update banner.

docs/ โ€” the contracts

PROTOCOL.md โ€” crypto & wire spec. SIGNAL-SERVER.md โ€” ops runbook and how to attach new apps/domains to one relay.

How it works (the short version)

Run it yourself

# dev: relay + app
cd server && go run . --dev          # :8080
cd client && npm install && npm run dev   # :5173, proxies /ws to :8080

# tests (real Chromium โ€” WebRTC needs real UDP)
cd server && go test ./...
cd client && node e2e/mesh.e2e.mjs

To deploy your own: any Debian box runs coturn + the Go relay (deploy/ has the config, systemd unit and a one-command deploy script); host the client build anywhere static โ€” IPFS, a CDN, a folder behind nginx. Full steps in docs/SIGNAL-SERVER.md.

Build your own p2p app on this

The chat is just one consumer of the core. A new app is ~40 lines of bootstrap:

The recipe with code is in client/src/lib/README.md. Shared whiteboards, turn-based games, collaborative editors, file drops โ€” anything that fits "small group, real-time, private" fits this stack.

Guarantees & limits, honestly