finds.dev← search

// the find

emitter-io/emitter

★ 4,005 · Go · AGPL-3.0 · updated Apr 2026

High performance, distributed and low latency publish-subscribe platform.

Emitter is an MQTT broker written in Go that adds channel-level security keys, message persistence, and a built-in gossip cluster on top of the standard pub/sub model. It targets IoT, gaming, and real-time web apps where you want MQTT semantics without running a separate auth layer. The 3M msg/sec claim is for a single broker; cluster throughput depends heavily on your gossip topology.

Channel keys with fine-grained permissions (read/write/store/presence per channel) are a genuinely useful design — you can hand a client a scoped key without exposing your master secret. The CRDT-based subscription state in internal/event/crdt means broker nodes can reconcile membership without a coordinator, which is the right call for an AP system. Test coverage is thorough for a messaging project — nearly every internal package has a _test.go counterpart including the codec, trie, and cluster peer logic. Kubernetes manifests for four cloud providers are included and not obviously broken, which saves real setup time.

The project is effectively stalled — last meaningful commit activity was 2019-2020 despite the April 2026 push date, and the go.mod still targets Go 1.9-era dependencies. AGPL v3 licensing will block most commercial users from self-hosting without a commercial agreement, and the commercial licensing contact is an email with no public pricing. Storage options are 'inmemory' or 'ssd' (using bbolt under the hood) with no external broker backend — if the node dies, in-flight messages are gone. The license key bootstrapping flow (generate key, copy from logs, re-run with env var) is awkward and error-prone for automated deployments.

View on GitHub → Homepage ↗

// 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 →