Run a Storage Node
First-run setup, the interactive CLI, and non-interactive pairing.
The Storage Node is the Rust daemon that holds your files. It stores an SQLite catalogue, a content-addressed object store, and its cryptographic identity.
Install
Prebuilt binaries are published on GitHub Releases for Linux x86_64:
curl -fsSL https://raw.githubusercontent.com/TalibMushtaq/nodus/main/scripts/install-node.sh | shThe installer verifies the release checksum and installs nodus to
~/.local/bin by default. Pin a version with
sh -s -- --version 0.1.0, or choose a directory with --dir /usr/local/bin.
To install from source (any platform with Rust):
cargo install --git https://github.com/TalibMushtaq/nodus storage-nodeThen check the installed version:
nodus --versionFirst run
nodus # interactive CLI
nodus --data-dir ~/NodusBackup # or export NODUS_DATA_DIR=~/NodusBackupFrom a source checkout, cargo run and cargo run -- --data-dir ~/NodusBackup
behave the same way.
On a terminal with no existing config, a bare nodus:
- Prompts for the Relay URL.
- Prompts for a pairing code — mint one in the web app under Devices → “+ Add Storage Node”.
- Presents a menu: run the node, view the storage summary, list files/folders, show status, or pair/re-pair.
Without --data-dir, the first run prompts for a data directory and defaults to
~/NodusBackup.
Non-interactive / service use
When stdin is not a TTY (systemd, pipes), a bare nodus boots the daemon
directly. You can also be explicit:
nodus node start # always boot the daemon
nodus node pair --relay http://host --code CODE # pair without promptingWhere data lives
~/NodusBackup/ # data dir (chosen on first run)
nodus.db # SQLite catalogue (+ -wal, -shm)
objects/ # encrypted shards, named by BLAKE3 hash
temp/ # in-progress atomic writes
~/.nodus/
config.toml # data_dir + relay_url
identity/ # Ed25519 node key + node_id
migration.json # journal for an interrupted data-dir moveIdentity and pairing
The node generates a persistent Ed25519 keypair and derives a stable node_id.
Bootstrap pairing redeems a one-time code at the Relay's
/pairing/codes/redeem; the code is never logged or persisted. See
Devices and pairing.
A pairing code to a non-loopback host must use HTTPS/WSS — the code is a bootstrap credential. Plain HTTP is refused except on loopback.