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 by the reviewed stable-release workflow, 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