GitHub - tonbo-io/ursula: Distributed event stream server over HTTP, backed by S3.
Distributed event stream server over HTTP, backed by S3. - tonbo-io/ursula
github.com/tonbo-io/ursulaDistributed event stream server over HTTP, backed by S3. - tonbo-io/ursula
github.com/tonbo-io/ursulaUrsula is a self-hosted, distributed server for the replayable, append-only event timelines behind document edits, agent runs, workflows, and chat. It speaks the Durable Streams Protocol over plain HTTP and SSE. Event streams live outside the broker network. Document editors, agents, and durable workflows need timelines that browsers, mobile apps, and serverless functions can read, write, and tail over the public internet. That asks for HTTP-native, distributed, S3-backed infrastructure, not the SDK-locked, single-network shape Kafka-style brokers were built for. The Durable Streams Protocol nails that wire format, but its reference server is a single process: a node loss is data loss. The other servers we evaluated each force you to give up one of four things this primitive deserves to keep: Open-source self-hosting. Low write latency (sub-50 ms P99 appends, no batching window required). Plain S3 economics (cold tier on standard S3, no S3 Express tier, no per-GB SaaS markup). Quorum-replicated durability (acknowledged writes survive a single-node failure). Full design intent: Why Ursula · How Ursula compares. For now, Ursula builds from Rust source. Pre-built release binaries are on the way. Run a single in-memory node (no persistence, good for kicking the tires): cargo run --bin ursula -- server --preset default It binds 127.0.0.1:4437, picks a core count from your CPU, and uses an in-memory engine. Use --config to load a TOML config file, or --preset to choose a built-in resource preset. The ursula deployment binary also provides the independently scalable gateway and indexer roles. ursulactl remains a separate, lightweight operator CLI: ursula server --config ursula.toml ursula gateway --upstream http://ursula-0:4437 ursula indexer --s3-bucket my-bucket --cache-dir /var/cache/ursula-index ursulactl status --config cluster.yaml Create a bucket and stream, append bytes, 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' Tail the stream live over SSE, new appends arrive as event: data lines immediately: curl -N 'http://127.0.0.1:4437/demo/hello?offset=-1&live=sse' Walkthroughs: Quick Start · Deploy a cluster · Configure S3. Three or five…
crawled Sep 8, 2026
Nearest neighbours by embedding distance, computed at index time.
Open-source observability tool that uses AI agents to self-heal your software - superloglabs/superlog
A design skill for AI coding assistants. Encodes the anti-slop consensus into one ruleset. Powered by Together AI.
Run them anywhere. Leave them running. Herdr holds real terminals open so your agents keep working when you close the laptop, and…
Amazon