Nodus
Getting Started

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 | sh

The 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-node

Then check the installed version:

nodus --version

First run

nodus                                       # interactive CLI
nodus --data-dir ~/NodusBackup              # or export NODUS_DATA_DIR=~/NodusBackup

From 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:

  1. Prompts for the Relay URL.
  2. Prompts for a pairing code — mint one in the web app under Devices → “+ Add Storage Node”.
  3. 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 prompting

Where 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 move

Identity 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.

Next steps

On this page