-
chevron_right
Movim is officially dropping support for MySQL
️ It is too difficult to maintain compatibility with all the quirks and specificity of this database
MySQL was already broken for a while (migrations not running, broken queries). Don't worry we are still fully compatible with PostgreSQL (that is the recommended one) and MariaDB. You can find those two databases in all the major distributions
This will greatly simplify and streamline the development of the project
#movim #migration #postgresql #mariadb #mysql #database
Timothée Jaussoin • pubsub.movim.eu / Movim • 22 April
-
chevron_right
Good news everyone, Movim 0.30 Encke is there
Timothée Jaussoin • pubsub.movim.eu / Movim • 4 April • 4 minutes • 3 visibility
- One to allow declaring an SFU server in a Muji Call
- One to allow chatrooms to have permanent call rooms to join
-
chevron_right
Today Movim just reached 10K commits
, and this year we will celebrate the 15th anniversary of the project
The upcoming 0.30 will also be a huge milestone with plenty of exciting features, stay tuned
#milestone #release #birthday #anniversary #xmpp #movim
Timothée Jaussoin • pubsub.movim.eu / Movim • 27 March edit
-
chevron_right
Movim 0.29.2 is here
Timothée Jaussoin • pubsub.movim.eu / Movim • 17 February edit • 1 minute
-
chevron_right
Movim 0.29.1 is out, time to upgrade!
Timothée Jaussoin • pubsub.movim.eu / Movim • 26 January • 1 minute
- When viewing Stories between different browsers on the same connected account the "viewed" synchronization is now working properly.
- It is now possible to publish Stories without having a camera enabled (or no camera at all), you'll then be able to just pick an image file from your device gallery.
- The play/pause buggy feature was fixed with a new timer (which was also used in the Chat dictaphone fixing some recording timer problems).
- Close the Stories viewer using the previous button or Esc key.
-
chevron_right
Everyone was Matt, a post-mortem
Timothée Jaussoin • pubsub.movim.eu / Movim • 9 October, 2024 edit • 3 minutes
-
chevron_right
Movim 0.28 Tempel and the Movim Live plan
Timothée Jaussoin • pubsub.movim.eu / Movim • 24 September, 2024 • 3 minutes
Only a few months after the previous version here comes Movim 0.30, codename Encke ☄️
This release is actually way bigger than you might think! Indeed, during half a year a lot of work was poured into the part II of the Movim Live project that has been the biggest evolution in Movim for many years. This side project was finally merged and stabilized in the main branch and we are proud to unveil it to you 🤩.
Movim Live, Part II
Funded by NLNet, the Movim Live project's aim is to bring a modern and complete stack of video-call features to Movim and to create a strong alternative to the other proprietary and centralized platforms.
The Part I goal was to modernize the existing one-to-call call stack. Part II was to bring multi-participant calls, and we did it!
How was it done?
Movim is now implementing XEP-0272: Multiparty Jingle (Muji) combined with XEP-0482: Call Invites. The first XMPP extension, called Muji, allows a user to join a temporary chatroom and initiate an audio or video call with any of the participants inside it. The second one allows this user to be invited or invite contacts to join this "Muji Chatroom".
Another client is already implementing those two XEPs, Dino, and it's actually the first time that we have two clients on totally different stacks (one is a desktop client, the other one a web application) that can do multi-participant calls on a standard protocol.
How can I create a group call in Movim?
The flow is quite close to a one-to-one call, except that you start the call in one of your group chats.
The group call will then appear in your chatroom list, similar to what you can find on Discord. The other participants will then get an invitation and will be able to join the group call once their camera and microphone are set up correctly.
What can I do in a group call?
Once you're in, Movim offers a couple of nice features to enjoy the call.
You can toggle between the grid view and the "active-speaker" view (where the actively speaking person is put in front). When using the grid view, the speaking person's microphone is slightly bigger and blinking in green.
The existing screen-sharing feature has also been ported to group calls, allowing you to share your screen with the others. More work will be done on the part to allow you to stream your screen and webcam simultaneously and use Movim as a nice stream-gaming platform or live-conference tool in the future ✨.
A lot of work was also spent on ensuring a proper integration of the call in the user interface and the user flows. When you're in the chatroom, the group call is integrated into the chat view, and when you leave the discussion, it moves automatically in the corner. You can also put the group call in full screen at any time.
And as always, you can toggle your webcam and microphone off any time.
Movim Live, Part III
So what's next? In the upcoming and last part Movim is actively working with the ProcessOne team on a new set of XMPP extensions to bring massively scalable group calls in XMPP.
The current Muji flow is to initiate a one-to-one call with each of the Muji call participants, as you can see it doesn't scale that much. An SFU, or Selective Forwarding Unit allows you to call a specialized server, send your video and audio streams and receive the other participants streams in return.
This should require standardizing two new XEPs:
The current flow is an "invite-based" one; this means that once everyone leaves the group call, it is automatically destroyed. We would like to allow chatroom admins to create one or several "call rooms," name them, and allow their users to join and leave the calls at their convenience. This will bring a more modern experience and bring many new ways of interacting with audio and video calls in XMPP.
Hopefully this Part III should be delivered in the upcoming months; stay tuned!
What else?
The 0.30 is also bringing some other exciting features 🤩.
The reactions are now displayed in the detailed message view.
Some parts of the UI were modernized and simplified, such as the emoji picker view or the navigation bars.
Movim is now supporting Unicode 15.1 with plenty of new emojis to use 🥳.
When one of your contacts is publishing a new Story his avatar will change, allowing you to easily open it.
The Movim UI, and especially color management, was also deeply refactorized and simplified. The Light and Dark modes are better looking and an exciting Accent Color feature is now allowing you to customize your Movim even more 🎨.
See you soon!
So that's all folks ✨.
We hope that you'll really enjoy all those new features. If you're a server admin we invite you to add your server to join.movim.eu and join the federation.
We would also be really pleased if you share Movim around, invite your friends to join, and talk about it. Movim can be a really nice open-source, federated and standard alternative now. Let's grow the community ☺️!
Thanks again to all the contributors, translators, and other bug finders that allowed this exciting version to be launched 💕.
See you next time 😘.

