finds.dev← search

// the find

moscajs/aedes

★ 1,953 · JavaScript · MIT · updated Mar 2026

Barebone MQTT broker that can run on any stream server, the node way

Aedes is an MQTT 3.1/3.1.1 broker built on Node.js streams — you wire it to TCP, TLS, or WebSocket yourself and plug in whatever persistence backend you want. It replaced Mosca (same authors) and is meaningfully faster: ~28k msg/sec in-memory, ~47k with Redis/Mongo cluster vs Mosca's ~19k. The target is IoT backends where you want a Node.js-native broker you control rather than running a separate Mosquitto process.

Proper backpressure via Node.js streams — it won't buffer your broker into OOM under load. Persistence and message-queue layers are fully swappable interfaces, so you can start in-memory and graduate to MongoDB/Redis without changing broker code. Real QoS 1/2 support with the full handshake flow (PUBREC/PUBREL/PUBCOMP), not just fire-and-forget. Cluster story is actually solved: use aedes-persistence-mongodb + mqemitter-redis and multiple nodes share state correctly.

MQTT 5.0 is listed as 'not supported yet' and has been in that state for years — if you need user properties, shared subscriptions, or reason codes, this isn't the broker. Authorization is checked at publish time but not re-evaluated mid-flight; revoked permissions still allow in-flight messages through, which is a documented but real security gap in any zero-trust scenario. The persistence plugins are a separate install with their own versioning, and keeping aedes, aedes-persistence-mongodb, and mqemitter-redis all compatible is not automatically managed — version drift bites people. No built-in metrics endpoint; you need the aedes-stats plugin, which means another dependency to keep alive.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →