One replicated log behind streams, caches and queues
A stream reads the log forward, a cache keeps the latest value for each key, and a queue is a cursor a consumer group shares. All three use the same durability, recovery and replication.

Streams, key-value caches, queues and counters all sit on one replicated log, behind one access model.
A stream reads the log forward, a cache keeps the latest value for each key, and a queue is a cursor a consumer group shares. All three use the same durability, recovery and replication.
Records on a durable stream carry their log offsets. A subscriber resumes after the last one it saw, and a jump between offsets shows exactly which records it missed.
Each subscriber has its own queue, bounded by count and by bytes (256 MiB by default). Under the default policy a publisher never waits for a slow subscriber, and the others keep their pace.
A Quorum stream acknowledges a publish once a majority of its replicas, the leader counted, have written it to their logs. With no majority reachable, it is never acknowledged: the publish times out and reports its outcome as unknown.
A lost leader is replaced only by a replica that holds its log, and the new leader fences a majority of the replicas before it serves. Followers report a leader that stops answering, so a durable Quorum stream fails over in about five seconds. A new cluster turns this on when its first broker registers; an upgraded one, once an operator finalizes its fleet features.
A publish can name the offset it expects to start at. When two writers race for one offset, exactly one succeeds, and the refused one writes nothing.
Read a bounded slice of a durable stream without subscribing. Each durable record keeps its append time, and a client can find the first record at or after a time.
felixctl inspect asks each broker what it holds: a shard's leader, lease and follower lag, or every subscription with its queue depth and drops. felix-broker inspect segments checks a data directory offline and says what startup would do with it.
Grants go down to one cache key or key prefix, and exchanged tokens can be narrowed by action and resource. A client can act for many users over shared connections, on one broker or across a cluster, each request checked against its own token. A gateway can trade a user's token for a delegated one that names it as the actor, or for one with no permissions that only authenticates its connections.
Revoking a principal, or removing a rule that reached it, ends its open streams, subscriptions, cache watches and Kafka connections on every broker within about one control-plane sync, with a revoked error. Deleting a stream ends its subscriptions with stream_deleted.
Kafka producers, and consumers that assign their own partitions, work against durable streams: each stream is a topic and each shard a partition. Kafka consumer groups and transactions are not supported.
Without groups or transactions, Kafka Connect, Kafka Streams and ksqlDB don't run.
Kafka in the docsAll three speak QUIC through one shared implementation and pass every required scenario in the same conformance catalogue. felixctl covers the command line.
Install commandsfelix-client on crates.ioDocs for the Rust clientfelix-client on PyPIDocs for the Python clientfelix-client on npmDocs for the TypeScript client