Install
This page gets a single Ursula node running on your machine so you can try the API. There are two ways to do it:
| Pick | When |
|---|---|
| Docker | You just want to try Ursula. One command, no toolchain. |
| Build from source | You want local binaries, plan to hack on Ursula, or can't run Docker. |
Both start the same in-memory, non-replicated node on port 4437. Nothing is persisted across restarts. For a production cluster, see Deploy a Cluster.
Docker
Every release publishes a multi-arch image to GHCR:
docker run --rm -p 4437:4437 ghcr.io/tonbo-io/ursula:0.3.6
The image runs as a non-root user and contains both ursula (the server) and ursulactl (the operator CLI). Images are published only from release tags, so pin the version you want to run.
Build from source
You need rustup, a C compiler, and pkg-config. The repository pins the toolchain in rust-toolchain.toml, so rustup selects the right nightly automatically.
On macOS:
brew install rustup pkg-config
rustup-init -yOn Debian or Ubuntu:
sudo apt-get update
sudo apt-get install -y build-essential pkg-config curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shClone, build, and start the server:
git clone https://github.com/tonbo-io/ursula.git
cd ursula
cargo build --release -p ursula -p ursula-ctl
./target/release/ursula server
The server is now listening on 127.0.0.1:4437. The build also produces target/release/ursulactl, the operator CLI you will use once a cluster is up.
Verify
With the node running, from another terminal:
curl http://127.0.0.1:4437/__ursula/metrics
A JSON snapshot of runtime state means the node is up.
Next
- Quick Start: create streams, append, replay, and tail live over SSE
- Deploy a Cluster: the production three-voter shape with OpenTofu + Helm
- Configuration: persistence, presets, and S3 cold storage