// the find
moscajs/aedes
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.