0.6.0 Released 24 October 2026
Felix

One system for your events, state and work.

Felix is an open-source, distributed platform for streams, caches, queues and counters, all on one replicated log. Written in Rust.

Why Felix

Infrastructure should make software simpler.

Most applications piece together one system for events, another for queues, another for state, and one more to move data between them. In Felix, events, work and state are three ways of operating over the same data.

One system. One durable foundation.
Multiple ways to use your data.

Fast enough for real-time applications, durable enough to trust, and simple enough that you can easily figure out what happened when something fails.

How Felix is different

One log where you'd run four systems

Streams, key-value caches, queues and counters all sit on one replicated log, behind one access model. And a slow subscriber falls behind on its own.

The usual stack
The usual stack: an app wired separately to an event log, a key-value store, a work queue and a fanout service, each with its own auth and its own client connection.appevent logown auth, own clientkey-value storeown auth, own clientwork queueown auth, own clientfanout serviceown auth, own clientThe usual stack: an app wired separately to an event log, a key-value store, a work queue and a fanout service, each with its own auth and its own client connection.appevent logown auth,own clientkey-value storeown auth,own clientwork queueown auth,own clientfanout serviceown auth,own client
Felix
Felix: the same app with one connection to one replicated log that serves streams, caches, queues and counters behind one access model of tenants, namespaces and grants.Felixone replicated logstreamscachesqueuescountersone access modeltenants, namespaces, grantsappFelix: the same app with one connection to one replicated log that serves streams, caches, queues and counters behind one access model of tenants, namespaces and grants.appFelixone replicated logstreamscachesqueuescountersone access modeltenants, namespaces, grants
Four systems to run, secure and keep consistent, or one log with tenants, namespaces and grants.
Elsewhere
Elsewhere, first case: C is slow and the publisher waits for it. Records jam up at the publisher, the lanes stall, and A and B are starved too.backlogABC

The publisher waits for C, and so do A and B.

Elsewhere, second case: C is slow and gets disconnected. Its line is cut, its records stop at the break, and A and B keep receiving.ABC

Or C is disconnected.

Felix
Felix: one publisher sends records to subscribers A, B and C, each through its own bounded queue. C slows down; its queue fills and the next records, offsets 41 to 44, are dropped for C alone. A and B keep receiving on time and the publisher never waits. C's subscription ends at offset 41, the first record it missed, and it resumes from 41, reading the dropped records from the log.queuepublisherABCslow

Offsets 41–44 dropped; C resumes from 41.

Every subscriber has its own bounded queue. Under the default overflow policy, the publisher and the other subscribers never wait on C. When C falls behind, it is told the first offset it missed and resumes from there.
Quickstart

Publish and subscribe

Once felixctl has a context for your cluster, each step is one command. The guide starts a local cluster with a stream named orders and a cache named users.

Try it with felixctl
# one terminal
felixctl sub orders

# another
felixctl pub orders 'hello'
felixctl cache put users alice 'online'
felixctl cache get users alice
felixctl topology orders
Go deeper

Features, guarantees and numbers

One log read three ways: a stream reads every record in order, a cache keeps only the newest value for each key, and a queue has finished records 0 to 4 and waits at record 5.streamcachequeue01234567abacbadc567

One log, many ways to use it

Streams, caches and queues on one replicated log, with conditional publish, range reads, fine-grained access and Kafka clients.

What Felix does
Three brokers and three shards. Each broker leads one shard and follows the other two, so every shard has a copy on each broker.shard 0shard 1shard 2broker 1broker 2broker 3leaderfollowerfollowerfollowerleaderfollowerfollowerfollowerleader

Shards, replicas and failover

A Quorum write is acknowledged once a majority of the replica set holds it, and only a replica holding every acknowledged record can be promoted.

How replication and failover work
An illustrative test night: broker 1 is partitioned, broker 2 is killed and broker 3 is frozen while acknowledged records accumulate; each one is checked in the final read.broker 1broker 2broker 3ackedpartitionkillfreeze

Tested against crashes, partitions and power loss

TLA+ models, a history checker that drives a real cluster through faults, power-loss sweeps of the storage engine, client conformance and fuzzed decoders.

How we test it

Measured on one broker

Felix 0.6.0 on one 8 vCPU Azure VM with local NVMe: gigabytes a second, and an fsynced publish acknowledged in about a third of a millisecond when the broker is not saturated.

Throughput and latency
Projects

Built on Felix

Each project keeps all of its state in Felix, with no other datastore, and can be self-hosted.

Felix Canvas with three people in a room: a text box with a heading, formatting and a list being edited by two of them, the text bar, a few connected shapes, and the toolbar and zoom controls Felix Canvas with three people in a room: a text box with a heading, formatting and a list being edited by two of them, the text bar, a few connected shapes, and the toolbar and zoom controls

felix-canvas

0.3.2

A multiplayer drawing canvas with live cursors, rich text, history you can scrub, and per-room sign-in.

Felix Arena style frame: a walled arena seen from above, with Coral and Violet hover-craft trading shots Style frame

felix-arena

0.1.6

A browser team deathmatch in 3D, played through Felix with the simulation deciding every hit. A kill cam replayed from the match's log is next.

Felix Webhook Relay mark: the Felix cat with one webhook coming in and three deliveries going out, one retrying

A webhook relay that stores each webhook durably, delivers it with retries, and replays any endpoint after an outage.

browser browser gateway felix WebSocket QUIC

A WebSocket gateway between browsers and Felix, with sign-in narrowed to one room or match.

All projects

Install

Get started

Install 0.6.0 from your package manager:

Rust clientcrates.io
cargo add felix-client@0.6.0
Docs for the Rust client
Python clientPyPI
pip install felix-client
Docs for the Python client
TypeScript clientnpm
npm install felix-client
Docs for the TypeScript client
Broker and control planeContainer images
docker pull ghcr.io/getfelix/felix-broker:0.6.0
Docs for the container images
felixctlHomebrew, crates.io, releases, image
brew install getfelix/tap/felixctl
Docs for felixctl