> ## Content Index
> Fetch the complete content index at: https://www.process-one.net/llms.txt
> Use this file to discover other available public pages before exploring further.

# ejabberd 22.10
- URL: https://www.process-one.net/blog/ejabberd-22-10/
- Published: 2022-10-28T12:37:00.000Z
- Updated: 2024-09-16T12:37:52.000Z
- Description: This ejabberd 22.10 release includes six months of work, over 140 commits, including relevant improvements in MIX, MUC, SQL, and installers, and bug fixes as usual.
- Author: Jérôme Sautret

This version brings support for latest [MIX](https://xmpp.org/extensions/xep-0369.html?ref=process-one.net) protocol version, and significantly improves detection and recovery of SQL connection issues.

There are no breaking changes in SQL schemas, configuration, or commands API. If you develop an ejabberd module, notice two hooks have changed: `muc_subscribed` and `muc_unsubscribed`.

A more detailed explanation of those topics and other features:

## Erlang/OTP 19.3

You may remember than in the previous ejabberd release, [ejabberd 22.05](https://www.process-one.net/blog/ejabberd-22-05/), support for [Erlang/OTP](https://www.erlang.org/?ref=process-one.net) 25 was introduced, even if 24.3 is still recommended for stable deployments.

It is expected that around April 2023, GitHub Actions will remove Ubuntu 18 and it will not be possible to run automatic tests for ejabberd using Erlang 19.3, the lowest possible will be Erlang 20.0.

For that reason, the planned schedule is:

- **ejabberd 22.10**
  - Usage of Erlang 19.3 is **discouraged**
  - Anybody still using Erlang 19.3 is encouraged to upgrade to 24.3, or at least 20.0
- **ejabberd 23.05 (or later)**
  - Support for Erlang 19.3 is **deprecated**
  - Erlang requirement softly increased in `configure.ac`
  - Announce: no warranty ejabberd can compile, start or pass the Common Tests suite using Erlang 19.3
  - Provide instructions for anybody to manually re-enable it and run the tests
- **ejabberd 23.xx+1 (or later)**
  - Support for Erlang 19.3 is **removed** completely in the source code

## New `log_burst_limit_*` options

Two options were added in [#3865](https://github.com/processone/ejabberd/issues/3865?ref=process-one.net) to configure logging limits in case of high traffic:

- `log_burst_limit_window_time` defines the time period to rate-limit log messages by.
- `log_burst_limit_count` defines the number of messages to accept in that time period before starting to drop them.

## Support `ERL_DIST_PORT` option to work without epmd

The option `ERL_DIST_PORT` is added to `ejabberdctl.cfg`, disabled by default.

When this option is set to a port number, the Erlang node will not start [epmd](https://docs.ejabberd.im/admin/guide/security/?ref=process-one.net#epmd) and will not listen in a range of ports for erlang connections (typically used for [ejabberdctl](https://docs.ejabberd.im/admin/guide/managing/?ref=process-one.net#ejabberdctl) and for [clustering](https://docs.ejabberd.im/admin/guide/clustering/?ref=process-one.net#clustering-setup)). Instead, the erlang node will simply listen in the configured port number.

Please note:

- Erlang/OTP 23.1 or higher is required to use `ERL_DIST_PORT`
- `make relive` doesn’t support `ERL_DIST_PORT`, neither rebar3 nor elixir
- To start several ejabberd nodes in the same machine, configure a different port in each node

## Support version macros in `captcha_cmd` option

Support for the `@VERSION@` and `@SEMVER@` macros was added to the `captcha_cmd` option in [#3835](https://github.com/processone/ejabberd/issues/3835?ref=process-one.net).

Those macros are useful because the example captcha scripts are copied in a path like `ejabberd-VERSION/priv/bin` that depends on the ejabberd version number and changes for each release. Also, depending on the install method (rebar3 or Elixir’s mix), that `VERSION` may be in `XX.YY` or in `SEMVER` format (respectively).

Now, it’s possible to configure like this:

```yaml
captcha_cmd: /opt/ejabberd-@VERSION@/lib/ejabberd-@SEMVER@/priv/bin/captcha.sh

```

## Hook Changes

Two hooks have changed: `muc_subscribed` and `muc_unsubscribed`. Now they get the packet and room state, and can modify the sent packets. If you write source code that adds functions to those hooks, please notice that previously they were ran like:

```erlang
ejabberd_hooks:run(muc_subscribed, ServerHost, [ServerHost, Room, Host, BareJID]);

```

and now they are ran like this:

```erlang
{Packet2a, Packet2b} = ejabberd_hooks:run_fold(muc_subscribed, ServerHost, {Packet1a, Packet1b},
[ServerHost, Room, Host, BareJID, StateData]),

```

being Packet1b a copy of Packet1a without the `jid` attribute in the `muc_subscribe` element.

## Translations Updates

Several translations were improved: Ukrainian, Chinese (Simplified), French, German, Russian, Portuguese (Brazil), Spanish and Catalan. Thanks to all this people that contribute in [ejabberd at Weblate](https://hosted.weblate.org/projects/ejabberd/ejabberd-po/?ref=process-one.net)!

## WebAdmin page for external modules

A new page is added in ejabberd’s WebAdmin to view available external modules, update their source code, install, upgrade and remove them. All this is equivalent to what was already available using API commands from the [modules tag](https://docs.ejabberd.im/developer/ejabberd-api/admin-tags/?ref=process-one.net#modules).

Many modules in the [ejabberd-contrib](https://github.com/processone/ejabberd-contrib?ref=process-one.net) git repository have been improved, and their documentation updated. Additionally, those modules are now automatically tested, at least compilation, installation and static code analysis.

## Documentation Improvements

In addition to the normal improvements and fixes, two sections in the [ejabberd Documentation](https://docs.ejabberd.im/?ref=process-one.net) are greatly improved:

- [ejabberd for Elixir Developers](https://docs.ejabberd.im/developer/extending-ejabberd/elixir/?ref=process-one.net)
- [Getting Started with MIX](https://docs.ejabberd.im/tutorials/mix-010/?ref=process-one.net)

## ChangeLog

### General

- Add `log_burst_limit_*` options ([#3865](https://github.com/processone/ejabberd/issues/3865?ref=process-one.net))
- Support `ERL_DIST_PORT` option to work without epmd
- Auth JWT: Catch all errors from `jose_jwt:verify` and log debugging details ([#3890](https://github.com/processone/ejabberd/issues/3890?ref=process-one.net))
- CAPTCHA: Support `@VERSION@` and `@SEMVER@` in `captcha_cmd` option ([#3835](https://github.com/processone/ejabberd/issues/3835?ref=process-one.net))
- HTTP: Fix unix socket support ([#3894](https://github.com/processone/ejabberd/issues/3894?ref=process-one.net))
- HTTP: Handle invalid values in `X-Forwarded-For` header more gracefuly
- Listeners: Let module take over socket
- Listeners: Don’t register listeners that failed to start in config reload
- `mod_admin_extra`: Handle empty roster group names
- `mod_conversejs`: Fix crash when mod\_register not enabled ([#3824](https://github.com/processone/ejabberd/issues/3824?ref=process-one.net))
- `mod_host_meta`: Complain at start if listener is not encrypted
- `mod_ping`: Fix regression on `stop_ping` in clustering context ([#3817](https://github.com/processone/ejabberd/issues/3817?ref=process-one.net))
- `mod_pubsub`: Don’t crash on command failures
- `mod_shared_roster`: Fix cache invalidation
- `mod_shared_roster_ldap`: Update roster\_get hook to use `#roster_item{}`
- `prosody2ejabberd`: Fix parsing of scram password from prosody

### MIX

- Fix MIX’s filter\_nodes
- Return user jid on join
- `mod_mix_pam`: Add new MIX namespaces to disco features
- `mod_mix_pam`: Add handling of IQs with newer MIX namespaces
- `mod_mix_pam`: Do roster pushes on join/leave
- `mod_mix_pam`: Parse sub elements of the mix join remote result
- `mod_mix_pam`: Provide MIX channels as roster entries via hook
- `mod_mix_pam`: Display joined channels on webadmin page
- `mod_mix_pam`: Adapt to renaming of `participant-id` from mix\_roster\_channel record
- `mod_roster`: Change hook type from `#roster{}` to `#roster_item{}`
- `mod_roster`: Respect MIX “ setting
- `mod_roster`: Adapt to change of mix\_annotate type to boolean in roster\_query
- `mod_shared_roster`: Fix wrong hook type `#roster{}` (now `#roster_item{}`)

### MUC:

- Store role, and use it when joining a moderated room ([#3330](https://github.com/processone/ejabberd/issues/3330?ref=process-one.net))
- Don’t persist `none` role ([#3330](https://github.com/processone/ejabberd/issues/3330?ref=process-one.net))
- Allow MUC service admins to bypass max\_user\_conferences limitation
- Show allow\_query\_users room option in disco info ([#3830](https://github.com/processone/ejabberd/issues/3830?ref=process-one.net))
- Don’t set affiliation to `none` if it’s already `none` in `mod_muc_room:process_item_change/3`
- Fix mucsub unsubscribe notification payload to have muc\_unsubcribe in it
- Allow muc\_{un}subscribe hooks to modify sent packets
- Pass room state to muc\_{un}subscribed hook
- The archive\_msg export fun requires MUC Service for room archives
- Export `mod_muc_admin:get_room_pid/2`
- Export function for getting room diagnostics

### SQL

- Handle errors reported from begin/commit inside transaction
- Make connection close errors bubble up from inside sql transaction
- Make first sql reconnect wait shorter time
- React to sql driver process exit earlier
- Skip connection exit message when we triggered reconnection
- Add syntax\_tools to applications, required when using ejabberd\_sql\_pt ([#3869](https://github.com/processone/ejabberd/issues/3869?ref=process-one.net))
- Fix mam delete\_old\_messages\_batch for sql backend
- Use `INSERT ... ON DUPLICATE KEY UPDATE` for upsert on mysql
- Update mysql library
- Catch mysql connection being close earlier

### Compile

- `make all`: Generate start scripts here, not in `make install` ([#3821](https://github.com/processone/ejabberd/issues/3821?ref=process-one.net))
- `make clean`: Improve this and “distclean”
- `make deps`: Ensure deps configuration is ran when getting deps ([#3823](https://github.com/processone/ejabberd/issues/3823?ref=process-one.net))
- `make help`: Update with recent changes
- `make install`: Don’t leak DESTDIR in files copied by ‘make install’
- `make options`: Fix error reporting on OTP24+
- `make update`: configure also in this case, similarly to `make deps`
- Add definition to detect OTP older than 25, used by ejabberd\_auth\_http
- Configure eimp with mix to detect image convert properly ([#3823](https://github.com/processone/ejabberd/issues/3823?ref=process-one.net))
- Remove unused macro definitions detected by rebar3\_hank
- Remove unused header files which content is already in xmpp library

### Container

- Get ejabberd-contrib sources to include them
- Copy `.ejabberd-modules` directory if available
- Do not clone repo inside container build
- Use `make deps`, which performs additional steps ([#3823](https://github.com/processone/ejabberd/issues/3823?ref=process-one.net))
- Support `ERL_DIST_PORT` option to work without epmd
- Copy `ejabberd-docker-install.bat` from docker-ejabberd git and rename it
- Set a less frequent healthcheck to reduce CPU usage ([#3826](https://github.com/processone/ejabberd/issues/3826?ref=process-one.net))
- Fix build instructions, add more podman examples

### Installers

- make-binaries: Include CAPTCHA script with release
- make-binaries: Edit rebar.config more carefully
- make-binaries: Fix linking of EIMP dependencies
- make-binaries: Fix GitHub release version checks
- make-binaries: Adjust Mnesia spool directory path
- make-binaries: Bump Erlang/OTP version to 24.3.4.5
- make-binaries: Bump Expat and libpng versions
- make-packages: Include systemd unit with RPM
- make-packages: Fix permissions on RPM systems
- make-installers: Support non-root installation
- make-installers: Override code on upgrade
- make-installers: Apply cosmetic changes

### External modules

- ext\_mod: Support managing remote nodes in the cluster
- ext\_mod: Handle correctly when COMMIT.json not found
- Don’t bother with COMMIT.json user-friendly feature in automated user case
- Handle not found COMMIT.json, for example in GH Actions
- Add WebAdmin page for managing external modules

### Workflows Actions

- Update workflows to Erlang 25
- Update workflows: Ubuntu 18 is deprecated and 22 is added
- CI: Remove syntax\_tools from applications, as fast\_xml fails Dialyzer
- Runtime: Add Xref options to be as strict as CI

### Full Changelog

[https://github.com/processone/ejabberd/compare/22.05…22.10](https://github.com/processone/ejabberd/compare/22.05...22.10?ref=process-one.net)

## ejabberd 22.10 download & feedback

As usual, the release is tagged in the Git source code repository on [GitHub](https://github.com/processone/ejabberd?ref=process-one.net).

The source package and installers are available in [ejabberd Downloads](https://www.process-one.net/en/ejabberd/downloads/) page. To check the `*.asc` signature files, see [How to verify ProcessOne downloads integrity](https://www.process-one.net/blog/verifying%5Fprocess%5Fone%5Fdownloads%5Fintegrity/).

For convenience, there are alternative download locations like the [ejabberd DEB/RPM Packages Repository](https://repo.process-one.net/?ref=process-one.net) and the [GitHub Release / Tags](https://github.com/processone/ejabberd/tags?ref=process-one.net).

The Docker image is in [Docker Hub](https://hub.docker.com/r/ejabberd/ecs/?ref=process-one.net), and there’s an alternative Container image in [GitHub Packages](https://github.com/processone/ejabberd/pkgs/container/ejabberd?ref=process-one.net).

If you suspect that you’ve found a bug, please search or fill a bug report on [GitHub Issues](https://github.com/processone/ejabberd/issues?ref=process-one.net).