> ## 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 17.11 – Happy Birthday ejabberd !
- URL: https://www.process-one.net/blog/ejabberd-17-11-happy-birthday-ejabberd/
- Published: 2017-11-23T09:24:00.000Z
- Updated: 2024-09-19T08:27:18.000Z
- Description: Ejabberd has been the leading choice to serve reliable XMPP domains for 15 years, and we are happy to announce yet another great new version of your favorite server.
- Author: Jérôme Sautret

This version includes great new features from Google Summer of Code, many improvements and a lot of bug fixes. By the way, ejabberd is “Compliance Suite 2018” compatible now (see XEP-0387) !

## New features

### ACME Support

Google Summer of Code 2017 was a big success for ejabberd project. In this context, Konstantinos Kallas contributed support for the “Let’s Encrypt” ACME protocol, which is now part of ejabberd. The code was reviewed and improved by ejabberd team to ensure we meet the same standard of quality you are used to.

The objective of the ACME protocol is to make it possible to automatically obtain trusted certificates, without any human intervention. So, the main functionality of the implementation is acquiring and managing the aforementioned certificates.

All details are available on [pull request #1959 on github](https://github.com/processone/ejabberd/pull/1959?ref=process-one.net).

Many thanks to Konstantinos Kallas for contributing this great feature ! Thanks to Evgeny Khramtsov for being the ProcessOne mentor.

### Introduce ‘certfiles’ global option

The option is supposed to replace existing options ‘c2s\_certfile’, ‘s2s\_certfile’ and ‘domain\_certfile’. The option accepts a list of file paths (optionally with wildcards “\*”) containing either PEM certificates or PEM private keys. At startup, ejabberd sorts the certificates, finds matching private keys and rebuilds full certificates chains which can be used by `fast_tls` driver.

Example:

```
certfiles:
  - "/etc/letsencrypt/live/example.org/*.pem"
  - "/etc/letsencrypt/live/example.com/*.pem"

```

### Allow writing custom modules in own path

In ejabberdctl.cfg, add this parameter to EJABBERD\_OPTS

```
external_beams /path/to/ebin

```

Then, all beams /path/to/ebin/\*.beam will be known by `ejabberd_config` at startup. This makes ejabberd able to load your own modules. So you can embed ejabberd as a dependency to your Elixir project, or manage your own backend modules, without messing with ejabberd installation.

### Use new API for IQ routing

Functions `ejabberd_local:route_iq/2,3` are now deprecated: `ejabberd_router:route_iq/2,3,4` should be used instead.

## Improvements

### Build with host dependencies

Building ejabberd takes care of runtime dependencies, and some of them are even needed in order to build ejabberd. For several packaging systems, a package is not allowed to handles dependencies by itself. This makes ejabberd hard to package and maintain on these systems.

Configuring ejabberd with option ‘–enable-system-deps’ help to use hosts libraries to build ejabberd, and avoid ejabberd to handle dependencies by itself. This option has been improved to cover most needs and fix pending issues. Packagers should really have a look at this option to simplify packaging when needed.

### PubSub

We are preparing work to improve the PEP implementation in ejabberd. In that regards we already fixed few glitches and improved XEP-0163 coverage.

We also added support of SQL export, to ease migration of your existing PubSub database from Mnesia to an SQL backend.

At last, we fixed the use of historical ‘hometree’ plugin, which now allows to propagate publications in the nodes tree to cover simple needs around nodes hierarchy.

### Database

As an experimental feature, if you compile from sources with option ‘–enable-new-sql-schema’, an extra server\_host columns will be used in your SQL tables. This feature allows to use the same database for all your vhosts. See ‘ejabberdctl update\_sql’ command to update your sql schema in order to try this feature.

## Upgrade

If you’re upgrading from a previous version, you must follow the instructions. More details in [documentation](https://docs.ejabberd.im/admin/upgrade/?ref=process-one.net), see upgrade notes.

## Changes

### Admin

- Omit “ProtectSystem” option from systemd unit
- Log warnings for c2s/s2s certfile option
- Log a message when a user gets registered
- ejabberdctl: Fix ‘read’ syntax for non-bash shells
- Fix renew\_certificates ejabberdctl command
- Unregister commands when stopping node only if it’s last one
- Halt ejabberd if the top supervisor fails to start

### Build

- Avoid badarg error when running get-deps before ./configure has created src/ejabberd.app
- Fix sed invocation that was incompatible with FreeBSD’s sed
- Makefile.in: Fix “make clean && make”
- Improve –enable-system-deps
- Install binaries with 755 permissions
- Install eimp binary with +x attribute
- Remove find-outdated-deps script, we have better replacement for it

### Databases

- Allow export command regardless of the configured db\_type
- Add SQL\_INSERT macro and update SQL queries to use server\_host field
- Update SQL archive index to match mysql.sql
- mod\_muc: Use correct table field name in sql query

### MAM

- Always strip stanza IDs
- Announce support for stanza IDs
- Don’t store from ‘sm\_receive\_packet’ hook
- Fix mod\_mam reloading
- Ignore non-message stanzas earlier
- Improve handling of forked messages
- Make sure a stanza ID is always added
- Make sure archived message isn’t bounced
- Prepare version 0.6.1 of XEP-0313 (MAM) support

### MUC

- Properly store subject element
- Resend presences and history if presence possesses x MUC element
- Send presence-unavailable when expulsing a participant
- Add mucsub event for subscribers list changes
- Optimize muc subscriptions handling
- Show real jid in mucsub subscription change events

### PubSub

- Add basic PubSub meta-data support
- Rewrite pubsub export to sql
- Cleanup tree requests, rename pubsub\_node.type to pubsub\_node.plugin
- Fix select\_type race on plugin\_init
- Implement parentnodes seek for hometree
- Delete cached item on node removal
- Fix delete item from unregistered user
- Cleanup pubsub subscriptions quering, fix pep case
- PEP services must send notifications to the account owner

### Push

- Avoid notification duplicates
- Add support for SQL storage
- Add export from Mnesia database to SQL file
- Don’t store xdata() in Mnesia table
- Simplify backend interface

### Miscelanea

- Mix \_xmpp-server and \_xmpps-server SRV records (XEP-0368)
- HTTP: Don’t crash when Host header is missing
- HTTP fileserver: Accept routes in Host header and map them to vhosts
- mod\_register\_web: Better handle mobile devices in CSS
- mod\_stream\_mgmt: Improve logging on timeout
- mod\_stream\_mgmt: Increase ‘max\_ack\_queue’ default
- Updated Catalan, Chinese, Czech, French, Galician, German, Greek, Hebrew, Russian, Spanish translations
- WebAdmin: Don’t include CSS, javascript and image data directly in the code

## Feedback

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

The source package and binary installers are available at [ejabberd XMPP & MQTT server download page](https://www.process-one.net/en/ejabberd/downloads/).

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