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!
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.
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.
Our configuration form has been revamped, providing a neater layout and more user-friendly option names.
We are looking forward to supporting translations in a future release!
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.
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.
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.
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
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.
This is implemented in
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.
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.
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
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).
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.
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!
- es: Prosody 0.11.0 publicado
- ru: Prosody 0.11.0 released
- de: Prosody 0.11.0 veröffentlicht
- fr: Sortie de Prosody 0.11.0