Skip to content

Install

Nauka is a single binary called nauka. It has no runtime dependencies, no configuration file and no database to provision: everything a node needs lives in its data directory. The web interface is compiled into the binary, so installing the binary installs the UI too.

Terminal window
curl -sSfL https://sh.getnauka.com | sh

The script detects your platform, resolves the latest published release, downloads the matching tarball, verifies its SHA256 checksum against the SHA256SUMS.txt published with the release, and moves the binary into /usr/local/bin (escalating with sudo only if that directory is not already writable).

Check that it worked:

Terminal window
nauka --help

The script reads three variables, all optional:

VariableDefaultEffect
VERSIONlatest releaseInstall a specific tag, e.g. VERSION=v0.1.0. Also the escape hatch when the GitHub API is unreachable.
INSTALL_DIR/usr/local/binWhere the binary is placed.
NO_SUDOunsetSet to 1 to never escalate. If the target directory is not writable, the binary falls back to ~/.local/bin.
Terminal window
# Pin a version and install for the current user only
curl -sSfL https://sh.getnauka.com | VERSION=v0.1.0 NO_SUDO=1 sh

Linux packages are attached to every GitHub release, for x86_64 and aarch64. They install the binary in /usr/bin/nauka, add a systemd unit, create an unprivileged nauka system user, and prepare /etc/nauka for the cluster key and /var/lib/nauka for the data.

Terminal window
# Download the .deb for your architecture from the releases page
curl -fsSLO https://github.com/sifrah/nauka/releases/latest/download/nauka_0.1.0-1_amd64.deb
# apt resolves dependencies; dpkg -i also works
sudo apt install ./nauka_0.1.0-1_amd64.deb

The package does not start the service: a node with no cluster key would run unauthenticated. Install the key first, then enable the unit — see Deploy a cluster.

Building from source additionally requires Node, because the web interface is compiled into the binary. Skip the webui step and you still get a working node, just without a UI.

  1. Install Rust (stable) and Node 22 or newer.

  2. Clone the repository:

    Terminal window
    git clone https://github.com/sifrah/nauka
    cd nauka
  3. Build the web interface, so that cargo has something to embed:

    Terminal window
    cd webui && npm ci && npm run build && cd ..
  4. Build the binary:

    Terminal window
    cargo build --release

    It lands in target/release/nauka. Copy it wherever you keep local binaries.

  5. Optionally, run the test suite — it spins up real QUIC clusters on loopback, kills nodes, corrupts shards and runs an in-process DHT testnet:

    Terminal window
    cargo test --workspace

Every release artifact carries a signed build provenance attestation produced by the release workflow. It ties the file you hold to the exact workflow run and the exact commit that built it:

Terminal window
gh attestation verify nauka-0.1.0-x86_64-unknown-linux-gnu.tar.gz \
--repo sifrah/nauka

A successful verification means the bytes on your disk were produced by .github/workflows/release.yml in sifrah/nauka, at a specific commit, signed by GitHub’s transparency log at build time. Nobody — not even someone holding the repository’s credentials — can retroactively forge that record for a file built elsewhere.

PlatformTarget
Linux, x86_64 (glibc)x86_64-unknown-linux-gnu
Linux, aarch64 (glibc)aarch64-unknown-linux-gnu
macOS, Intelx86_64-apple-darwin
macOS, Apple Siliconaarch64-apple-darwin

Linux builds are produced on Ubuntu 22.04, which sets the oldest glibc supported. There is no musl build yet, so Alpine and other musl distributions need a source build. Windows is not supported; build from source under WSL if you need it.

Installing a binary is not deploying a cluster: the interesting part is the cluster key, the ports, and how many machines you need before losing one stops mattering. That is Deploy a cluster.