RustStream connects your service to a message broker through a small set of generic traits, then gives you a router, middleware, codecs, and tooling on top. The core depends on no broker, so each broker is an independent crate held to one contract; broker-specific configuration never leaks into the framework.
Features
- Broker-agnostic core. Just traits and types, zero broker dependencies. Brokers are separate crates, and the contract is checked by a conformance harness.
- Fully async on tokio. No blocking APIs in the public surface.
- Subscribers are
Streams, not callbacks. Back-pressure comes for free. - Ack consumes
self. Double-ack is a compile error. - Pluggable codecs: JSON, MessagePack, and CBOR behind cargo features.
- Zero-boilerplate binaries.
#[ruststream::app]generatesmain; theruststreamCLI scaffolds projects, runs them, and generates the AsyncAPI document. - AsyncAPI 3.0 and Prometheus metrics, served from your own HTTP stack.
- Colored console logging behind the
loggingfeature; the generated CLI installs it onrun, with verbosity driven byRUST_LOG. - Capability traits for optional features (batch subscribe, transactions, request-reply, partitioning); a broker implements only what it supports.
Install
[]
= { = "0.4", = ["macros", "memory", "json"] }
= { = "1", = ["derive"] }
= "1"
The CLI ships with the crate behind the cli feature:
Write a service
use MemoryBroker;
use ;
use subscriber;
use JsonSchema;
use Deserialize;
async
#[ruststream::app] generates main, so there is no runtime boilerplate.
Run it
Test it
Unit-test handlers against the in-memory broker, with no external service. It does core routing only, so you assert on handler behaviour, middleware, and decoding exactly as in production. See the testing guide.
Documentation
- Guide and tutorials: https://powersemmi.github.io/ruststream/latest
- API reference: https://docs.rs/ruststream
- Writing a broker: https://powersemmi.github.io/ruststream/latest/broker-authors/
Ecosystem
ruststream-nats: the NATS broker (Core NATS and JetStream).ruststream-py: Python bindings.
Concrete brokers live in their own crates and pull ruststream from crates.io.
Minimum supported Rust version
The MSRV is 1.85 (edition 2024, native async fn in trait). CI builds the crate on every
stable toolchain from 1.85 up to current stable, so any floor in that range works.
The policy:
- The published
rust-versionstays at the floor. Raising it is a breaking change (a minor version bump pre-1.0) and is reviewed against the broker crates' client requirements at each minor release. - Broker crates (
ruststream-nats, ...) may require a newer toolchain than the core when their underlying clients do; cargo allows a dependent crate to have a stricter floor than its dependency. Check the broker crate's ownrust-versionfor its floor.
Contributing
License
Licensed under the Apache-2.0 license.
Inspired by FastStream.