---
layout: post
title: "Choosing a self-hosted MQTT broker"
date: 2025-01-03 18:40:00 +0200
comments: true
categories:
---

# [HiveMQ](https://hivemq.com)

:thumbsup: readily available official Docker images

:thumbsdown:
* community license is limited to 25 connected clients
* requires an extension for authentication and authorization
* community edition only has static, file-based authentication and authorization

# [Mosquitto](https://mosquitto.org/)


:thumbsup:
* no limitations on community edition
* offers dynamic authentication and authorization

:thumbsdown:
* authentication and authorization
* no built-in web dashboard (it's a separate package, [Cedalo Management Center](https://cedalo.com/mqtt-gui-mosquitto/))
* Cedalo MC official images no longer updated on Docker Hub

# [EMQX](https://emqx.com)

:thumbsup:
* Just Works :tm:
* official Docker images readily available
* built-in (Mnesia) database
* built-in web dashboard, including websocket client
* built-in dynamic authentication with multiple backends

Supports authenticating clients either by user or by client id. This setting can be changed on the fly without changing the database (as long as the identifiers are consistent).
:bulb: Authenticating by user allows the same user account to be used for multiple client ids, e.g. with a user account corresponding to a person who can use different clients at different times to connect. Clients are expected to generate a unique client id on the fly.

Authenticating based on client id forces you to provision new credentials for each individual client.