In this #release you'll find some important fixes and improvements; let's have a look. 😉
Set minimum PHP version to PHP 8.2
This change was initially planned for the next major version but some dependency issues forced me to raise the minimum PHP version required by #Movim to 8.2. PHP 8.1 was already in EOL anyway.
Fixes and improvements in file upload
The file upload code was slightly refactored. It fixes a crash when the filename was too long (the filename is then shortened and a hash is added at the end).
When uploading a file from Movim their name is also prefixed with post_, chat_ and story_ regarding from which part of the UI they are sent. This feature was requested many times by the admins to allow them to organize and expire them properly (for example after 24h for Stories files, unlimited for Post files).
Fixes Pubsub ordering
ejabberd and Prosody don't return the requested #Pubsub items the same way, most recent first for ejabberd and earliest first for Prosody. The XMPP protocol doesn't specify any default order so Movim is now automatically checking the order based on the articles publication time.
Reconcile the nullable state in some tables
It seems that a small change in the internal Movim database library (Eloquent) changed the behavior of some migrations along the way, this version reconcile those differences (some SQL columns were not nullable as they should).
Update fabiang/sasl to fix Update of the SASL SCRAM Downgrade protection XEP #17
Movim is now integrating the upgrade of the XEP-0474: SASL SCRAM Downgrade Protection XEP and the proper integration of the RFC 5802. This solved the connection issue on some #XMPP servers and fixed a risk of attack in the #SASL stack.
What's next?
Hopefully the next version will be a 0.30 and will integrate some pretty big changes, especially on the video-conferencing part. Stay tuned!
That's all folks ✨
Here comes the first bugfix release of the year 🎉
The 0.29.1 comes with a more polished and improved Stories feature, database fixes as well as some preparatory work for the PHP 8.4 version.
This release will be the last one to support PHP 8.1. PHP 8.2 and above will then be required for Movim 0.30.
Polishing the Stories feature
In the 0.29 Movim introduced the Stories feature, it is even now showcased on the main website.
This release fixes a few quirks introduced in the last version:
Preliminary work on PHP 8.4
The brand new PHP 8.4 release introduces a lot of interesting new features... but also deprecates some old syntaxes and enforces strong typing for some extensions.
Most of the errors were fixed in the Movim code but the dependencies need to be updated to ensure proper compatibility with this version, this update will drop the PHP 8.1 version (that is now in end of life). So we are suggesting to start to update to at least PHP 8.2 to prepare for the upcoming release.
Database fixes
The most important fixes of this release are related to the database. A serious issue with chatroom presences that was preventing Movim to handle some of them was fixed (issue #1386). This fix leads to discover a more serious issue that was there for more than two years (!) and that causes some presences to be deleted from the cache unexpectedly (issue #1357).
Those changes come with some database migrations, don't forget to migrate when updating Movim!
The translations were also updated, a big thanks to all the translators 🫶
That's all folks! ✨
tldr; On the night between the 2nd and 3th of October 2024 a corruption of the mov.im instance HTTP cache allowed several users to be connected as another person. Only one account was affected.
This issue only affected the mov.im instance and doesn't apply to the Movim project itself.
The nxing location issue
On the 2nd of October evening a new #nginx #configuration was pushed on the mov.im
virtualhost. This configuration is using fastcgi_cache
to #cache some URLs and lighten up the load put on the PHP side and therefore Movim.
The existing configuration looked like this:
server {
server_name mov.im;
location /picture {
set $no_cache 0;
try_files $uri $uri/ /index.php$is_args$args;
}
location / {
set $no_cache 1;
if (!-e $request_filename) {
rewrite ^/(.*) /index.php?query=$1 last;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
add_header X-Cache $upstream_cache_status;
fastcgi_cache nginx_cache;
fastcgi_cache_valid 200 301 302 1h;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
}
}
The fastcgi_cache
module is by default enabled for all the .php
files called, is disabled for all the URLs except for the /picture
ones. The reverse logic is what made things a bit confusing there.
The configuration change added a new section:
location = / {
# Introduced configuration
}
This new section was applied only to the root https://mov.im/
requests but didn't contained the $no_cache
parameter line.
The second confusion came with how nginx is handling their locations blocks. The DigitalOcean - nginx location directive examples explains it quite clearly.
Some locations blocks definitions are used or passed to the next matching one:
3. NGINX location block for a directory The following location block will match any request starting with /images/ but continue with searching for more specific block for the requested URI. Therefore the location block will be selected if NGINX does not find any more specific match.
And some others don't:
2. NGINX location matching exact URL NGINX always tries to match most specific prefix location at first. Therefore, the equal sign in the following location block forces an exact match with the path requested and then stops searching for any more matches.
The new introduced block (location = /
) behave like the second definition. nginx basically used it and stopped there, applying cache to it without jumping to the "default" one location /
.
The consequences
One of the mov.im users, lets call it Matt (name was changed) had a quite intensive activity on the instance, he basically created a little script to login and logout each 2-3 minutes to check a few parameters. This was not the cause of the issue but this activity raised the chances that he was the first one to hit the /
URL when reconnecting.
The PHP script processed the XMPP authentication successfully and set à cookie to Matt to let him enjoy Movim.
The new nginx faulty configuration cached this call.
The following hours many new users that tried to authenticate reached this URL and nginx directly returned the cached version... containing the cookie created especially for Matt.
And then suddenly lots of persons were Matt.
Fixing the issue
Early in the morning, waking up, I was notified personally and on the support chatroom that some users were connected as other users.
The mov.im instance was disconnected as well as the nginx configuration.
I contacted Matt personally explaining the issue and asking him to change his password and started an investigation. A few small but not directly related issues and improvement concerning the session management were fixed.
The actual one was found by searching the nginx cache for cookie content and I quickly figured out that the new nginx configuration was the cause of that.
Aftermatt/aftermath
The configuration is for now reversed to the old one and the nginx cache is disabled, I'll try to find a cleaner way to re-enable it to prevent such issue to pop again in the future.
Only Matt (the first one to hit the cache) was affected by this issue so normally no other account were affected by the issue. If you logged during that night on mov.im I'd still recommend to change your password just in case.
That's all folks, and sorry for the mess.
edhelas
We're getting close to one #release per month! Indeed, a lot of things are going on in the project at the moment. Let's have a look at all the important new features and fixes before giving some details about the #Movim Live project.
Freshly redesigned Search panel
To bring some coherence and uniformity to the UI the Universal #Search tool has been reorganized and redesigned; it now gives you more interesting results in a more compact way.
Using one keyword you will be able to search into your contacts, communities, article tags as well as recent articles and public contacts. Some optimizations were also made to speed-up the results.
Improved account gateways and administration features
Movim has been handling XMPP gateways for many years already; they allow you to connect and chat with people on many different platforms directly from your main XMPP account. Lots of work and tests were also done to improve those gateways integration, especially with Slidge which has become a reference in the #XMPP ecosystem the past few years.
In the configuration panel you will now be able to easily subscribe, manage and unsubscribe with those gateways thanks to a redesigned and improved Gateways section.
As a Movim administrator the dedicated Admin panel was also redesigned and reorganized to be easier to handle.
Databases fixes
Two important database issues were fixed. One was preventing some migrations to run properly on MySQL (PostgreSQL is still the recommended database for a Movim setup), another one was limiting the length of the URLs that were shared in the messages.
Movim Live, end of Part I
Thanks to a wonderful funding from NLNet a lot of work regarding videoconferencing is on the way in the project.
This release is finally pushing the last pieces of Part I that was focused on refreshing and modernizing the existing stack. In the upcoming week we will start to work on multi-participants calls with the focus to integrate with Dino and bring fully standard and decentralized video-calls on the XMPP network, and across several clients and servers ✨
But first lets have a look at all the cool stuff introduced with this release ☺️
Introducing the new call flow and conference lobby
Until now you were only allowed to configure your microphone and #camera once the call started. This version is introducing a brand new Lobby widget that takes care of preparing all you need to start or reply to a call serenely.
It fully replaces the old Reply and Call Configuration widgets by merging their features into one unique place. A lot of related code was cleaned up, modernized and refactored during the process.
This new panel also prepares the upcoming multi-participants flow allowing you to be fully setup and ready before joining a conference.
Other improvements and fixes
Movim is now able to detect network connection issues and send an end call
message to your contact if it cannot recover the call.
The screen sharing and camera switch buttons were also fixed to work properly on all devices, including Android ones.
If you find issues or have nice ideas to improve all those new features do not hesitate to drop a message on our support channel or open a ticket on the bugtracker.
What's next?
Movim Live Part II, multi-participants video-conferencing! Even if a lot is already planned it is a totally new paradigm for Movim, so a lot of explorations, trials and errors will be made. Hopefully all those new exciting features will land in an upcoming release 😌
In the meantime enjoy the 0.28 release, upgrade your server and share the good news! And thanks to all the people in the community for their support, you rock!
That's all folks!
- cloud_queue