ejabberd 20.01

We are pleased to announce ejabberd version 20.01. This release focuses on OAUTH support, logging performances improvement and configuration helper, as well as the usual various bug fixes.

ejabberd 20.01

New Features and improvements


We are now supporting OAUTH to authenticate with the embedded MQTT server.

This will only work for MQTT 5.0 connections. A client MUST set “Authentication Method” property of CONNECT packet to “X-OAUTH2” and MUST set the token in “Authentication Data” property of the same CONNECT packet. The server responses as usual with CONNACK.

On the server, you just have to enable OAUTH authentication like for XMPP, as described in the post about understanding ejabberd OAuth support.


We are now using the new logger introduced in OTP22, instead of lagger. This should greatly improve performance of the logging infrastructure.


A new configuration parser/validator was added, to check ejabberd.yml syntax and find configuration issues.

SCRAM support

The routine to convert password to SCRAM format now works for all backends, not only SQL.


We’ve started to add to support to use CockroachDB as database backend.

Technical changes

Database schema changes

To migrate from 19.09 to 20.01, you have to use the following commands on your existing database, after you’ve made a backup of it:


If you are using the legacy mysql.sql schema:

ALTER TABLE  oauth_client CHANGE `client` `client_id` text PRIMARY KEY;
ALTER TABLE  oauth_client CHANGE `secret` `client_name` text NOT NULL;

If you are using the newer mysql.new.sql schema:

CREATE TABLE oauth_client (
   client_id varchar(191) NOT NULL PRIMARY KEY,
   client_name text NOT NULL,
   grant_type text NOT NULL,
   options text NOT NULL


CREATE TABLE oauth_client (
    client_id text PRIMARY KEY,
    client_name text NOT NULL,
    grant_type text NOT NULL,
    options text NOT NULL
ALTER TABLE oauth_client RENAME COLUMN client TO client_id;
ALTER TABLE oauth_client RENAME COLUMN secret TO client_name;

Download and install ejabberd 20.01

The source package and binary installers are available at ProcessOne. If you installed a previous version, there are no additional upgrade steps, but as a good practice, plase backup your data.

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.

Full changelog

* New features
– Implement OAUTH authentication in MQTT
– Make logging infrastructure use new logger introduced
in Erlang (requires OTP22)
– New configuration parser/validator
– Initial work on being able to use CockroachDB as database backend
– Add gc command
– Add option to disable using prepared statements on Postgresql
– Implement routine for converting password to SCRAM format for all backends not only SQL
– Add infrastructure for having module documentation directly in individual module source code
– Generate man page automatically
– Implement copy feature in mod_carboncopy

* Fixes
– Make webadmin work with configurable paths
– Fix handling of result in xmlrpc module
– Make webadmin work even when accessed through not declared domain
– Better error reporting in xmlrpc
– Limit ammount of results returned by disco queries to pubsub nodes
– Improve validation of configured JWT keys
– Fix race condition in Redis/SQL startup
– Fix loading order of third party modules
– Fix reloading of ACL rules
– Make account removal requests properly route response
– Improve handling of malformed inputs in send_message command
– Omit push notification if storing message in offline storage failed
– Fix crash in stream management when timeout was not set

Let us know what you think 💬

Leave a Comment

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