> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://rivet.chrisboulton.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://rivet.chrisboulton.com/_mcp/server.

# Install from source

> Build the rivet binary with Cargo.

Rivet has no packaged releases yet. Build it from a checkout with Rust 1.85 or newer:

```sh
cargo build --release --bin rivet --locked
sudo install -m 0755 target/release/rivet /usr/local/bin/rivet
rivet --help
```

Installing to `/usr/local/bin` keeps `sudo rivet` working, since sudo resets `PATH`, and it is one of the locations [SSH runs](/operations/ssh) look for an installed runner.

If you plan to run the [compile service](/operations/compile-service), also build `rivet-server`:

```sh
cargo build --release --bin rivet-server --locked
```

## Where to build it

| Task                                                            | Platform                                   |
| --------------------------------------------------------------- | ------------------------------------------ |
| Write, test, and compile configuration                          | macOS or Linux                             |
| Drive hosts over SSH, publish releases, run the compile service | macOS or Linux                             |
| Plan and apply on a host                                        | Ubuntu 24.04 with systemd, x86_64 or ARM64 |

A macOS build can't run on a Linux host. To manage hosts over SSH from a Mac, also build Rivet on Ubuntu 24.04 for the host's architecture and pass that binary with `--runner-binary`. Rivet uploads it on first use. See [Linux artifacts from a Mac](/operations/ssh#linux-artifacts-from-a-mac).

## Host requirements

Applying changes requires root. Planning works without root if the user can read the objects being inspected.

Each resource relies on standard system tools: apt and dpkg for packages, shadow-utils for accounts, systemd for services and timers, util-linux for mounts, and `setpriv` for running commands as another user. `rivet facts` checks which tools are present and advertises only the [capabilities](/reference/capabilities) the host can support. Compiling against those facts catches a missing tool before anything runs.

Some features need tools on the controller: Git and curl for [remote modules](/guides/remote-modules), and `sops` for [encrypted data layers](/guides/data-hierarchy#sops-layers).

To build and run the test suite, see [testing](/contributing/testing).