ejabberd 16.02: Happy Leap Day

To celebrate leap day, we are happy to release ejabberd 16.02, which mark huge leap for ejabberd both in terms of features and improvements.

In terms of features, we see in this release the culmination of our work in several areas:
– Support for flexible offline retrieval, aka XEP-0013. This is a big win for mobile developers.
– Improvements on archiving, with Message Archive Management (MAM) now supporting version 0.4.1 of the specifications.
– Full Elixir compliant packaging with the ability to deploy ejabberd as an Hex.pm dependency from your own application. See ejabberd on hex.pm.
– Performance improvement with faster and more memory efficient XML parsing and TLS encryption. You can also refer to our previous blog post: ejabberd Massive Scalability: 1 Node — 2+ Million Concurrent Users
– Better stream compression with the ability to enable stream compression after SASL.
– Easier adoption of ejabberd with a new migration script from Prosody XMPP servers.

As usual, this version is the product of a great community team work, with special kudos to Holger, Alexey, Evgeny, Pawel, Christophe, Badlop, Mickaël for their large contributions in this release.

That community effort is what makes ejabberd is such a popular project, with 2260+ stars on Github, availability in most Linux distributions and showing amazing number of downloads ! Thank you all !

Here is the full list of changes:


New XMPP Extensions support


  • New migration script from Prosody to ejabberd
  • Fix --disable-debug compilation flag
  • don’t escape ERL_OPTIONS
  • Two new global timeouts configurable: c2s_hibernate, receiver_hibernate
  • Make it possible to define sm_db_type per virtual host
  • configuration checker: Describe option type in code for domain_balancing option
  • Log failed SQL requests
  • Include mod_muc.hrl and fix records
  • mod_http_upload: Expand docroot before using it, also expand @HOST@


  • New import_prosody command
  • Start documenting arguments in mod_admin_extra commands
  • We added a way to get all ejabberd_commands, not only those that was registered
  • Allow to pass \n in argument to ejabberdctl
  • Add error handling to send_stanza command
  • Fix format_result so get_room_options command works again after commit reference aa5caa3


  • lager is the default (and only) logging module and we removed p1_logger
  • Handle spaces in vsn attribute of app file when installing deps
  • Renamed dependencies and modules for consistency but also to reflect huge performance gains:
    . p1_iconv -> iconv
    . p1_stringprep -> stringprep
    . p1_stun -> stun
    . p1_tls -> fast_tls
    . p1_yaml -> fast_yaml
    . p1_zlib -> ezlib

Message Archive Management

  • Advertise MUC MAM v0.4.1 in room JID’s disco#info
  • Add “delete_old_mam_messages” admin command
  • Add ‘from’ attribute to tag
  • Add “request_activates_archiving” option
  • Respond to form requests
  • Support XEP-0313 v0.2 MUC archive queries
  • Check whether MUC message is desired
  • Reject -based paging
  • Limit result set page size
  • Sort messages returned by Mnesia
  • Strip existing JID tags from MUC messages
  • Expose MUC occupant JID in more cases
  • Don’t let outcasts access MUC archive
  • Send new preferences when they are set
  • Stream management (XEP-0198): Let MAM take care of pending messages


  • Send presence with code 170 in initial presence from MUC
  • Add most status codes only to initial MUC presence
  • mod_muc_room: Don’t expose JIDs in anonymous rooms
  • mod_muc_room: Let members see admin/owner JIDs


  • Fix presence-based delivery
  • Make caps warning less confusing
  • Fix host/serverhost usage
  • Add support of pubsub#itemreply=publisher


  • Accept stream compression request after SASL
  • Make C2S session establishment optional to better conform to XMPP specifications and still be friendly with older clients.
  • MUC: new regexp_room_id option to limit possible room names.
  • ODBC: Set utf8mb4 charset on MySQL connection to support emoji storage as default.
  • LDAP: Improve LDAP shared roster support.
  • mod_register_web: Allow setting host when deleting account or changing password.
  • Rename timestamp_to_iso functions in jlib.
  • Stream management (XEP-0198): Fix session timeout corner case.
  • Several improvements in Elixir support.
  • Updated many translations.
  • Improve web admin stylesheet to fix rendering issues in some browsers.


  • ejabberd is now available as an hex.pm package and can be easily included as a dependency in any Elixir or Erlang application.
  • Installers include latest OpenSSL patches.


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.

Syndicate content