ejabberd 21.07

This new ejabberd 21.07 release includes many improvements and bugfixes in more than 130 commits.

ejabberd 21.07 released

When upgrading from previous versions, please notice: there is a suggested change in all SQL databases schemas, another suggested change specific for MySQL, an API change in srg_create, and major changes in ejabberdctl help.

Support for rebar3 has improved to allow building an OTP release. And support for Elixir has improved to use mix for compilation and build releases. So, you may want to use --with-rebar=rebar3 | mix and benefit from those tools features over rebar. Nevertheless, rebar is still used by default, and its support will be maintained for a long time as it’s used by several automatic build processes.

A more detailed explanation of those topics:

Add missing indexes to SQL sr_group table

The sr_group table in SQL databases got a new index.

If you store Shared Roster Groups in a SQL database, you can create the index corresponding to your database type, check the example SQL queries in the commit.

MySQL Backend Patch for scram-sha512

The MySQL database schema has improved to support scram-sha512 (#3582)

If you have a MySQL database, you can update your schema with:

ALTER TABLE users MODIFY serverkey varchar(128) NOT NULL DEFAULT ’’;
ALTER TABLE users MODIFY salt varchar(128) NOT NULL DEFAULT ’’;

Change in srg_create

That command API has changed the name argument to label, for coherence with the changes in the ejabberd Web Admin page.

Check ejabberdctl help srg_create or the API page.

Changes in ejabberdctl help

The help command has changed its usage and results.

If you use that command in some automatic script, please check ejabberdctl help and adapt your scripts accordingly.

Build a release using rebar3 and mix

It is now possible to build a release when using rebar, rebar3 and mix. Until now this was only supported when using rebar. In this sense, a recent rebar3 binary is included with ejabberd now.

For example usage, check the Production Release documentation section.

Are you curious about what a release is in the Erlang/OTP world? Check Adopting Erlang and Rebar3.

Build a development release

Now it is possible to build a development release when using rebar3 or mix. It allows running ejabberd in the local machine for development, manual testing… without installing in the system.

For example usage, check the Development Release documentation section.

By the way, Makefile has so many targets that now there’s a summary of them:

make help

Support to use mix in configure

The configure script supports rebar, rebar3 and Elixir‘s mix. Until now only rebar and rebar3 were supported.

If you want to compile ejabberd using mix, in theory any recent Elixir version is supported. But make rel requires Elixir 1.10.3 or higher.

Example usage:

./configure --with-rebar=mix
make rel
_build/prod/rel/ejabberd/bin/ejabberd start_iex

Summary of changes


  • Add rebar3 3.15.2 binary
  • Add support for mix to: ./configure --enable-rebar=mix
  • Add make dev to build a development release with rebar3 or mix
  • Improved make rel to work with rebar3 and mix
  • Hex: Add sql/ and vars.config to Hex package files (#3251)
  • Hex: Update mix applications list to fix error p1_utils is listed as both...
  • There are so many targets in Makefile… add make help
  • Fix extauth.py failure in test suite with Python 3 (#3612)
  • Added experimental support for GitHub Codespaces
  • Switch test service from TravisCI to GitHub Actions (#3613)


  • Display extended error message in ejabberdctl (#3584)
  • Remove SMP option from ejabberdctl.cfg, -smp was removed in OTP 21 (#3560)
  • create_room: After creating room, store in DB if it’s persistent (#3632)
  • help: Major changes in its usage and output (#3569)
  • srg_create: Update to use label parameter instead of name (#3578)


  • ejabberd_listener: New send_timeout option
  • mod_mix: Improvements to update to 0.14.1 (#3634)
  • mod_muc_room: Don’t leak owner JIDs (#3615)
  • mod_multicast: Routing for more MUC packets
  • mod_multicast: Correctly strip only other bcc addresses (#3639)
  • mod_mqtt: Allow shared roster group placeholder in mqtt topic (#3566)
  • mod_pubsub: Several fixes when using PubSub with RSM (#3618)(#3621)
  • mod_push: Handle MUC/Sub events correctly (#3565)
  • mod_shared_roster: Delete cache after performing change to be sure that in cache will be up to date data (#3578)
  • mod_shared_roster: Improve database and caching
  • mod_shared_roster: Reconfigure cache when options change
  • mod_vcard: Fix invalid_encoding error when using extended plane characters in vcard
  • mod_vcard: Update econf:vcard() to generate correct vcard_temp record
  • Translations: Major improvements in the Indonesian and Portuguese translations
  • WebAdmin: New simple pages to view mnesia tables information and content
  • WebSocket: Fix typos (#3622)


  • MySQL Backend Patch for scram-sha512 (#3582)
  • SQLite: When exporting for SQLite, use its specific escape options (#2576)
  • SQLite: Minor fixes for new_sql_schema support (#3303)
  • mod_privacy: Cast as boolean when exporting privacy_list_data to PostgreSQL (#1773)
  • mod_mqtt: Add mqtt_pub table definition for MSSQL (#3097)
  • mod_shared_roster: Add missing indexes to sr_group tables in all SQL databases

ejabberd 21.07 download & feedback

As usual, the release is tagged in the Git source code repository on Github.

The source package and binary installers are available at ejabberd XMPP & MQTT server download page.

If you suspect that you’ve found a bug, please search or fill a bug report on Github.

Let us know what you think 💬

Leave a Comment

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