Nodus
Self-hosting

Storage Node operations

Data directory, config, the interactive shell, and running as a service.

The Storage Node is a long-running Rust daemon. It can be run interactively for setup and diagnostics, or non-interactively as a system service.

Data directory

Chosen on first run (see Run a Storage Node). It contains:

<data-dir>/
  nodus.db           # SQLite catalogue (WAL mode)
  objects/           # content-addressed encrypted shards
  temp/              # in-progress atomic writes

SQLite runs with foreign_keys=ON, journal_mode=WAL, busy_timeout=5000, and synchronous=FULL.

Configuration file

~/.nodus/config.toml:

data_dir = "/home/user/NodusBackup"
relay_url = "https://relay.nodus.example.com"

relay_url is only persisted after a successful pairing. Relay URL precedence is: CLI --relay → config.toml → NODUS_RELAY_URL → none (it never defaults to localhost, so a misconfigured node cannot silently pair to the wrong Relay).

Environment variables

VariablePurpose
NODUS_DATA_DIRData directory (tilde-expanded)
NODUS_RELAY_URLRelay endpoint fallback
NODUS_PAIRING_CODEPairing code for automation without argv exposure

Run as a service

Use nodus node start in a systemd unit. With no TTY, a bare nodus also boots the daemon directly. Point stdin at the unit's journal.

[Service]
ExecStart=/usr/local/bin/nodus node start
Environment=NODUS_DATA_DIR=/var/lib/nodus
Restart=on-failure

Interactive shell

When the daemon runs on a TTY it exposes a shell with commands:

CommandPurpose
statusNode status
storage / summaryStorage summary
files / foldersList ids and sizes (names are encrypted)
conflictsShow conflicts
devicesShow paired devices
test / diagDiagnostics
factory-reset / purgeDestroy node state
quit / stop / exitStop

Moving the data directory

Use Change data location in the menu. An interrupted move is journaled in ~/.nodus/migration.json and completed on the next boot.

On this page