Introduction
Distributed Durable Streams over HTTP, backed by S3.
Ursula is an open-source implementation of Durable Streams: URL-addressable, append-only byte streams that can be replayed, resumed, and tailed with plain HTTP.
Run it as a single node for local development, or as a Raft cluster for replicated writes, follower reads, snapshots, bootstrap recovery, and optional S3-backed cold storage.
What it is
HTTP-native streams. PUT creates buckets and streams, POST appends bytes, and GET reads from an offset or tails live with long-poll/SSE.
One timeline per resource. Give each document, session, workflow, room, or agent run its own durable stream.
Distributed serving. Ursula adds leader-serialized appends, quorum replication, follower reads, and bootstrap/snapshot recovery around the Durable Streams protocol.
Run locally
Start a single node:
cargo run --bin ursula -- serve \
--node-id 1 \
--listen 127.0.0.1:4437 \
--advertise 127.0.0.1:4437 \
--data-dir ./data
Create a bucket and stream, append bytes, and read them back:
curl -X PUT http://127.0.0.1:4437/demo
curl -X PUT http://127.0.0.1:4437/demo/hello
curl -X POST http://127.0.0.1:4437/demo/hello \
-H 'Content-Type: application/octet-stream' \
--data-binary 'hello world'
curl 'http://127.0.0.1:4437/demo/hello?offset=-1'
Learn more
- Quick Start: step-by-step walkthrough
- Why Ursula: where it fits, and where it does not
- Concepts: streams, buckets, offsets, read modes, snapshots
- Architecture: how the cluster works
- API Reference: full HTTP API surface
- Protocol Spec: the Durable Streams Protocol and extensions