> ## Content Index
> Fetch the complete content index at: https://www.process-one.net/llms.txt
> Use this file to discover other available public pages before exploring further.

# ejabberd 19.02: the MQTT Edition
- URL: https://www.process-one.net/blog/ejabberd-19-02-the-mqtt-edition/
- Published: 2019-02-25T23:00:00.000Z
- Updated: 2024-09-17T13:07:13.000Z
- Author: Jérôme Sautret

This new ejabberd 19.02 release includes new major features, but also several improvements and bug fixes. The biggest news is the introduction of [MQTT](https://www.process-one.net/en/ejabberd/) support.

# Contributions

Several changes in this release were authored by our community contributors, and we would like to extend a big **thank you** for the contributions to: Holger Weiss, Christoph Scholz, Frank Diebolt, Paul Menzel, Nathan Bruning, Colm, and AquarHEAD Lou.

# New features

## MQTT support

We are pleased to announce that ejabberd Community Server now supports [MQTT](https://www.process-one.net/en/ejabberd/) along XMPP and SIP protocols. It’s been a long process we started back in September with [introduction of MQTT support in ejabberd Business Edition](https://www.process-one.net/blog/first-ever-mqtt-and-xmpp-dual-protocol-server-ejabberd-business-edition/). Next, we published [the RTB benchmarking tool](https://www.process-one.net/blog/rtb-benchmark-now-supports-mqtt/) that could massively stress test MQTT servers. Finally, [we announced Fluux](https://www.process-one.net/blog/introducing-fluux-xmpp-mqtt-as-a-service/), a Software-as-a-Service cloud solution that offers scalable MQTT and XMPP without the need for your own infrastructure.

We believe you should be able to choose your preferred protocol specifically for the task at hand, and without the need of a complex, multi-software architecture. With ejabberd and its combined support of MQTT, XMPP and SIP, we hope to make realtime software development simpler, faster and even more scalable.

If you would like to enable [MQTT](https://www.process-one.net/en/ejabberd/) support (`mod_mqtt`) on ejabberd, you can follow this documentation: [ejabberd MQTT support](https://docs.ejabberd.im/admin/guide/mqtt/?ref=process-one.net)

[MQTT](https://www.process-one.net/en/ejabberd/) support in ejabberd benefits from all the code infrastructure in place in ejabberd for clustering, plugins, etc. For example, the authentication mechanism is the same. Leveraging 16 years of work on our clustering engine and optimization of our stack, our MQTT server is able to reach millions of concurrent online users and is already among the top most scalable MQTT servers available.

With XMPP, MQTT and SIP support, ejabberd is now able to handle all your realtime traffic in a single package. ejabberd is already the most widely used XMPP server in the world. Our ambition is to reach the same trust with MQTT.

You can expect more bridges between protocols, and more cross-protocol integrations in the coming releases.

## MIX updates

The updates to `mod_mix` fixed submission-id and channel resource. Furthermore, the MIX implementation is now updated to reflect the new specification.

New [MIX](https://xmpp.org/extensions/xep-0369.html?ref=process-one.net) version should help you build simplified group messaging services, as an alternative to [MucSub](https://docs.ejabberd.im/developer/xmpp-clients-bots/extensions/muc-sub/?ref=process-one.net)

## Allow specifying tag for listener for `api_permission` purposes

It is possible to add tags to http listeners:

```
listener:
  - port: 4000
  - module: ejabberd_http
  - tag: "magic_listener"

```

That later can be used to have special `api_permission` just for it:

```
api_permissions:
  "magic_access":
    from:
      - tag: "magic_listener"
    who: all
    what: "*"

```

# Download and install ejabberd 19.02

The source package and binary installers are available at [ejabberd XMPP & MQTT server download page](https://www.process-one.net/en/ejabberd/downloads/). If you installed a previous version, please [read ejabberd upgrade notes](https://docs.ejabberd.im/admin/upgrade/from%5F18.12%5Fto%5F19.02/?ref=process-one.net).

As usual, the release is tagged in the Git source code repository on [Github](https://github.com/processone/ejabberd.git?ref=process-one.net). If you suspect that you’ve found a bug, please search or fill a bug report in [Issues](https://github.com/processone/ejabberd/issues?ref=process-one.net).

---

Admin  
– Fix in configure.ac the Erlang/OTP version: from 17.5 to 19.0  
– reload\_config command: Fix crash when sql\_pool\_size option is used  
– reload\_config command: Fix crash when SQL is not configured  
– rooms\_empty\_destroy command: Several fixes to behave more conservative  
– Fix serverhost->host parameter name for muc\_(un)register\_nick API

Configuration  
– Allow specifying tag for listener for api\_permission purposes  
– Change default ciphers to intermediate  
– Define default ciphers/protocol\_option in example config  
– Don’t crash on malformed ‘modules’ section  
– mod\_mam: New option clear\_archive\_on\_room\_destroy to prevent archive removal on room destroy  
– mod\_mam: New option access\_preferences to restrict who can modify the MAM preferences  
– mod\_muc: New option access\_mam to restrict who can modify that room option  
– mod\_offline: New option store\_groupchat to allow storing group chat messages

Core  
– Add MQTT protocol support  
– Fix (un)setting of priority  
– Use OTP application startup infrastructure for starting dependencies  
– Improve starting order of several dependencies

MAM  
– mod\_mam\_mnesia/sql: Improve check for empty archive  
– disallow room creation if archive not empty and clear\_archive\_on\_room\_destroy is false  
– allow check if archive is empty for or user or room  
– Additional checks for database failures

MUC  
– Make sure that room\_destroyed is called even when some code throws in terminate  
– Update muc room state after adding extra access field to it  
– MUC/Sub: Send mucsub subscriber notification events with from set to room jid

Shared Roster  
– Don’t perform roster push for non-local contacts  
– Handle versioning result when shared roster group has remote account  
– Fix SQL queries

Miscelanea  
– CAPTCHA: Add no-store hint to CAPTCHA challenge stanzas  
– HTTP: Reject http\_api request with malformed Authentication header  
– mod\_carboncopy: Don’t lose carbons on presence change or session resumption  
– mod\_mix: Fix submission-id and channel resource  
– mod\_ping: Fix ping IQ reply/timeout processing (17.x regression)  
– mod\_private: Hardcode item ID for PEP bookmarks  
– mod\_push: Improve notification error handling  
– PIEFXIS: Fix user export when password is scrammed  
– Prosody: Improve import of roster items, rooms and attributes  
– Translations: fixed “make translations”  
– WebAdmin: Fix support to restart module with new options