Introduction

Distributed Durable Streams over HTTP, backed by S3.

Ursula is a joint project by Tonbo and Loro.

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