Introduction
What Nodus is, why it exists, and how this documentation is organised.
Nodus is a hybrid, offline-first peer-to-peer storage system. Files live primarily on a Storage Node you control, sync directly between your own devices over the local network, and use the Internet only as an enhancement — never a hard dependency.
Nodus is a single monorepo containing four deployable components:
| Component | Directory | Stack | Role |
|---|---|---|---|
| Web client | apps/web | Next.js + packages/ui (Tailwind v4) | Browser UI, session auth, uploads/downloads |
| Mobile client | apps/mobile | React Native / Expo | Native app, LAN discovery, background sync |
| Storage Node | services/storage-node | Rust, SQLite | Durable local storage + object store |
| Relay | services/relay | Go, SQLite, Redis | Auth, signaling, sync, temporary buffer |
Why Nodus
Most cloud storage treats the Internet — and a central server — as the source of truth. Nodus flips that:
- Local-network-first. Your devices talk directly to your Storage Node over Wi-Fi or wired LAN. No Internet is required for day-to-day sync.
- Internet as enhancement, not dependency. A Relay provides signaling, cross-network sync, and temporary buffering when devices aren't on the same network — but it never holds plaintext file contents or keys.
- Recoverable by design. If the Relay's database is lost, it can be fully rebuilt from snapshots held by your Storage Node(s).
- Convergent, not "last write wins". Independently made offline changes reconcile without an arbitrary winner overwriting the other.
How it fits together
INTERNET
|
v
+----------------------+
| Go Relay / API |
| SQLite · Redis |
| Temporary Buffer |
+----------+-----------+
|
Sync Protocol
|
Wi-Fi / LAN
|
+----------v-----------+
| Rust Storage Node |
| SQLite · Object Store|
+----------+-----------+
|
Local WebRTC
|
+----------v-----------+
| Web / Mobile Client|
+----------------------+Files are split into 8 MB shards, encrypted client-side with AES-256-GCM (a unique nonce per shard), and integrity-checked with BLAKE3. The Relay only ever sees encrypted bytes and encrypted key envelopes — never plaintext file keys or shard contents.
Where to go next
Getting Started
Install the tooling, run the stack locally, and pair your first device.
Core Concepts
Architecture, transfer paths, encryption, sync, and recovery.
Self-hosting
Deploy a single-origin server unit with TLS and run your own Relay.
Reference
CLI, Relay API, protocol messages, and configuration.