Low tail latency
Designed for predictable p99/p999 under load, not just aggregate throughput. QUIC gives multiplexed streams without head-of-line blocking, and explicit backpressure stops one slow path cascading into the rest.

Felix is a low-latency distributed data backend that serves streams, caches and work queues from one replicated log, over a single QUIC-based transport layer.
New here? Why Felix? is the plain-language answer — why one system instead of a log, a cache and a queue, and who should not use it. The cards below are the same argument for someone who already knows the territory.
Low tail latency
Designed for predictable p99/p999 under load, not just aggregate throughput. QUIC gives multiplexed streams without head-of-line blocking, and explicit backpressure stops one slow path cascading into the rest.
Unified primitives
One core log abstraction behind several semantics — streams (per-subscription fanout cursors), queues (shared consumer-group cursors with acks), and cache (key → value with TTL). One system instead of three.
QUIC from the ground up
Encrypted by default with TLS 1.3, multiplexed streams per connection, built-in flow control and congestion awareness, and resistance to head-of-line blocking.
Tunable, explicitly
Connection pooling, stream multiplexing, time- and count-bounded batching, flow-control window sizing, and optional per-stage telemetry — all under your control rather than hidden behind defaults.
The demos are not simulations — each one runs a real broker and real clients, and each asserts the property it demonstrates as a test.
Felix uses a framed protocol (felix-wire) over QUIC streams to unify event
streaming and request/response caching, with explicit control over multiplexing,
batching, and flow control.
Streams, caches and queues are three readings of the same bytes, not three subsystems. They share one durability path, one recovery path, one placement rule and one replication path.
Pub/Sub data flow
EventBatch frames with configurable batching.Cache data flow
request_id and are multiplexed over those streams.Queue data flow
Composed data flow
Because every semantic is a reading of one log, they compose — each flow below is the primitive a whole class of application is usually hand-built from:
| Feature | What it gives you |
|---|---|
| QUIC transport | Modern, multiplexed, encrypted transport layer |
| High fanout | Efficient delivery to many subscribers, with isolation between them |
| Connection pooling | Reusable connections and streams, so hot paths skip setup cost |
| Batch processing | Time- and count-bounded batching for throughput |
| TTL support | Time-to-live on cache entries with lazy expiration |
| Work queues | Consumer groups with acknowledgements, redelivery and dead letters |
| Backpressure | Explicit flow control at six checkpoints to prevent cascade failures |
| Metrics | Prometheus-compatible metrics endpoint |
| Observability | Structured logging with optional per-stage telemetry |
Felix is a good fit today for:
See What Felix Is For for the honest boundaries — including what Felix is deliberately not.
Working today
Not built yet
Clone the repository.
git clone https://github.com/gabloe/felix.gitcd felixBuild the workspace.
cargo build --workspace --releaseRun a demo — each one is self-contained and starts its own broker.
task demo:slow-consumertask demo:state-divergenceOr start a real cluster — control plane, credentials and three brokers — and publish through one broker to a shard another one owns.
cargo run --release -p felix-cluster -- up --nodes 3cargo run --release -p felix-cluster -- subscribe orders # second windowcargo run --release -p felix-cluster -- publish orders hi # thirdSee the Demos Overview or the Quickstart Guide for the full set.