ELX-MQTT Broker
A complete MQTT broker with a live web dashboard
MQTT 3.1.1 and 5.0 implemented from scratch, with no third-party protocol libraries. A single binary that carries its own dashboard, storage and TLS: install it and it runs.
Both protocol versions, in full
MQTT 3.1.1 and 5.0 written from the specification: every packet property, topic aliases, shared subscriptions, subscription identifiers, No Local, Retain Handling, Will Delay, Message Expiry, reason codes and the AUTH packet.
A dashboard that shows the traffic
Message rates, bandwidth, connected clients, live topics and an event feed — streamed over WebSocket with no page reloads. You can see a misbehaving device rather than deduce it.
Permissions per topic
Access rules are filter plus access plus allow or deny, denied by default. A single line with the $u placeholder confines a client to its own branch of the tree.
Bridges to other brokers
Two-way topic forwarding at the server level: direction, prefixes, TLS, loop protection and automatic reconnect. Joining two installations does not need a script in the middle.
Delayed publish and rate limits
Publishing to $delayed/60/topic arrives a minute later and survives a restart. A per-connection token bucket and per-topic rules thin a chatty sensor down instead of dropping the client.
Everything over REST
Whatever the dashboard can do, a bearer token can do: provision devices, grant permissions, read statistics. Read-only tokens exist for monitoring systems.
Screenshots
What it is
ELX-MQTT Broker is a message broker for the MQTT protocol — the transport most sensors, controllers and home-automation systems speak. Devices publish messages to topics, other devices subscribe to those topics, and the broker sits in the middle deciding who may talk to whom and making sure nothing is lost along the way.
The protocol here is not a wrapper around somebody else's library. Both versions are implemented directly from the specification, which is why the awkward parts — shared subscriptions, message expiry, will delay, flow control — actually behave as the specification says rather than as a dependency happened to implement them.
What it does
| Area | What you get |
|---|---|
| Protocol | MQTT 3.1.1 and 5.0, QoS 0/1/2, retained messages, Last Will, persistent sessions, offline queues |
| Transports | Plain TCP, TLS, MQTT over WebSocket and secure WebSocket |
| Dashboard | Live charts, client list, topic tree, event feed, publish form, settings — in seven languages |
| Access control | Topic-level ACLs, deny by default, per-user placeholders, read/write separation |
| Credentials | Built-in list, MariaDB or MySQL, SQLite, CSV, JWT, external HTTP service |
| Routing | Topic rewrite rules, automatic subscriptions, broker-to-broker bridges |
| Traffic shaping | Per-connection token bucket, per-topic rate limits and drop rules |
| Scheduling | Delayed publish through $delayed, EMQX-compatible, visible and cancellable |
| Integration | REST API with bearer tokens, read-only tokens, statistics endpoints |
| Persistence | Retained messages, sessions, queues and delayed messages in SQLite |
Getting it running
On Linux, the package installs a systemd service and starts it. On Windows, the executable runs as it is — double-click it and open the dashboard.
sudo dpkg -i elxmqttbroker_*.deb
sudo systemctl status elxmqttbroker
# dashboard: http://<server>:8567 MQTT: 1883, TLS: 8883
elxmqttbroker.exe
# dashboard: http://127.0.0.1:8567
# default login: admin / admin — change it on first entry
At a glance
- Protocol
- MQTT 3.1.1 and MQTT 5.0
- Operating systems
- Debian, Ubuntu, Windows 10 and 11
- Architectures
- amd64, arm64, armhf
- Written in
- Go, no CGO
- Storage
- SQLite, single file
- Dashboard languages
- Seven
- Default ports
- 1883, 8883, 8567
- External dependencies
- None
Frequently asked questions
How many clients can it hold?
Will my existing MQTT clients work with it?
Can I move over from Mosquitto or EMQX?
$delayed syntax.