A decentralized peer-to-peer social network built with Iroh, Tauri 2, and SvelteKit 5.
Successor to follow and identia, rebuilt on iroh's QUIC transport with end-to-end encrypted messaging.
Every user runs their own node. Posts, profiles, and follows are stored locally. Peers exchange data directly -- no central server, no accounts, no passwords.
Each node gets a permanent cryptographic identity (stored in identity.key). Your public key is your Node ID -- share it with others so they can follow you.
Four protocol layers handle all communication:
All data is persisted in a local SQLite database. The app works offline and syncs when peers are available.
Backend state model: Only the FeedManager (which manages gossip subscriptions) is behind a mutex. All other state -- the Iroh endpoint, blob store, database -- is accessed lock-free, so blob fetches and feed queries never block each other.
npm install
npm run tauri dev
This starts both the Vite dev server (port 1420) and the Tauri backend.
npm run tauri build
Produces a native desktop application in src-tauri/target/release/.
A self-hosted, headless server binary that adds opt-in aggregation, discovery, full-text search, and trending to the P2P network. Users register with a server by signing a cryptographic proof of identity. The server subscribes to their gossip topics and indexes their posts in SQLite with FTS5, exposing an HTTP API for search, trending hashtags, user directory, and aggregated feeds.
The server is an overlay -- the P2P layer remains the foundation. Users who never connect to a server lose nothing.
See todos/community-server.md for the full design document and implementation roadmap.
End-to-end encrypted direct messaging over a custom QUIC protocol (iroh-social/dm/1). E2E encryption uses X25519 key exchange derived from each user's existing ed25519 identity, with a Noise IK handshake for session establishment and a Double Ratchet for per-message forward secrecy. Messages are encrypted such that only the two participants can read them -- not relay servers, not community servers, not anyone.
See todos/direct-messaging.md for the original design document.
Peer-to-peer voice and video calls, with call signaling encrypted via the DM ratchet session.
See todos/voice-video-calling.md for the design document.
Link multiple devices to a single identity, similar to Signal's linked devices. A primary device holds the master keypair and authorizes secondaries via QR code pairing over an encrypted channel. Linked devices share the social graph, message history, and profile.
See todos/linked-devices.md for the design document.
VS Code + Svelte + Tauri + rust-analyzer.
MIT