ejabberd 19.02: the MQTT Edition

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 support.


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 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. Next, we published the RTB benchmarking tool that could massively stress test MQTT servers. Finally, we announced Fluux, 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 support (mod_mqtt) on ejabberd, you can follow this documentation: ejabberd MQTT support

MQTT 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 version should help you build simplified group messaging services, as an alternative to MucSub

Allow specifying tag for listener for api_permission purposes

It is possible to add tags to http listeners:

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

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

      - 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. If you installed a previous version, please read ejabberd upgrade notes.

As usual, the release is tagged in the Git source code repository on Github. If you suspect that you’ve found a bug, please search or fill a bug report in Issues.

– 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

– 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

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

– 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

– 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

– 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

Let us know what you think 💬

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.