Celeriant
An append-only event store for the write side of CQRS. Distributed, strictly ordered per aggregate, built in Rust.
Celeriant enforces business invariants at write time: optimistic concurrency, idempotent retries, per-aggregate ordering, and an acknowledged write that is durable on two storage systems before your call returns. On a pair of i4i.metal boxes it sustains 1,057,417 durable writes a second across 60,000 connections, p99 108 ms, mTLS on client and replication paths, every write fdatasync'd on both nodes before the ack. See Performance.
Start here
- Quickstart: run a node and append your first event.
- What is Celeriant: the problem it solves, and how.
- When not to use it: read this before you adopt anything.
- Concepts: CQRS, aggregates, events.
Celeriant is at 0.2.0, released under Apache-2.0. The server ships as the ghcr.io/celeriant/celeriant container image, the Rust client as crates, and the .NET client as the Celeriant.Client NuGet package. Minor versions still break things: 0.2.0 changed the Rust client API. If you need stability today, see when not to use it.
Why every page says LLM generated
An LLM wrote the prose on this site. I read every page, and each load-bearing claim traces back to the Celeriant source. Anything that drifts gets fixed.
What I have not done is rewrite it all in my own voice. Building the database wins that fight for my time, every week. Sorry for the machine prose. If you find something wrong, open an issue and I will fix it.