call_end

    • Mo chevron_right

      The difference between XMPP and ActivityPub, explained through the Blog feature spiral note padsparkles

      Timothée Jaussoin • pubsub.movim.eu / Movim • Yesterday - 21:03 • 8 minutes

    Blogs are one of the historical features of Movim, the upcoming 0.32 release will redefine how you interact with them and how you can follow them.

    In this short article you'll discover how they are handled in #Movim by also learning the particularities of the #XMPP Network compared to the #Fediverse one.

    XMPP and ActivityPub: Two Different Approaches

    Movim is only relying on the XMPP #protocol to store and exchange the information it manages. When you authenticate with your account (for example, john@movim.eu), Movim will directly connect to your XMPP server (movim.eu in our example) and will then provide a complete social and chat experience on top of it. Everything you will do will be stored on it: chat messages, uploaded files, profile pictures, publications and many other things.

    It is then the role of your XMPP server to contact the other servers to spread and receive the information to your contacts and followers.

    An overview of the XMPP network

    This architecture is completely different than on the Fediverse (the federated network that is built on the #ActivityPub protocol). In the Fediverse each platform has a specific role (microblogging, picture sharing, publishing and watching videos), and you have to create an account on each of them to use their respective features.

    Work is then done by the developers between each of those platforms (Peertube ActivityPub documentation, Mastodon ActivityPub documentation...) to try to standardize their interactions with the others on top of some generic protocols.

    The Fediverse Network

    In XMPP clients and servers developers are standardizing together the concepts and interactions they want to manage in extensions (called XEPs) before or during their integrations and those concepts are made generic enough to be directly handled easily by the other projects.

    For example, there is an #XEP to manage your chat messages history, XEP-0313: Message Archive Management, there is another XEP that explains how you can bookmark and synchronize chatrooms XEP-0402: PEP Native Bookmarks, another one that defines how you can publish Stories XEP-0501: Pubsub Stories, there is one that shows how clients handles emoji reactions bellow chat messages XEP-0444: Message Reactions...

    We have today more than 500 XEPs that standardize most of the core features of all the social interactions we can have online. And we are working actively on what is missing. 😉

    You can see the complete list on the XMPP Software Foundation website. One useful feature is that by clicking on the buttons on the right column you can see which clients and servers are actually implementing them! It's super useful when you want to integrate one in your own project and you want to test the integration with the others. 🤩

    Chat reactions are already implemented by many XMPP clients!

    So! It means that the Prosody, Tigase, MongooseIM, OpenFire, ejabberd XMPP servers (yes there are many of them already) that host the millions of accounts, including yours (movim.eu is using ejabberd) can already allow you to do microblogging, publish long articles, photos, messages, do video-conferencing... out of the box. How convenient! ✨

    It is then the role of the clients that connect to it to offer a "view" on those features. And Movim is one of those clients. To say it differently, Movim (like all the other XMPP clients) stores no important information; it just caches and displays what it found on the network.

    Blogs, a simple news feed on your XMPP account

    In Movim blogs are not different from all the features above. They were historically defined in 2008 in an XEP called XEP-0277: Microblogging over XMPP that evolved in 2022 into XEP-0472: Pubsub Social Feed.

    This new XEP clarifies and generalizes some concepts of XEP-0277 but the core idea stays the same:

    • An XMPP account or an XMPP service (a subpart of an XMPP server) can host nodes.
    • Accounts can follow those nodes.
    • Accounts can publish items on those nodes.
    • Items that are published on those nodes are articles that can have different forms but are all valid Atom 1.0 elements (yes the same thing you can find in the RSS/Atom feeds online, we are not reinventing things, just reusing widely available technologies 😜.)

    So what is a blog then?

    A blog is a node, hosted on your own account, managed by you, where you can publish short articles (called "Briefs" in Movim) or very long ones (like this one ☺️) in the form of Atom 1.0 elements that people can follow!

    When you publish a new article on your blog Movim will then simply send it to your XMPP server and store it in your own personal blog node linked to your account. Your friends that follow it will then receive a notification that a new article was published. And... that's it!

    So how can I publish an article on my blog?

    Some of the Movim users are sometimes asking, "But where is the API to publish blog posts?" Our API is the XMPP standard 😸! By just reading the XEP and using one of the many clients or libraries (that are available in all the main programming languages), you will be able to publish articles in a few lines without even knowing how Movim does it.

    But you actually want to see how it's done on the wire, isn't it?

    Let's take a small example with john@movim.eu publishing an article on her blog. 😛

    <iq id='pub1'
        to='john@movim.eu'
        type='set'>
      <pubsub xmlns='http://jabber.org/protocol/pubsub'>
        <publish node='urn:xmpp:microblog:0'>
          <item id='1cb57d9c-1c46-11dd-838c-001143d5d5db'>
            <entry xmlns='http://www.w3.org/2005/Atom'>
              <title type='text'>Trying out Movim ✨</title>
              <id>1cb57d9c-1c46-11dd-838c-001143d5d5db</id>
              <published>2025-05-08T18:30:02Z</published>
              <updated>2025-05-08T18:30:02Z</updated>
            </entry>
          </item>
        </publish>
      </pubsub>
    </iq>
    
    

    This is what Movim is actually sending when John publishes an article on her blog. An XMPP library will also be able to do it; if you're motivated, you can also write it by hand (but you don't need to; that's why you have libraries and clients for that! 💪).

    More in detail, we can see the actual article in the <entry/> element; it contains a title, an identifier and some dates of publication and update. The example is super simplified but know that you can put way more information (like attached files, tags...). And as you can see it is an actual standard Atom 1.0 element so you can easily take articles from your WordPress blog or any other website that can generate an Atom or RSS feed and publish them on your XMPP blog, natively!

    We actually publish this entry in a specific item having a unique ID on the node urn:xmpp:microblog:0(that is the standard identifier for all the blogs on the XMPP network) and we send it directly to the john@movim.eu account.

    If John wants to update her article, he just has to publish it again on the same item. If he wants to publish a new one, he publishes another <entry/> in a new item having a new identifier on the same node, super simple!

    And how can I subscribe to a blog and be notified?

    Movim used to have an implicit subscription system; this means that when John and Yoko were added mutually as contacts they were automatically receiving each other's blog notifications. This wasn't really understood by our users and was quite hard to understand; it also had some limitations.

    In Movim 0.32 the subscription will be explicit, with a simple Follow button. This means that you no longer need to be friends mutually to follow each other, and that you can just follow anyone (that has a public blog, you can also restrict your blog to your contacts only if you want) on the network.

    Now let's imagine that Yoko wants to follow John's blog. Using her own XMPP client she simply has to send a subscribe message to the node where John is publishing his articles.

    
    <iq type='set'
        from='yoko@jabber.fr/movim'
        to='john@movim.eu'
        id='sub1'>
      <pubsub xmlns='http://jabber.org/protocol/pubsub'>
        <subscribe node='urn:xmpp:microblog:0'/>
      </pubsub>
    </iq>
    
    

    And that's it 😎! See how simple XMPP is?

    In the future when John publishes a new article his own XMPP server will check all the persons that are subscribed to the node and directly push a message with the fresh article in it (there are some optimizations involved there to reduce the load, but let's keep things simple ☺️). Here Movim is just an interface to write the article and publish it; the XMPP server is actually taking care of handling the article and delivering it to everyone, and they can do it massively with very little resource.

    What's next?

    Movim 0.32 is bringing a totally new approach to how you blog on the XMPP network. In the upcoming months we are planning to integrate more features around that new Follow button, like being able to list your subscribers, get some general statistics on the amount of followers that an account has, or get notified instantly when someone subscribes to your blog.

    We found that some of the XMPP servers we're using were missing some of the standardized features at the moment, some tickets were opened (see ejabberd#4484, prosody#1972, ejabberd#4483, ejabberd#4481 and prosody#1973 and once those features are integrated, Movim will follow up. 😌

    In the XMPP community we think that taking time to discuss and work together to standardize all the concepts we want to integrate in the protocol is the best way to make it the best, most modular, reliable and scalable protocol out there to handle all our social interactions online. Don't hesitate to join us (and invite your friends 😸) if you have questions or you want to develop crazy ideas on the protocol.

    That's all, folks! 🎉

    • Mo chevron_right

      Timothée Jaussoin • pubsub.movim.eu / Movim • 6 August edit

      Wait, did Movim just unlocked the global search feature in its chat messages? face screaming in fear

      Thanks to the powerful tsvector/tsquery #PostgreSQL feature (feature not available on MariaDB sorry pensive face) you can now search messages by keywords in your history and directly load the conversation from the past mantelpiece clock️ !

      Just click on the search button or hit Ctrl + F to open the brand new search panel left-pointing magnifying glass

      The next version will be packed with plenty of awesome features for sure rocketsparkles

      #xmpp #movim #search #feature

    https://upload.movim.eu/files/9d94237298995552fa13436420195fbca436dce7/jI6b9Jf9Z7qM/chat_image.png
    • Mo chevron_right

      Here comes Movim 0.31, codename Kameny sparkles

      Timothée Jaussoin • pubsub.movim.eu / Movim • 24 July edit • 4 minutes

    This summer release is named after the U.S. gay rights pioneer Frank Kameny. He worked as an astronomer in the U.S. Army and was fired for being gay a few years later, in 2012 a Canadian amateur astronomer named an asteroid he discovered after him.

    Let's dive into all the exciting new features that you can find in this release.

    Simultaneous webcam and screen sharing 😄

    The multi-participant call project, funded by NLNet, is reaching a new milestone with the integration of the multi-track support in Movim.

    Until now, Movim was sending and receiving only two tracks, one audio and one video when initiating a call to the other participants. With this important improvement Movim is now able to handle several video tracks at the same time from a unique participant.

    GamerzCat is showing his skill at Genshin Impact

    With this technical improvement you can now share your webcam and screen at the same time with your contacts; this can be quite useful when doing a presentation with slides or streaming yourself when playing video games.

    The first step of the SFU support

    The integration of the multi-track support was not only done for this nice screen sharing feature, it is also the first step to have a multi-stream support with the upcoming SFU integration.

    When Movim will call the SFU (the part on the server that will take care of receiving all the audio and video-stream, mix them and and send them back to the other participants of the video call) it will be able to handle two different modes:

    1. Mixed participants, where only one video stream is maintained and the SFU is taking care of choosing which participant of the call to show, or put them on a grid layout
    2. Simultaneous participants, where each participant streams (audio and video, and possiblity screen sharing) is sent in separate tracks and the client (here Movim) is taking care of displaying them in the prefered layout of the user (a grid, "current speaker in front",....). This second mode can be heavier in bandwidth but allow way more customization client-side.

    The two modes

    We are currently working with the ProcessOne team, that develop the ejabberd XMPP server, on the SFU integration and the standardization of our work in the XMPP protocol.

    Global chatroom search

    Movim now implements the XEP-0433: Extended Channel Search that replaces the historical non-standard implementation.

    The global chatroom search is now directly available in the general Search panel that was also redesigned to give you more compact and detailed results for any keywords you type. This search panel lets you discover articles, Communities, contacts, tags and now chatrooms using a unique text field.

    URL Resolver Worker 🚀

    URL resolving is an important feature that is now a must-have for all the modern chat and social platforms. When you're sharing or receiving a URL, this little feature will visit the page and give you a small preview of it even before you choose to visit the link.

    This version integrates a totally new shared worker, called the URL Resolver, that is taking care of resolving all the URLs that are shared on the Movim instance in a dynamic, non-blocking and concurrent way.

    When a URL was shared in a chatroom, if several of its members were connected on the same Movim instance, they used to ask Movim all at the same time to resolve this URL. This created some performance issues and could trigger a lot of useless requests on the server, especially when the URL was pointing to a heavy file for example.

    The worker is taking care of everything; if several users are asking to resolve the same URL it will put the others in a waiting list, do a unique query, and reply to all of them once the result is handled. On top of that he keep in memory for some time the resolved URLs to speed up even more some upcoming queries.

    To use it you have nothing to configure, just update and restart your Movim daemon and things will start to work automagically. 🪄

    Move the actions list in the Contact or Chatroom panel

    The actions panel

    XMPP services can offer some custom actions, most often for administrators or users or chatrooms. This list of actions used to be buried in the UI, a bit buggy and not available on mobile. It is now available directly in their related panel under the "Actions" tab.

    Adding pronouns support in the profile 🏳️‍🌈💕

    The RFC vCard4 now standardizes the Pronouns field. The field was added in the Movim profile settings and on the contacts page if filled.

    The pronouns field

    Quick switch between the one-to-one chats and chatrooms

    Movim chooses to display your one-to-one conversations and chatrooms in two different lists to prevent some confusion. But when you have a lot of discussions open it could be annoying to scroll again and again between the two lists to reach the unread discussions.

    Now when you click again on the Chat icon you can directly scroll between the two lists, quick and easy! 😸

    And as always you will find many other improvements here and there. Don't forget to update, share the good news around and enjoy!

    That's all, folks. 💖

    #xmpp #release #movim #nlnet #webrtc

    • Mo chevron_right

      Here comes the new Movim release, Encke 0.30.1 sparkles

      Timothée Jaussoin • pubsub.movim.eu / Movim • 23 April, 2025 • 1 minute

    Following last month's 0.30 Encke important upgrade here is the first bug-fix release!

    What's new?

    Animated pictures support in the image proxy

    Movim is proxying all the pictures to recompress and cache them along the way (the cache needs to be configured in your web server, see the dedicated documentation for that).

    For animated GIFs, it used to only take the first frame and compress it in WebP, like for all the other pictures. Now Movim tries to turn it into an animated WebP!

    The Picture Proxy was also refactored to handle some cases with some buggy picture URLs.

    New Avatar and Banner Configuration Panel

    The new panel

    The avatar and banner configuration panel was redesigned to give you a nice overview of your final profile page.

    XEP-0392: Consistent Color Generation support! 🎨

    The internal color palette handling was refactored and slightly adjusted to integrate better with the Accent Color feature introduced in 0.30. A few new colors were added along the way.

    More colors to customize your Movim UI!

    Movim is now implementing XEP-0392: Consistent Color Generation. This means that the same user or content will have the same colors on all your different XMPP clients. ✨

    Slight adjustment of the ChatroomPings service

    Movim is implementing XEP-0410: MUC Self-Ping (Schrödinger's Chat) to ensure that you are still connected to your chatrooms even if there is no activity in them. The ping-pong system was a bit too sensitive and could declare a disconnection in some cases; the timeout was adjusted to prevent most of those unfortunate disconnections from happening.

    Dropping MySQL support

    Movim had "MySQL" and PostgreSQL support for a while already. The original MySQL database was forked as MariaDB and both started to evolve very differently the past few years. MariaDB finally became the "default" database in most of the Linux distributions.

    The two databases were always considered as "flavors" until now, but only MariaDB was extensively tested with PostgreSQL during development.

    It seems that the now MySQL DB is not compatible with Movim anymore and will require very specific support to fix all the migrations and some queries that are not working anymore on it.

    It was therefore decided to only keep the PostgreSQL and MariaDB support, PostgreSQL still being the (strongly) recommended one.

    What's next?

    Going back to the multi-participant calls project, lots of exciting things to do! Stay tuned. ☺️

    That's all folks!

    #movim #release #xmpp #features #database #colors #mysql

    • Mo chevron_right

      Timothée Jaussoin • pubsub.movim.eu / Movim • 22 April, 2025

      Movim is officially dropping support for MySQL warning sign

      It is too difficult to maintain compatibility with all the quirks and specificity of this database pensive face 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 smiling face with smiling eyes

      This will greatly simplify and streamline the development of the project sparkles

      #movim #migration #postgresql #mariadb #mysql #database

    • Mo chevron_right

      Good news everyone, Movim 0.30 Encke is there sparkles

      Timothée Jaussoin • pubsub.movim.eu / Movim • 4 April, 2025 • 4 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.

    NLNet Logo

    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 Muji Lobby

    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.

    The group-call status

    What can I do in a group call?

    Once you're in, Movim offers a couple of nice features to enjoy the call.

    A group call on mobile with the grid view

    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:

    • One to allow declaring an SFU server in a Muji Call
    • One to allow chatrooms to have permanent call rooms to join

    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.

    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 avatar story status

    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 🎨.

    Light mode in purple

    Dark mode in green

    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 😘.

    #movim #release #xmpp #nlnet #videoconference #groupcall

    • Mo chevron_right

      Movim 0.29.2 is here public address loudspeaker

      Timothée Jaussoin • pubsub.movim.eu / Movim • 17 February, 2025 edit • 1 minute

    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 ✨