// the find
bytebeamio/rumqtt
The MQTT ecosystem in rust
rumqtt is a Rust MQTT ecosystem containing two crates: rumqttc (async/sync client supporting MQTT 3.1.1 and 5) and rumqttd (an embeddable broker supporting MQTT 3.1.1). Targeted at Rust developers building IoT applications who want a native async client or an embeddable broker they can run in-process.
- Both sync and async client APIs are provided, with tokio under the hood for async — the eventloop model gives fine-grained control over when you poll and handle acks manually, which matters for QoS guarantees
- rumqttd is genuinely embeddable as a library (see singlenode.rs example), not just a standalone binary — useful for testing or lightweight edge deployments without running a separate process
- Benchmarks are included and compare against paho and a Go client, with methodology visible in the repo rather than just posting numbers on a website
- Active maintenance (last push 2025), CI coverage badges backed by actual workflow files, and a CHANGELOG per crate — this isn't abandonware
- rumqttd has no MQTT 5 support on the broker side despite the client supporting it — if you need MQTT 5 features end-to-end (user properties, reason codes, flow control), you're stuck or need a different broker
- Persistence is in-memory only for the broker; there's a segments module but no durable storage for messages across restarts, which is a hard blocker for anything requiring message durability
- The v4 and v5 protocol parsing code is duplicated wholesale between rumqttc and rumqttd rather than shared — not a user-facing problem but means bug fixes have to be applied in multiple places and the codebase is harder to maintain
- Authentication and authorization in the broker is minimal — the external_auth example exists but there's no built-in ACL, username/password validation beyond basic config, or plugin system, so you'd need to wrap it yourself for any real multi-tenant deployment