Superpowers for Rust message consumers
Production-ready retries, DLQs, ordering, audit logs, and autoscaling for your existing messaging stack.
cargo add shove --features inmemoryWhat you get
A small API on top of the brokers you already run. Four pillars:
- Strongly typed topics — bind a message type to a queue topology once; the compiler keeps publishers and consumers in sync.
- Managed consumer groups with autoscaling — min/max worker bounds driven by queue depth or consumer lag.
- Delivery ordering — strict per-key ordering with a single
.sequenced()switch. - Per-instance broadcast — every replica hears every message, with a single
.broadcast()switch and nothing left behind on the broker.
Plugs into RabbitMQ, AWS SNS+SQS, NATS JetStream, Apache Kafka, and Redis/Valkey Streams.
What's next
- Get started in 60 seconds — runs in-process, no Docker required.
- Core concepts — topics, outcomes, handlers, broadcast, the
Broker<B>pattern. - Per-broker setup — production patterns for RabbitMQ, SNS+SQS, NATS, Kafka, and Redis/Valkey.
- Full API reference — auto-generated rustdoc on docs.rs.
Who builds this
shove is written and maintained by Zannis Kalampoukis, a Rust and distributed-systems engineer. It grew out of production messaging work at Synchronicity Labs, a software engineering and consulting studio that builds and rescues backends, data platforms, and onchain systems.