All Versions
Latest Version
Avg Release Cycle
56 days
Latest Release

Changelog History
Page 1

  • v22.05 Changes


    • C2S: Don't expect that socket will be available in c2s_terminated hook
    • Event handling process hook tracing
    • Guard against erlang:system_info(logical_processors) not always returning a number
    • domain_balancing: Allow for specifying type only, without specifying component_number


    • βž• Add TLS certificate authentication for MQTT connections
    • πŸ›  Fix login when generating client id, keep connection record (#3593)
    • πŸ›  Pass property name as expected in mqtt_codec (fixes login using MQTT 5)
    • πŸ‘Œ Support MQTT subscriptions spread over the cluster (#3750)


    • Attach meta field with real jid to mucsub subscription events
    • πŸ– Handle user removal
    • Stop empty MUC rooms 30 seconds after creation
    • default_room_options: Update options configurable
    • subscribe_room_many_max_users: New option in mod_muc_admin


    • πŸ‘Œ Improved options to support @HOST@ and auto values
    • πŸ”§ Set auth and register options based on ejabberd configuration
    • conversejs_options: New option
    • conversejs_resources: New option


    • mod_pubsub: Allow for limiting item_expire value
    • mod_pubsub: Unsubscribe JID on whitelist removal
    • node_pep: Add config-node and multi-items features (#3714)


    • πŸ‘Œ Improve compatibility with various db engine versions
    • πŸ”€ Sync old-to-new schema script with reality (#3790)
    • βœ… Slight improvement in MSSQL testing support, but not yet complete

    Other Modules

    • auth_jwt: Checking if an user is active in SM for a JWT authenticated user (#3795)
    • mod_configure: Implement Get List of Registered/Online Users from XEP-0133
    • mod_host_meta: New module to serve host-meta files, see XEP-0156
    • mod_mam: Store all mucsub notifications not only message notifications
    • mod_ping: Delete ping timer if resource is gone after the ping has been sent
    • mod_ping: Don't send ping if resource is gone
    • mod_push: Fix notifications for pending sessions (XEP-0198)
    • mod_push: Keep push session ID on session resume
    • mod_shared_roster: Adjust special group cache size
    • mod_shared_roster: Normalize JID on unset_presence (#3752)
    • mod_stun_disco: Fix parsing of IPv6 listeners


    • πŸ‘ autoconf: Supported from 2.59 to the new 2.71
    • ⚑️ fast_tls: Update to 1.1.14 to support OpenSSL 3
    • ⚑️ jiffy: Update to 1.1.1 to support Erlang/OTP 25.0-rc1
    • ⚑️ luerl: Update to 1.0.0, now available in
    • lager: This dependency is used only when Erlang is older than 22
    • ⚑️ rebar2: Updated binary to work from Erlang/OTP 22 to 25
    • ⚑️ rebar3: Updated binary to work from Erlang/OTP 22 to 25
    • ⚑️ make update: Fix when used with rebar 3.18


    • πŸš€ mix release: Copy include/ files for ejabberd, deps and otp, in mix.exs
    • πŸš€ rebar3 release: Fix ERTS path in ejabberdctl
    • πŸ”§ Set default ejabberd version number when not using git
    • 🚚 mix.exs: Move some dependencies as optional
    • πŸš€ mix.exs: No need to use Distillery, Elixir has built-in support for OTP releases (#3788)
    • 🐧 tools/make-binaries: New script for building Linux binaries
    • πŸ— tools/make-installers: New script for building command line installers


    • πŸ†• New make relive similar to ejabberdctl live without installing
    • ⚠ ejabberdctl: Fix some warnings detected by ShellCheck
    • ejabberdctl: Mention in the help: etop, ping and started/stopped
    • πŸ”Š make rel: Switch to paths: conf/, database/, logs/
    • mix.exs: Add -boot and -boot_var in ejabberdctl instead of adding vm.args
    • ⚠ tools/ Fix some warnings detected by ShellCheck


    • Accept more types of ejabberdctl commands arguments as JSON-encoded
    • delete_old_mam_messages_batch: New command with rate limit
    • delete_old_messages_batch: New command with rate limit
    • get_room_occupants_number: Don't request the whole MUC room state (#3684, #1964)
    • πŸ‘ get_vcard: Add support for MUC room vCard
    • oauth_revoke_token: Add support to work with all backends
    • room_unused_*: Optimize commands in SQL by reusing created_at
    • rooms_unused_...: Let get_all_rooms handle global argument (#3726)
    • stop|restart: Terminate ejabberd_sm before everything else to ensure sessions closing (#3641)
    • subscribe_room_many: New command

    🌐 Translations

    • ⚑️ Updated Catalan
    • ⚑️ Updated French
    • ⚑️ Updated German
    • ⚑️ Updated Portuguese
    • ⚑️ Updated Portuguese (Brazil)
    • ⚑️ Updated Spanish


    • πŸ”Š CI: Publish CT logs and Cover on failure to an external GH Pages repo
    • βœ… CI: Test shell scripts using ShellCheck (#3738)
    • πŸ— Container: New workflow to build and publish containers
    • πŸš€ Installers: Add job to create draft release
    • πŸ— Installers: New workflow to build binary packages
    • βœ… Runtime: New workflow to test compilation, rel, starting and ejabberdctl
  • v21.12 Changes


    • create_room_with_opts: Fixed when using SQL storage
    • change_room_option: Add missing fields from config inside mod_muc_admin:change_options
    • πŸ›  piefxis: Fixed arguments of all commands


    • mod_caps: Don't forget caps on XEP-0198 resumption
    • mod_conversejs: New module to serve a simple page for Converse.js
    • mod_http_upload_quota: Avoid max_days race
    • πŸ‘ mod_muc: Support MUC hats (XEP-0317, conversejs/prosody compatible)
    • ⚑️ mod_muc: Optimize MucSub processing
    • πŸ‘» mod_muc: Fix exception in mucsub {un}subscription events multicast handler
    • ⚑️ mod_multicast: Improve and optimize multicast routing code
    • mod_offline: Allow storing non-composing x:events in offline
    • mod_ping: Send ping from server, not bare user JID
    • mod_push: Fix handling of MUC/Sub messages
    • mod_register: New allow_modules option to restrict registration modules
    • mod_register_web: Handle unknown host gracefully
    • mod_register_web: Use mod_register configured restrictions


    • Add delete_expired_pubsub_items command
    • Add delete_old_pubsub_items command
    • ⚑️ Optimize publishing on large nodes (SQL)
    • πŸ‘Œ Support unlimited number of items
    • πŸ‘Œ Support max_items=max node configuration
    • ⬆️ Bump default value for max_items limit from 10 to 1000
    • πŸ”§ Use configured max_items by default
    • node_flat: Avoid catch-all clauses for RSM
    • node_flat_sql: Avoid catch-all clauses for RSM


    • πŸ‘‰ Use INSERT ... ON CONFLICT in SQL_UPSERT for PostgreSQL >= 9.5
    • mod_mam export: assign MUC entries to the MUC service
    • MySQL: Fix typo when creating index
    • πŸ‘ PgSQL: Add SASL auth support, PostgreSQL 14
    • PgSQL: Add missing SQL migration for table push_session
    • PgSQL: Fix vcard_search definition in pgsql new schema


    • "sort -R" command not POSIX, added "shuf" and "cat" as fallback
    • πŸ‘‰ Make s2s connection table cleanup more robust
    • ⚑️ Update export/import of scram password to XEP-0227 1.1
    • ⚑️ Update Jose to 1.11.1 (the last in correctly versioned)
  • v21.07 Changes


    • βž• Add rebar3 3.15.2 binary
    • βž• Add support for mix to: ./configure --enable-rebar=mix
    • πŸ‘Œ Improved make rel to work with rebar3 and mix
    • βž• Add make dev to build a development release with rebar3 or mix
    • πŸ“¦ Hex: Add sql/ and vars.config to Hex package files
    • ⚑️ 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 failure in test suite with Python 3
    • βž• Added experimental support for GitHub Codespaces
    • βœ… Switch test service from TravisCI to GitHub Actions


    • Display extended error message in ejabberdctl
    • βœ‚ Remove SMP option from ejabberdctl.cfg, -smp was removed in OTP 21
    • create_room: After creating room, store in DB if it's persistent
    • help: Major changes in its usage and output
    • ⚑️ srg_create: Update to use label parameter instead of name


    • ejabberd_listener: New send_timeout option
    • ⚑️ mod_mix: Improvements to update to 0.14.1
    • mod_muc_room: Don't leak owner JIDs
    • mod_multicast: Routing for more MUC packets
    • mod_multicast: Correctly strip only other bcc addresses
    • mod_mqtt: Allow shared roster group placeholder in mqtt topic
    • πŸ›  mod_pubsub: Several fixes when using PubSub with RSM
    • mod_push: Handle MUC/Sub events correctly
    • mod_shared_roster: Delete cache after performing change to be sure that in cache will be up to date data
    • 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
    • WebAdmin: New simple pages to view mnesia tables information and content
    • ✏️ WebSocket: Fix typos


    • MySQL Backend Patch for scram-sha512
    • SQLite: When exporting for SQLite, use its specific escape options
    • SQLite: Minor fixes for new_sql_schema support
    • mod_privacy: Cast as boolean when exporting privacy_list_data to PostgreSQL
    • mod_mqtt: Add mqtt_pub table definition for MSSQL
    • mod_shared_roster: Add missing indexes to sr_group tables in all SQL databases
  • v21.04 Changes

    API Commands:

    • add_rosteritem/...: Add argument guards to roster commands
    • πŸ‘‰ get_user_subscriptions: New command for MUC/Sub
    • remove_mam_for_user_with_peer: Fix when removing room archive
    • send_message: Fix bug introduced in ejabberd 21.01
    • set_vcard: Return modules errors

    πŸ— Build and setup:

    • πŸ‘ Allow ejabberd to be compatible as a dependency for an Erlang project using rebar3
    • CAPTCHA: New question/answer-based CAPTCHA script
    • πŸ”§ --enable-lua: new configure option for luerl instead of --enable-tools
    • βœ‚ Remove support for HiPE, it was experimental and Erlang/OTP 24 removes it
    • ⚑️ Update sql_query record to handle the Erlang/OTP 24 compiler reports
    • ⚑️ Updated dependencies to fix Dialyzer warnings


    • ⚑️ CAPTCHA: Update FORM_TYPE from captcha to register
    • LDAP: fix eldap certificate verification
    • MySQL: Fix for "specified key was too long"
    • ⚑️ Translations: updated the Esperanto, Greek, and Japanese translations
    • Websocket: Fix PONG responses


    • mod_block_strangers: If stanza is type error, allow it passing
    • mod_caps: Don't request roster when not needed
    • mod_caps: Skip reading roster in one more case
    • 🚚 mod_mam: Remove queryid from MAM fin element
    • mod_mqtt: When deregistering XMPP account, close its MQTT sessions
    • mod_muc: Take in account subscriber's affiliation when checking access to moderated room
    • mod_muc: Use monitors to track online and hard-killed rooms
    • 🚚 mod_muc: When occupant is banned, remove his subscriptions too
    • mod_privacy: Make fetching roster lazy
    • mod_pubsub: Don't fail on PEP unsubscribe
    • mod_pubsub: Fix gen_pubsub_node:get_state return value
    • mod_vcard: Obtain and provide photo type in vCard LDAP
  • v21.01 Changes

    Miscellaneous changes:

    • log_rotate_size option: Fix handling of β€˜infinity’ value
    • mod_time: Fix invalid timezone
    • Auth JWT: New check_decoded_jwt hook runs the default JWT verifier
    • MUC: Allow non-occupant non-subscribed service admin send private MUC message
    • MUC: New max_password and max_captcha_whitelist options
    • OAuth: New oauth_cache_rest_failure_life_time option
    • PEP: Skip reading pep nodes that we know won’t be requested due to caps
    • SQL: Add sql script to migrate mysql from old schema to new
    • SQL: Don’t use REPLACE for upsert when there are β€œ-” fields.
    • πŸ‘ Shared Rosters LDAP: Add multi-domain support (and flexibility)
    • Sqlite3: Fix dependency version
    • 0️⃣ Stun: Block loopback addresses by default
    • πŸ“š Several documentation fixes and clarifications


    • πŸ‘ decide_room: Use better fallback value for room activity time when skipping room
    • delete_old_message: Fix when using sqlite spool table
    • module_install: Make ext_mod compile module with debug_info flags
    • room_unused_*: Don’t fetch subscribers list
    • send_message: Don’t include empty in messages
    • set_room_affiliation: Validate affiliations

    βš™ Running:

    • 🐳 Docker: New Dockerfile and devcontainer.json
    • πŸ†• New ejabberdctl foreground-quiet
    • Systemd: Allow for listening on privileged ports
    • Systemd: Integrate nicely with systemd

    🌐 Translations:

    • 🚚 Moved gettext PO files to a new ejabberd-po repository
    • πŸ‘Œ Improved several translations: Catalan, Chinese, German, Greek, Indonesian, Norwegian, Portuguese (Brazil), Spanish.
  • v20.12 Changes

    • βž• Add support for SCRAM-SHA-{256,512}-{PLUS} authentication
    • Don't use same value in cache for user don't exist and wrong password
    • outgoing_s2s_ipv*_address: New options to set ipv4/ipv6 outbound s2s out interface
    • s2s_send_packet: this hook now filters outgoing s2s stanzas
    • start_room: new hook runs when a room process is started
    • check_decoded_jwt: new hook to check decoded JWT after success authentication

    • Admin

    • 🐳 Docker: Fix DB initialization

    • New sql_odbc_driver option: choose the mssql ODBC driver

    • πŸ”§ Rebar3: Fully supported. Enable with ./configure --with-rebar=/path/to/rebar3

    • systemd: start ejabberd in foreground

    • Modules:

    • MAM: Make sure that jid used as base in mam xml_compress is bare

    • πŸ‘ MAM: Support for MAM Flipped Pages

    • MUC: Always show MucSub subscribers nicks

    • MUC: Don't forget not-persistent rooms in load_permanent_rooms

    • πŸ‘ MUC Admin: Better error reporting

    • MUC Admin: Fix commands with hibernated rooms

    • MUC Admin: Many improvements in rooms_unused_list/destroy

    • MUC Admin: create_room_with_opts Store options only if room starts

    • πŸ“š Pubsub: Remove 'dag' node plugin documentation

    • Push: Fix API call return type on error

    • πŸ‘ Push: Support cache config changes on reload

    • Register: Allow for account-removal-only setup again

    • πŸ‘ Roster: Make roster subscriptions work better with invalid roster state in db

    • Vcard: Fix vCard search by User when using Mnesia

    • WebAdmin: Allow vhost admins to view WebAdmin menus

    • WebAdmin: Don't do double utf-8 conversion on translated strings

    • WebAdmin: Mark dangerous buttons with CSS

    • WebSocket: Make websocket send put back pressure on c2s process

  • v20.07 Changes

    • πŸ”„ Changes in this version
    • βž• Add support for using unix sockets in listeners.
    • πŸ‘‰ Make this version compatible with erlang R23
    • πŸ‘‰ Make room permissions checks more strict for subscribers
    • πŸ›  Fix problem with muc rooms crashing when using muc logger with some locales
    • Limit stat calls that logger module issues
    • Don't throw errors when using user_regexp acl rule and having non-matching host
    • πŸ›  Fix problem with leaving old data when updating shared rosters
    • πŸ›  Fix edge case that caused failure of resuming old sessions with stream management.
    • πŸ›  Fix crash when room that was started with logging enabled was later changed to logging disabled
    • 0️⃣ Increase default shaper limits (this should help with delays for clients that are using jingle)
    • πŸ›  Fix couple compatibility problems which prevented working on erlang R19
    • πŸ›  Fix sending presence unavailable when session terminates for clients that only send directed presences (helps with sometimes not leaving muc rooms on disconnect).
    • Prevent supervisor errors for sockets that were closed before they were passed to handler modules
    • πŸ‘‰ Make stun module work better with ipv6 addresses
  • v20.03 Changes

    March 25, 2020
    • πŸ”„ Changes in this version
    • βž• Add support of ssl connection when connection to mysql database (configured with sql_ssl: true option)
    • πŸ”§ Experimental support for cockroachdb when configured with postgres connector
    • Add cache and optimize queries issued by mod_shared_roster, this should greatly improve performance of this module when used with sql backend
    • πŸ›  Fix problem with accessing webadmin
    • πŸ‘‰ Make webadmin work even when url is missing trailing slash
    • When compiling external modules with ext_mod, use flags that were detected during compilation of ejabberd
    • ⚑️ Make config changed to ldap options be updated when issued reload_config command
    • Fix room_empty_destory command
    • πŸ›  Fix reporting errors in send_stanza command when xml passed to it couldn't be passed correctly
  • v20.02 Changes

    February 25, 2020
    • πŸ”„ Changes in this version
    • πŸ›  Fix problems when trying to use string format with unicode values directly in xmpp nodes
    • βž• Add missing oauth_client table declaration in
    • πŸ‘Œ Improve compatibility with CocroachDB
    • πŸ›  Fix importing of piefxis files that did use scram passwords
    • πŸ›  Fix importing of piefxis files that had multiple includes in them
    • ⚑️ Update jiffy dependency
    • πŸ‘ Allow storage of emojis when using mssql database (Thanks to Christoph Scholz)
    • Make ejabberd_auth_http be able to use auth_opts
    • πŸ‘‰ Make custom_headers options in http modules correctly override built-in values
    • Fix return value of reload_config and dump_config commands
  • v20.01 Changes

    January 17, 2020
    • πŸ†• New features
    • Implement OAUTH authentication for clients
    • Implement OAUTH authentication in mqtt
    • 🌲 Make logging infrastructure use new logger introduced 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 automaticaly
    • 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