Help

Common questions and typical snags. If the answer is not here, drop us an email — the address is at the bottom of the page.

Getting started

How much does the broker cost?

Nothing. The broker is free, there are no limits on devices, messages, subscriptions or servers, no licence keys are needed, and no telemetry is collected.

Which systems are supported?

Debian and Ubuntu (a package in the APT repository), Windows 10 and 11 x64 (a ready .exe), plus Linux builds for amd64, arm64 and armhf that run manually on any distribution, including Raspberry Pi.

What else do I need to install?

Nothing. The binary is statically linked and needs no runtime, no libc and no external database: the state is kept in pure-Go SQLite inside the broker itself.

Where do I go after installing?

The dashboard waits at http://your-server:8080. The default login is admin with the password admin — change it in the Profile section right after your first sign-in.

Which ports are open by default?

1883 for MQTT over TCP, 8883 for MQTT over TLS, and 8080 for the web dashboard and MQTT over WebSocket at /mqtt. Ports are changed in config.json or with command-line flags.

Connecting devices

A device cannot connect: “not authorized”. What is wrong?

Most likely you are signing in with the dashboard administrator's login. They are different things: the administrator manages only the web interface, while devices connect with separate accounts from the Users section. Create a user there and connect with that name and password.

The client connects but sees no messages.

Check the permissions. ACLs are deny-by-default: without an explicit allow rule there is no access. Make sure the user has a rule with read or readwrite access for the topic filter in question, and that it sits above any denying rules — rules are checked top to bottom until the first match.

How do I give a device access to its own branch only?

Add a rule with the filter $u/# and readwrite access. The $u placeholder expands to the connecting client's name, so one rule covers everyone: each device sees only its own branch. The dashboard has an “Own branch” button for this.

Can I allow anonymous access?

Yes, with a separate flag under Settings → Broker. Note that anonymous clients are denied the entire $ namespace, including $SYS.

Why does subscribing to # not show $SYS?

The specification requires it: wildcards do not reach topics starting with $. To read the statistics you need an explicit rule such as $SYS/#. There is also a global $SYS switch in the broker settings.

How do I connect from a browser?

Over MQTT over WebSocket: the address ws://your-server:8080/mqtt with the mqtt subprotocol. No separate gateway is needed — the WebSocket runs on the same port as the dashboard.

Security and TLS

The client complains about the certificate when connecting to 8883.

On first run the broker generates a self-signed certificate — fine for testing, but clients do not trust it. For a production system put your own certificate in the tls block of the configuration (the cert and key fields) and restart the broker.

How do I change the administrator password?

In the Profile section. The new password is written to config.json as a hash — no plaintext password stays in the file.

I forgot the administrator password.

Stop the broker, remove the passwordHash field from the auth block of config.json and put "password": "your-new-password" there instead. On the next start the broker hashes it and wipes the plaintext value from the file.

The dashboard is reachable from the internet — is that fine?

The standard Linux installation has the dashboard listening on 127.0.0.1 only and publishes it through nginx, where HTTPS and access restrictions are easy to add. Exposing port 8080 directly is not a good idea.

How do I give another system API access?

Settings → API — create a bearer token. It is shown once and only its hash is stored. If the system only needs statistics, tick “read only”: then only GET, HEAD and OPTIONS get through.

Load and reliability

One device is flooding the broker with messages. What now?

Turn on the limiters under Settings → Broker: messages per second, burst, bytes per second. They apply per connection. Exceeding them neither drops the connection nor loses messages — the broker slows its socket reads and the sender throttles itself.

One specific topic is noisy, but the client is otherwise fine.

That is a case for Rules → Topic limits. A per-pattern rule either thins the stream down to a rate, keeping the latest value, or drops the topic entirely. A sensor sending ten times a second becomes one message per second — and that will be the freshest reading.

What survives a broker restart?

Retained messages, persistent sessions with their subscriptions and offline queues, unfinished QoS handshakes and delayed messages. Clean sessions are not saved — by specification they die with the connection.

Is clustering supported?

No. The broker is designed as a single process. To link several brokers there is the bridge, which forwards topics between servers in both directions.

How do I see what is happening right now?

The Traffic section shows a live stream of messages and broker events with filtering and pause, and the Overview shows rate charts, machine health and an event feed. The data is streamed over WebSocket.

Maintenance

How do I update the broker on Debian or Ubuntu?

Along with the rest of the system: sudo apt-get update && sudo apt-get upgrade. Nothing else is needed, and the settings and data are left untouched.

How do I move the configuration to another server?

Settings → Import and export: download the file on the old server and upload it on the new one. Settings, users and rules are carried over.

Where are the data and logs?

The data sits in the data directory next to the binary (on Linux that is /opt/elxmqttbroker): broker.db, users.json and the certificates. On Linux the logs go to journald: journalctl -u elxmqttbroker -f.

How do I tell which version is running?

The version, build number and build time are baked into the binary: they are shown at the bottom of the sidebar, in the About section, and by running elxmqttbroker -version.

Can I turn off state persistence?

Yes, with persistence: false in config.json. Everything is then kept in memory only and lost on restart — which makes sense for test rigs.

Did not find the answer?

Write to us — we will try to help and to extend this section.

serjaru@gmail.com Browse the documentation