Prosodical Thoughts

News, announcements and thoughts from the Prosody IM team

Prosody 0.11.0 released

by The Prosody Team
Translations available: [es]  [ru]  [de]  [fr] 
Tags: release

We are pleased to announce the eagerly anticipated release of Prosody 0.11.0!

This is the first release in the 0.11 series, which will now be considered the stable series. With over 2000 commits this release couldn’t have been achieved without the help from our many contributors, testers and other community members. Thanks!

Highlights

If you’re excited about 0.11.0, it’s surely going to be about one or both of the components that have received extensive work for this release: MUC and pubsub.

These components together implement two of the most extensive XEPs that XMPP currently provides. Although previous releases already had MUC and pubsub support, both are quite complex and after our initial implementation experience they deserved a revamp to improve XEP coverage, code structure and scalability.

There are many other changes, improvements, bug fixes, performance enhancements that have gone into this release. The main topics are discussed below.

Notable features

Chatroom improvements

One of the largest changes in this release is a near rewrite of our MUC (Multi-User Conference) code. This ambitious project was begun several years ago by daurnimator who developed the majority of the new code.

Although the most significant changes are internal, this has allowed us to more easily add new features and improve scalability of MUC services (this version of the MUC module is powering Jitsi Meet as well as other services with hundreds of thousands of rooms).

The new improvements are too many to list, but some highlights are listed here.

Improved configuration

Our configuration form has been revamped, providing a neater layout and more user-friendly option names.

Room configuration dialog box

We are looking forward to supporting translations in a future release!

Message archiving

We added support for archiving and querying past messages in a MUC using the XEP-0313 (MAM) protocol. This allows a client to display messages that may have happened in a room while it was absent, for example.

Nickname reservation

To prevent confusion, Prosody can now enforce nickname reservations. This prevents impersonation of someone when they are not in the room. By default only owners/admins of a room may do this (when making the user a member of the room), but it may also be configured to allow users to register their own nicknames and become members too.

Pubsub protocol

Our pubsub implementation has grown a lot in this release. Link Mauve contributed node and item persistence, which means data can be stored on disk instead of in memory, and is not lost when the server restarts.

We also implemented support for node configuration, and affiliation management, needed for advanced access control and finally, support for the infamous ‘publish-options’, which allows clients to securely publish items with the access controls they require.

PEP

Our old PEP code was a separate limited implementation of pubsub that implemented everything clients needed in 2009. Over the years more and more pubsub features have been demanded for PEP, as it became more widely used. It became obvious that PEP needed to provide all pubsub features, and should use the same code.

Florian Zeitz began this work by creating a new ‘mod_pep_plus’ module. This module has now replaced the original ‘mod_pep’ and is now the default PEP implementation.

This brings support for OMEMO with non-contacts in Conversations and other clients. It also allows clients to use PEP for storing bookmarks and other data.

New vCard format

This release brings support for the newer version of the vCard specification described in XEP-0292, which includes support for various new properties.

It is also stored in PEP, allowing full access control (e.g. choose if your vCard is public, or available only to contacts).

Few (if any) clients currently support vCard4, but the older ‘vcard-temp’ protocol is still supported by using mod_vcard_legacy which maps transparently to the newer format, until clients upgrade.

Mobile battery life optimizations

This release brings in some community modules that aim to improve battery life for mobile clients. Continuous traffic such as contact status changes and chat room messages can prevent a phone from switching into low-power modes. However this data is typically unimportant, especially when the phone screen is off or the app is in the background.

Clients supporting XEP-0352, such as Conversations, can inform the server when the app is in the background, and Prosody will optimise the connection traffic accordingly.

This is implemented in mod_csi_simple.

Internal changes

Asynchronous APIs

A lot of work was put into our internal asynchronous API, improving robustness and adding tests. Eventually this API will be used to give performance enhancements on large services.

With these changes this release has experimental support for asynchronous authentication and storage plugins. However it will not be officially supported in this release, as there are still some big changes lined up for future versions.

Automated tests

One of the largest improvements in the project recently has been the growing number of automated tests. Previous releases were almost entirely tested manually, with very few automated tests available. We now have a large suite of tests running after every change. More details about this in a future post!

Native epoll support

This new experimental network backend provides an alternative to using libevent. The advantages are that it is smaller and simpler, albeit Linux-only.

Upgrading from previous releases

If you are upgrading from a previous release, we highly recommend reading the release notes

A couple of major changes are listed here.

MySQL upgrade

Users of MySQL need to update their schema before Prosody 0.11 will run. This is to fix a couple of bugs that prevent new PEP features from working.

After upgrade run: prosodyctl mod_storage_sql upgrade

Lua 5.2

Prosody has traditionally used Lua 5.1. As we announced back when 0.10 was released, we are on the path to updating to more recent Lua versions.

The recommended Lua version for 0.11 is Lua 5.2, while Lua 5.1 is still supported for the platforms that need it. However the 0.11.x series is the last series that will still support Lua 5.1 (and by extension, LuaJIT).

Tutorials

If you are planning to set up Prosody for the first time, the Homebrew Server Club have published a great tutorial on setting up a modern XMPP server on Debian, using Prosody 0.11.

Download

As usual, download instructions for many platforms can be found on our download page

If you have any questions, comments or other issues with this release, let us know!

Translations