ejabberd 24.10
🚀 ejabberd 24.10: The "Bidi" Stream Release
We’re excited to announce ejabberd 24.10, a major release packed with substantial improvements and support for important extensions specified by the XMPP Standard Foundation (XSF). This release represents three months of focused development, bringing around 100 commits to the core repository alongside key updates in dependencies. The improvements span enhanced security and streamlined connectivity—all designed to make ejabberd more powerful and easier to use than ever.
Release Highlights:
- XEP-0288: Bidirectional Server-to-Server Connections
- XEP-0480: SASL Upgrade Tasks
- IQ permission in privileged entities
- PubSub varied fixes
- WebAdmin improvements
If you are upgrading from a previous version, please note minor changes in commands and two changes in hooks. There are no configuration or SQL schema changes in this release.
Below is a detailed breakdown of the new features, fixes, and enhancements:
Support for XEP-0288: Bidirectional Server-to-Server Connections
The new mod_s2s_bidi
module introduces support for XEP-0288: Bidirectional Server-to-Server Connections. This update removes the requirement for two connections per server pair in XMPP federations, allowing for more streamlined inter-server communications. However, for full compatibility, ejabberd can still connect to servers that do not support bidirectional connections, using two connections when necessary. The module is enabled by default in the sample configuration.
Support for XEP-0480: SASL Upgrade Tasks
The new mod_scram_upgrade
module implements XEP-0480: SASL Upgrade Tasks. Compatible clients can now automatically upgrade encrypted passwords to more secure formats, enhancing security with minimal user intervention.
PubSub Service Improvements
We’ve implemented six noteworthy fixes to improve PubSub functionality:
- PEP notifications are sent only to owners when
+notify
(3469a51) - Non-delivery errors for locally generated notifications are now skipped (d4b3095)
- Fix default node config parsing (b439929)
- Fix merging of default node options (ca54f81)
- Fix choice of node config defaults (a9583b4)
- Fall back to default plugin options (36187e0)
IQ permission for privileged entities
The mod_privilege module now supports IQ permission based on version 0.4 of XEP-0356: Privileged Entity. See #3889 for details. This feature is especially useful for XMPP gateways using the Slidge library.
WebAdmin improvements
ejabberd 24.06 release laid the foundation for a more streamlined WebAdmin interface, reusing existing commands instead of using specific code, with a possibly different logic. This major change allows developers to add new pages very fast, just by calling existing commands. It also allows administrators to use the same commands than in ejabberdctl
or any other command frontend.
As a result, many new pages and content were added. Building on that, the 24.10 update introduces MAM (Message Archive Management) support, allowing administrators to view message counts, remove all MAM messages, or only for a specific contact, and also view the MAM Archive directly from WebAdmin.
Additionally, WebAdmin now hides pages related to modules that are disabled, preventing unnecessary options from displaying. This affects mod_last, mod_mam, mod_offline, mod_privacy, mod_private, mod_roster, mod_vcard.
Fixes in commands
-
set_presence
: Now returns an error when the session is not found. -
send_direct_invitation
: Improved handling of malformed JIDs. -
update
: Fix command output. So far,ejabberd_update:update/0
returned the return value ofrelease_handler_1:eval_script/1
. That function returns the list of updated but unpurged modules, i.e., modules where one or more processes are still running an old version of the code. Since commit5a34020d23f455f80a144bcb0d8ee94770c0dbb1
, the ejabberdupdate
command assumes that value to be the list of updated modules instead. As that seems more useful, modifyejabberd_update:update/0
accordingly. This fixes theupdate
command output. -
get_mam_count
: New command to retrieve the number of archived messages for a specific account.
Changes in hooks
Two key changes in hooks:
-
New
check_register_user
hook inejabberd_auth.erl
to allow blocking account registration when a tombstone exists. -
Modified
room_destroyed
hook inmod_muc_room.erl
. Until now the hook passed as arguments:LServer, Room, Host
. Now it passes:LServer, Room, Host, Persistent
That newPersistent
argument passes the roompersistent
option, required by mod_tombstones because only persistent rooms should generate a tombstone, temporary ones should not. And thepersistent
option should not be completely overwritten, as we must still known its real value even when room is being destroyed.
Log Erlang/OTP and Elixir versions
During server start, ejabberd now shows in the log not only its version number, but also the Erlang/OTP and Elixir versions being used. This will help the administrator to determine what software versions are being used, which is specially useful when investigating some problem, and explaining it to other people for help.
The ejabberd.log
file now looks like this:
...
2024-10-22 13:47:05.424 [info] Creating Mnesia disc_only table 'oauth_token'
2024-10-22 13:47:05.427 [info] Creating Mnesia disc table 'oauth_client'
2024-10-22 13:47:05.455 [info] Waiting for Mnesia synchronization to complete
2024-10-22 13:47:05.591 [info] ejabberd 24.10 is started in the node :ejabberd@localhost in 1.93s
2024-10-22 13:47:05.606 [info] Elixir 1.16.3 (compiled with Erlang/OTP 26)
2024-10-22 13:47:05.606 [info] Erlang/OTP 26 [erts-14.2.5.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit:ns]
2024-10-22 13:47:05.608 [info] Start accepting TCP connections at 127.0.0.1:7777 for :mod_proxy65_stream
2024-10-22 13:47:05.608 [info] Start accepting UDP connections at [::]:3478 for :ejabberd_stun
2024-10-22 13:47:05.608 [info] Start accepting TCP connections at [::]:1883 for :mod_mqtt
2024-10-22 13:47:05.608 [info] Start accepting TCP connections at [::]:5280 for :ejabberd_http
...
Brand new ProcessOne and ejabberd web sites
We’re excited to unveil the redesigned ProcessOne website, crafted to better showcase our expertise in large-scale messaging across XMPP, MQTT, Matrix, and more. This update highlights our core mission of delivering scalable, reliable messaging solutions, with a fresh layout and streamlined structure that reflect our cutting-edge work in the field.
You now get a cleaner ejabberd page, offering quick access to important URLs for downloads, blog posts, and documentation.
Behind the scenes, we’ve transitioned from WordPress to Ghost, a move inspired by its efficient, user-friendly authoring tools and long-term maintainability. All previous blog content has been preserved, and with this new setup, we’re poised to deliver more frequent updates on messaging, XMPP, ejabberd, and related topics.
We welcome your feedback—join us on our new site to share your thoughts, or let us know about any issue or broken link!
Acknowledgments
We would like to thank the contributions to the source code, documentation, and translation provided for this release by:
- Holger Weiß for PubSub and other fixes
- Michael Slezak for mix release fix
- Guus der Kinderen for the XMPP Interop tests
- Sketch6580, updated the Chinese translation
- Wellington Uemura, updated the Portuguese (Brazil) translation
- Ermete Melchiorre, updated the Italian translation
- Mr. EddX, updated the Bulgarian translation
And also to all the people contributing in the ejabberd chatroom, issue tracker...
Improvements in ejabberd Business Edition
Customers of the ejabberd Business Edition, in addition to all those improvements and bugfixes, also get MUC support in mod_unread
.
ejabberd keeps a counter of unread messages per conversation using the mod_unread
module. This now also works in MUC rooms: each user can retrieve the number of unread messages in each of their rooms.
ChangeLog
This is a more detailed list of changes in this ejabberd release:
Miscelanea
ejabberd_c2s
: Optionally allow unencrypted SASL2ejabberd_system_monitor
: Handle call bygen_event:swap_handler
(#4233)ejabberd_http_ws
: Remove support for old websocket connection protocolejabberd_stun
: Omitauth_realm
log messageext_mod
: Handleinfo
message when contrib module transfers table ownershipmod_block_strangers
: Add feature announcement to disco-info (#4039)mod_mam
: Advertise XEP-0424 feature in server disco-info (#3340)mod_muc_admin
: Better handling of malformed jids insend_direct_invitation
commandmod_muc_rtbl
: Fix call togen_server:stop
(#4260)mod_privilege
: Support "IQ permission" from XEP-0356 0.4.1 (#3889)mod_pubsub
: Don't blindly echo PEP notificationmod_pubsub
: Skip non-delivery errors for local pubsub generated notificationsmod_pubsub
: Fall back to default plugin optionsmod_pubsub
: Fix choice of node config defaultsmod_pubsub
: Fix merging of default node optionsmod_pubsub
: Fix default node config parsingmod_register
: Support to block IPs in a vhost usingappend_host_config
(#4038)mod_s2s_bidi
: Add support for S2S Bidirectionalmod_scram_upgrade
: Add support for SCRAM upgrade tasksmod_vcard
: Return error stanza when storage doesn't support vcard update (#4266)mod_vcard
: Return explicit error stanza when user attempts to modify other's vcard- Minor improvements to support
mod_tombstones
(#2456) - Update
fast_xml
to useuse_maps
and remove obsolete elixir files - Update
fast_tls
andxmpp
to improve s2s fallback for invalid direct tls connections make-binaries
: Bump dependency versions: Elixir 1.17.2, OpenSSL 3.3.2, ...
Administration
ejabberdctl
: IfERLANG_NODE
lacks host, add hostname (#4288)ejabberd_app
: At server start, log Erlang and Elixir versions- MySQL: Fix column type in the schema update of
archive
table in schema update
Commands API
get_mam_count
: New command to get number of archived messages for an accountset_presence
: Return error when session not foundupdate
: Fix command output- Add
mam
andoffline
tags to the related purge commands
Code Quality
- Fix warnings about unused macro definitions reported by Erlang LS
- Fix Elvis report: Fix dollar space syntax
- Fix Elvis report: Remove spaces in weird places
- Fix Elvis report: Don't use ignored variables
- Fix Elvis report: Remove trailing whitespace characters
- Define the types of options that
opt_type.sh
cannot derive automatically ejabberd_http_ws
: Fix dialyzer warningsmod_matrix_gw
: Remove useless optionpersist
mod_privilege
: Replacetry...catch
with a clean alternative
Development Help
elvis.config
: Fix file syntax, set vim mode, disable many testserlang_ls.config
: Let it find paths, update to Erlang 26, enable crossrefhooks_deps
: Hide false-positive warnings aboutgen_mod
Makefile
: Add support formake elvis
when using rebar3.vscode/launch.json
: Experimental support for debugging with Neovim- CI: Add Elvis tests
- CI: Add XMPP Interop tests
- Runtime: Cache hex.pm archive from rebar3 and mix
Documentation
- Add links in top-level options documentation to their Docs website sections
- Document which SQL servers can really use
update_sql_schema
- Improve documentation of
ldap_servers
andldap_backups
options (#3977) mod_register
: Document behavior whenaccess
is set tonone
(#4078)
Elixir
- Handle case when elixir support is enabled but not available
- Start ExSync manually to ensure it's started if (and only if) Relive
mix.exs
: Fixmix release
error:logger
being regular and included application (#4265)mix.exs
: Remove fromextra_applications
the apps already defined indeps
(#4265)
WebAdmin
- Add links in user page to offline and roster pages
- Add new "MAM Archive" page to webadmin
- Improve many pages to handle when modules are disabled
mod_admin_extra
: Move some webadmin pages to their modules
Full Changelog
https://github.com/processone/ejabberd/compare/24.07...24.10
ejabberd 24.10 download & feedback
As usual, the release is tagged in the Git source code repository on GitHub.
The source package and installers are available in ejabberd Downloads page. To check the *.asc
signature files, see How to verify ProcessOne downloads integrity.
For convenience, there are alternative download locations like the ejabberd DEB/RPM Packages Repository and the GitHub Release / Tags.
The ecs
container image is available in docker.io/ejabberd/ecs and ghcr.io/processone/ecs. The alternative ejabberd
container image is available in ghcr.io/processone/ejabberd.
If you consider that you've found a bug, please search or fill a bug report on GitHub Issues.