🔒 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 browse the code clone the repo

Clone

This site serves the repository over git's dumb-HTTP protocol as plain static files (plain files — there is no git server here, or any server at all):

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

What you get

client/src/lib/ — the p2p core

Reusable, app-agnostic TypeScript on libp2p: browser⇄browser WebRTC with a circuit-relay bootstrap, an end-to-end-encrypted replicated log (OrbitDB) with a deterministic per-room address, E2E crypto (HKDF + AES-GCM, structurally nonce-safe), persistent Ed25519 identities signing every log entry.

deploy/relay/ — ~100 lines of relay

A libp2p circuit relay + gossipsub peer discovery over websockets. It carries encrypted handshakes only — room traffic flows member⇄member and never touches it. Dev server and self-host example in one file.

client/src/app/ — the chat

Installable PWA: rooms as capability links, threads, reactions (removals replicate too), EXIF-stripped image sharing over encrypted bitswap blocks, p2p audio/video room calls (DTLS-SRTP), offline-capable replicated history, local notifications, numbered releases with an in-app update banner.

docs/ — the contracts

PROTOCOL.md — crypto & protocol spec (v2). RELAY.md — the relay: dev usage and self-hosting.

How it works (the short version)

Run it yourself

# dev: relay + app
cd deploy/relay && npm install && npm run dev   # :9090, deterministic dev PeerId
cd client && npm install && npm run dev         # :5173

# tests (real Chromium — WebRTC needs real UDP; each spawns its own relay)
cd client && node e2e/mesh.e2e.mjs

To self-host the network side: run deploy/relay/ (a ~100-line Node script) behind any TLS proxy, plus coturn for TURN, and point the client build at them with VITE_RELAY_MULTIADDR / VITE_TURN_CREDS_URL. Any willing libp2p circuit relay works — it holds no state and learns nothing. Host the client build anywhere static — IPFS, a CDN, a folder behind nginx. Full steps in docs/RELAY.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

🔒 sueta

un stack complet, funcțional, pentru aplicații web p2p criptate cap-la-cap, fără servere — pagina asta e și repo-ul git.

încearcă chatul live răsfoiește codul clonează repo-ul

Clonare

Situl servește repository-ul prin protocolul dumb-HTTP al lui git, ca simple fișiere statice (chiar simple fișiere — nu există aici niciun server git, de fapt niciun server):

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

Ce primești

client/src/lib/ — nucleul p2p

TypeScript reutilizabil, agnostic de aplicație, pe libp2p: WebRTC browser⇄browser cu bootstrap prin circuit relay, un log replicat criptat cap-la-cap (OrbitDB) cu adresă deterministă per cameră, criptografie E2E (HKDF + AES-GCM, structural sigură la nonce-uri), identități Ed25519 persistente care semnează fiecare intrare din log.

deploy/relay/ — ~100 de linii de releu

Un circuit relay libp2p + descoperire de peers prin gossipsub, peste websockets. Poartă doar handshake-uri criptate — traficul camerei curge membru⇄membru și nu-l atinge niciodată. Server de dev și exemplu de self-hosting într-un singur fișier.

client/src/app/ — chatul

PWA instalabil: camere ca linkuri-capabilitate, fire de discuție, reacții (și ștergerile se replică), poze cu EXIF-ul scos, partajate ca blocuri bitswap criptate, apeluri audio/video p2p în cameră (DTLS-SRTP), istoric replicat care merge offline, notificări locale, versiuni numerotate cu banner de actualizare în aplicație.

docs/ — contractele

PROTOCOL.md — specificația cripto și de protocol (v2). RELAY.md — releul: folosire în dev și self-hosting.

Cum funcționează (versiunea scurtă)

Rulează-l singur

# dev: releu + aplicație
cd deploy/relay && npm install && npm run dev   # :9090, PeerId de dev determinist
cd client && npm install && npm run dev         # :5173

# teste (Chromium adevărat — WebRTC are nevoie de UDP adevărat; fiecare își pornește propriul releu)
cd client && node e2e/mesh.e2e.mjs

