> ## 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 23.01
- URL: https://www.process-one.net/blog/ejabberd-23-01/
- Published: 2023-01-17T13:27:00.000Z
- Updated: 2024-09-16T12:28:14.000Z
- Description: Almost three months after the previous release, ejabberd 23.01 includes many bug fixes, several improvements and some new features. A new module, mod_mqtt_bridge, can be used to replicate changes to MQTT topics between local and remote servers.
- Author: Jérôme Sautret

A more detailed explanation of those topics and other features:

## Erlang/OTP 19.3 discouraged

Remember that support for Erlang/OTP 19.3 is discouraged, and will be removed in a future release. Please upgrade to Erlang/OTP 20.0 or newer. Check more details in the [ejabberd 22.10 release announcement](https://www.process-one.net/blog/ejabberd-22-10/).

## New MQTT bridge

This new module allows synchronizing topic changes between local and remote servers. It can be configured to replicate local changes to remote server, or can subscribe to topics on remote server and update local copies when they change.

When connecting to a remote server you can use native or websocket encapsulated protocol, and you can connect using both v4 and v5 protocol. It can authenticate using username/password pairs or with client TLS certificates.

## New Hooks

Regarding MQTT support, there are several new hooks:

- `mqtt_publish`: New hook for MQTT publish event
- `mqtt_subscribe` and `mqtt_unsubscribe`: New hooks for MQTT subscribe & unsubscribe events

## New option `log_modules_fully`

The [loglevel](https://docs.ejabberd.im/admin/configuration/toplevel/?ref=process-one.net#loglevel) top-level option specifies the verbosity of log files generated by ejabberd.

If you want some specific modules to log everything, independently from whatever value you have configured in `loglevel`, now you can use the new [log\_modules\_fully](https://docs.ejabberd.im/admin/configuration/toplevel/?ref=process-one.net#log%5Fmodules%5Ffully) option.

For example, if you are investigating some problem in `ejabberd_sm` and `mod_client_state`:

```yaml
loglevel: warning
log_modules_fully: [ejabberd_sm, mod_client_state]

```

(This option works only on systems with Erlang 22 or newer).

## Changes in option `outgoing_s2s_families`

The [outgoing\_s2s\_families](https://docs.ejabberd.im/admin/configuration/toplevel/?ref=process-one.net#outgoing-s2s-families) top-level option specifies which address families to try, in what order.

The default value has now been changed to try IPv6 first, as servers are within data centers where IPv6 is more commonly enabled (contrary to clients). And if it’s not present, then it’ll just fall back to IPv4.

By the way, this option is obsolete and irrelevant when using ejabberd 23.01 and Erlang/OTP 22, or newer versions of them.

## Changes in option `captcha_cmd`

The [captcha\_cmd](https://docs.ejabberd.im/admin/configuration/toplevel/?ref=process-one.net#captcha-cmd) top-level option specifies the full path to a script that can generate a CAPTCHA image. Now this option may specify an Erlang module name, which should implement a function to generate a CAPTCHA image.

ejabberd does not include any such module, but there are two available in the ejabberd-contrib repository that you can install and try: [mod\_ecaptcha](https://github.com/processone/ejabberd-contrib/tree/master/mod%5Fecaptcha?ref=process-one.net) and [mod\_captcha\_rust](https://github.com/processone/ejabberd-contrib/tree/master/mod%5Fcaptcha%5Frust?ref=process-one.net).

## DOAP file

The protocols implemented or supported by ejabberd are defined in the corresponding source code modules since ejabberd 15.06\. Until now, only the XEP number and supported version were tracked. Since now, it’s possible to document what ejabberd version first implemented it, the implementation status and an arbitrary comment.

That information until now was only used by the script [tools/check\_xep\_versions.sh](https://github.com/processone/ejabberd/blob/master/tools/check%5Fxep%5Fversions.sh?ref=process-one.net). A new script is added, [tools/generate-doap.sh](https://github.com/processone/ejabberd/blob/master/tools/generate-doap.sh?ref=process-one.net), to generate a DOAP file with that information. A new target is added to Makefile: `make doap`.

And that DOAP file is now published as `ejabberd.doap` in the git repository. That file is read by the XMPP.org website to show ejabberd’s protocols, see [XMPP Servers: ejabberd](https://xmpp.org/software/servers/ejabberd/?ref=process-one.net).

## VSCode

Support for Visual Studio Code and variants is vastly improved. Thanks to the [Erlang LS VSCode extension](https://github.com/erlang-ls/vscode?ref=process-one.net), the ejabberd git repository includes support for developing, compiling and debugging ejabberd with Visual Studio Code, VSCodium, Coder’s code-server and Github Codespaces.

See more details in the [ejabberd Docs: VSCode](https://docs.ejabberd.im/developer/vscode/?ref=process-one.net) page.

## ChangeLog

### General

- Add `misc:uri_parse/2` to allow declaring default ports for protocols
- CAPTCHA: Add support to define module instead of path to script
- Clustering: Handle `mnesia_system_event mnesia_up` when other node joins this ([#3842](https://github.com/processone/ejabberd/issues/3842?ref=process-one.net))
- ConverseJS: Don’t set i18n option because Converse enforces it instead of browser lang ([#3951](https://github.com/processone/ejabberd/issues/3951?ref=process-one.net))
- ConverseJS: Try to redirect access to files `mod_conversejs` to CDN when there is no local copies
- ext\_mod: compile C files and install them in ejabberd’s `priv`
- ext\_mod: Support to get module status from Elixir modules
- make-binaries: reduce log output
- make-binaries: Bump zlib version to 1.2.13
- MUC: Don’t store mucsub presence events in offline storage
- MUC: `hibernation_time` is not an option worth storing in room state ([#3946](https://github.com/processone/ejabberd/issues/3946?ref=process-one.net))
- Multicast: Jid format when `multicastc` was cached ([#3950](https://github.com/processone/ejabberd/issues/3950?ref=process-one.net))
- mysql: Pass `ssl` options to mysql driver
- pgsql: Do not set `standard_conforming_strings` to `off` ([#3944](https://github.com/processone/ejabberd/issues/3944?ref=process-one.net))
- OAuth: Accept `jid` as a HTTP URL query argument
- OAuth: Handle when client is not identified
- PubSub: Expose the `pubsub#type` field in `disco#info` query to the node ([#3914](https://github.com/processone/ejabberd/issues/3914?ref=process-one.net))
- Translations: Update German translation

### Admin

- `api_permissions`: Fix option crash when doesn’t have `who:` section
- `log_modules_fully`: New option to list modules that will log everything
- `outgoing_s2s_families`: Changed option’s default to IPv6, and fall back to IPv4
- Fix bash completion when using Relive or other install methods
- Fix portability issue with some shells ([#3970](https://github.com/processone/ejabberd/issues/3970?ref=process-one.net))
- Allow admin command to subscribe new users to `members_only` rooms
- Use alternative `split/2` function that works with Erlang/OTP as old as 19.3
- Silent warning in OTP24 about not specified `cacerts` in SQL connections
- Fix compilation warnings with Elixir 1.14

### DOAP

- Support extended `-protocol` erlang attribute
- Add extended RFCs and XEP details to some protocol attributes
- `tools/generate-doap.sh`: New script to generate DOAP file, add `make doap` ([#3915](https://github.com/processone/ejabberd/issues/3915?ref=process-one.net))
- `ejabberd.doap`: New DOAP file describing ejabberd supported protocols

### MQTT

- Add MQTT bridge module
- Add support for certificate authentication in MQTT bridge
- Implement reload in MQTT bridge
- Add support for websockets to MQTT bridge
- Recognize ws5/wss5 urls in MQTT bridge
- `mqtt_publish`: New hook for MQTT publish event
- `mqtt_(un)subscribe`: New hooks for MQTT subscribe & unsubscribe events

### VSCode

- Improve `.devcontainer` to use use devcontainer image and `.vscode`
- Add `.vscode` files to instruct VSCode how to run ejabberd
- Add Erlang LS default configuration
- Add Elvis default configuration

### Full Changelog

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

## ejabberd 23.01 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).