broker / queue / durable delivery

Useful messaging without broker ceremony.

Fibril is a lightweight message broker focused on durable queues, explicit delivery semantics, leasing, retries, and predictable operational behavior, with fan-out streams alongside the work queues when you need broadcast. Most applications need durable queues, predictable delivery semantics, reconnect behavior that doesn't surprise them, and operational controls that are easy to understand during incidents. Fibril optimizes for that path. It is implemented in Rust, but the identity is simple, inspectable broker behavior. It is still early, and the missing pieces are named rather than hidden.

Durability is core and tested. Production readiness is still earned, not claimed.

queue email.send
worker leased
✓ack
delay 30s
queue lifecycletraffic: active
use fibril_client::SubEvent;
use std::time::Duration;

while let SubEvent::Delivery(msg) = sub.recv().await {
    match send_email(msg.text()?).await {
        Ok(()) => msg.complete().await?,
        Err(err) if err.is_temporary() => {
            msg.retry_after(Duration::from_secs(30)).await?
        }
        Err(_) => msg.fail().await?,
    };
}

Worker loops with manual acknowledgements. Email sending and error types are application code.

01

Durable by default

Queue publish confirmations wait for the message and the state needed to recover it to cross the persistence boundary.

02

Clients that read like intent

Complete, retry, delay, or fail work without building broker rituals into your app.

03

Lease under load

Pull-based delivery and bounded prefetch make pressure visible.

04

Fan-out streams

Plexus streams broadcast each record to every subscriber, alongside the work queues, with durability tiers you opt into.

current shape

Working parts, plainly stated.

The broker has a useful baseline today. The table separates available behavior from areas that still need tooling or client polish.

Read project status →
FeatureStatusNotes
Durable queues available Append-only log, snapshot, and replay.
Publish and subscribe available Custom TCP protocol with Rust, TypeScript, Python, Go, and C# clients.
Explicit settlement available ACK, fail, immediate retry, and delayed retry paths.
Delayed publish available Broker path and Rust, TypeScript, Python, Go, and C# client methods are wired.
Message TTL available Per-message or per-queue default. Expired messages drop or dead-letter.
Dead lettering available Global and per-queue policy are configurable. Replay tooling is still early.
Backpressure available Pull-based delivery and bounded prefetch.
Sparse queues available Lazy loading and idle eviction are wired. Observability is still growing.
Message inspection available Browse active queue messages from admin tooling, with optional payload previews.
Partitioned queues available Multiple partitions per queue, with client-side key routing and transparent fan-in.
Plexus streams available Fan-out channel: every subscriber receives every record, with durable named cursors and durability tiers you opt into.
Wildcard subscribe available Subscribe to every queue or stream matching a wildcard, and auto-attach new ones as they appear. Client-side.
Partition ownership experimental Cluster nodes split a queue's active traffic by owning different partitions. Experimental.
Replication experimental Followers keep partition copies for failover and recovery. Experimental.
Transactions out of scope Not planned. Transactional workflows are intentionally excluded.

Durable queues

available

Append-only log, snapshot, and replay.

Publish and subscribe

available

Custom TCP protocol with Rust, TypeScript, Python, Go, and C# clients.

Explicit settlement

available

ACK, fail, immediate retry, and delayed retry paths.

Delayed publish

available

Broker path and Rust, TypeScript, Python, Go, and C# client methods are wired.

Message TTL

available

Per-message or per-queue default. Expired messages drop or dead-letter.

Dead lettering

available

Global and per-queue policy are configurable. Replay tooling is still early.

Backpressure

available

Pull-based delivery and bounded prefetch.

Sparse queues

available

Lazy loading and idle eviction are wired. Observability is still growing.

Message inspection

available

Browse active queue messages from admin tooling, with optional payload previews.

Partitioned queues

available

Multiple partitions per queue, with client-side key routing and transparent fan-in.

Plexus streams

available

Fan-out channel: every subscriber receives every record, with durable named cursors and durability tiers you opt into.

Wildcard subscribe

available

Subscribe to every queue or stream matching a wildcard, and auto-attach new ones as they appear. Client-side.

Partition ownership

experimental

Cluster nodes split a queue's active traffic by owning different partitions. Experimental.

Replication

experimental

Followers keep partition copies for failover and recovery. Experimental.

Transactions

out of scope

Not planned. Transactional workflows are intentionally excluded.

durable queue throughput

Persisted. Confirmed. Still fast.

By default, a queue publish confirmation means the message and its enqueue state have crossed the persistence boundary through fsync. Replicated durable policies also wait for the required replicas to persist them.

Explore confirmation guarantees →
250k+messages/sec ingress
250k+messages/sec egress

Observed on a single node with 1 KiB payloads on a Ryzen 5950X, using the durable queue path. These figures measure ingress and delivery throughput. The historical workload does not await a confirmation for every publish. Workload, results and measurement details →