Ca să-ți self-hostezi partea de rețea: rulează deploy/relay/ (un script Node de ~100 de linii) în spatele oricărui proxy TLS, plus coturn pentru TURN, și îndreaptă buildul clientului spre ele cu VITE_RELAY_MULTIADDR / VITE_TURN_CREDS_URL. Merge orice circuit relay libp2p binevoitor — nu ține stare și nu află nimic. Găzduiește buildul clientului oriunde static — IPFS, un CDN, un director în spatele lui nginx. Pașii compleți în docs/RELAY.md.

Construiește-ți propria aplicație p2p pe asta

Chatul e doar un consumator al nucleului. O aplicație nouă înseamnă ~40 de linii de bootstrap:

Rețeta cu cod e în client/src/lib/README.md. Table albe comune, jocuri pe ture, editoare colaborative, schimb de fișiere — orice încape în „grup mic, timp real, privat" încape în stackul ăsta.

Garanții și limite, pe bune

🔒 sueta

teljes, működő stack szerver nélküli, végponttól végpontig titkosított p2p webappokhoz — ez az oldal egyben a git repó is.

próbáld ki az élő chatet böngészd a kódot repó klónozása

Klónozás

Az oldal a repót a git dumb-HTTP protokollján át szolgálja ki, sima statikus fájlokként (tényleg sima fájlok — nincs itt git szerver, sőt semmilyen szerver):

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

Mit kapsz

client/src/lib/ — a p2p mag

Újrafelhasználható, alkalmazás-agnosztikus TypeScript libp2p-n: böngésző⇄böngésző WebRTC circuit-relay bootstrappel, végponttól végpontig titkosított replikált log (OrbitDB) determinisztikus szobánkénti címmel, E2E kriptográfia (HKDF + AES-GCM, szerkezetileg nonce-biztos), tartós Ed25519 identitások, amelyek minden logbejegyzést aláírnak.

deploy/relay/ — ~100 sor relé

Egy libp2p circuit relay + gossipsub peer-felfedezés websocketeken. Csak titkosított kézfogásokat visz — a szoba forgalma tag⇄tag megy, és sosem érinti. Dev szerver és self-host példa egyetlen fájlban.

client/src/app/ — a chat

Telepíthető PWA: szobák capability-linkekként, szálak, reakciók (a törlés is replikálódik), EXIF-től megfosztott képmegosztás titkosított bitswap-blokkokon, p2p hang-/videóhívás a szobában (DTLS-SRTP), offline is működő replikált előzmények, helyi értesítések, számozott kiadások app-beli frissítési sávval.

docs/ — a szerződések

PROTOCOL.md — kripto- és protokollspecifikáció (v2). RELAY.md — a relé: dev használat és self-hosting.

Hogyan működik (a rövid változat)

Futtasd magad

# dev: relé + app
cd deploy/relay && npm install && npm run dev   # :9090, determinisztikus dev PeerId
cd client && npm install && npm run dev         # :5173

# tesztek (igazi Chromium — a WebRTC-nek igazi UDP kell; mindegyik saját relét indít)
cd client && node e2e/mesh.e2e.mjs

A hálózati oldal self-hostolásához: futtasd a deploy/relay/-t (~100 soros Node szkript) bármilyen TLS proxy mögött, mellé coturnt a TURN-höz, és irányítsd rájuk a kliens buildet a VITE_RELAY_MULTIADDR / VITE_TURN_CREDS_URL változókkal. Bármilyen készséges libp2p circuit relay megteszi — nem tart állapotot és nem tud meg semmit. A kliens buildet bárhová kiteheted statikusan — IPFS, CDN, egy mappa nginx mögött. A teljes lépéssor a docs/RELAY.md-ben.

Építsd rá a saját p2p appod

A chat csak egy fogyasztója a magnak. Egy új app ~40 sor bootstrap:

A recept kóddal a client/src/lib/README.md-ben van. Közös rajztáblák, körökre osztott játékok, kollaboratív szerkesztők, fájl-drop — bármi, amire ráillik a „kis csapat, valós idő, privát", ráillik erre a stackre.

Garanciák és korlátok, őszintén