ejabberd 16.08

Welcome ejabberd summer release !

This new release is the culmination of several months of work to improve your experience using ejabberd. It contains as usual a lot of small bug fixes and some enhancements. However, this version contains some new major features:

  • MUC/Sub
  • Major clean-up and improvement on OAuth ReST API
  • Database backend for OAuth tokens
  • Better support of Elixir modules
  • Full compatibility with Erlang 19
  • Modules loading in a dependent order


The biggest improvement in ejabberd 16.08 is a new experimental feature in ejabberd that make group conversations in XMPP work seamlessly with mobile clients: MUC/Sub.

The main issue with XMPP group chat (based on XEP-0045) is that it is bound to user presence. On mobile, presence is almost irrelevant. You are always somewhat loosely reachable, but ofter seen as offline from XMPP point of view. MUC/Sub rely as much as possible on existing MUC specification, while making the smallest possible change that make mobile group conversation client development easy without having to send presence.
See all details in our dedicated MUC/Sub blogpost.

This release also covers needs of the Elixir community: Erlang 19, Elixir 1.2.6, better mix integration. It’s also possible to write Elixir module handled by the contributed module extension of ejabberd. We also tested ejabberd with Elixir 1.3.2 with success, so you can likely upgrade without issues.

Finally, it is worth noting that development team is growing and three new official contributors joined the project: Gabriel, Anna and Thiago. Welcome !


This is a selection of the most relevant changes:


  • New MUC/Sub support
  • Add ‘allow_subscription’ room configuration option for MUC/Sub

OAuth and ReST API

  • Add OAUTH SQL backend
  • New special scope: ejabberd:admin and ejabberd:user, to more easily grant group of privileges
  • Add DB backend support for ejabberd_oauth
  • Added ejabberdctl commands to manage OAuth tokens: oauth_issue_token, oauth_list_tokens, oauth_list_scopes, oauth_revoke_token
  • Simplified OAuth form: username and password merged into JID field
  • User configurable validity duration for tokens on OAuth token generation form
  • Add support for sending back missing scope error to API ReST command calls
  • Oauth: several minor fixes
  • Support oauth password grant type, to generate token programmatically

Elixir support

  • Update supported Elixir version to 1.2 and 1.3.
  • Support installation of Elixir contributions with external module command line tool.


  • Fix use of like parameter in sql pubsub’s requests
  • Fix node configuration change with sql backends
  • Fix send_last_items duplication with multi-plugin setup


  • Always limit result set page size
  • Use hooks instead of direct calls


  • Add support for checking access rules conformance for commands
  • Add support for rich error reporting for API
  • Add support for sending back missing scope error to API ReST command calls
  • Fix handling of complex values as arguments in http_api
  • Improve error handling

Other improvements

  • External Component Connection Hooks
  • Fix compilation issues on R19
  • Support for OpenSSL 1.1
  • Make access rules in ejabberd_web_admin configurable
  • Make modules loading in a dependent order (#1191)
  • Make s2s stats commands more robust
  • Preserve PID for offline sessions
  • Several quoting fixes for PostgreSQL
  • Switch supervised workers from temporary to transient


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

The source package and binary installers are available at ProcessOne.

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.