My FOSDEM 2024 Talk: Migrating the WordPress Community from Slack to Matrix

When I submitted my application for a talk at FOSDEM 2024, we were still on for migrating the WordPress community to Matrix.

Alas, there were many factors that led us to pause the transition indefinitely, announced by Matt at the Q&A of State of the Word 2023. The most important factors were accessibility problems, some important feature-imparity compared with Slack, and the license changes at Element (to AGPL, with the requirement to sign a CLA when contributing).

The WordPress community has collected their issues in a Github repository. We tried hard to overcome the issues, through documentation, education (some things just work differently in a federated environment), and upstream patches (for example to address some of the accessibility problems).

In the end, I did not cancel but held my talk on February 4 at FOSDEM 2024 in Brussels, explaining all the things we did to lower the barrier of entry:

As well as bots and integration we created to fulfill the specific needs, such as these Maubot plugins:

  • Post to room: post messages via webhook
  • Relay: an integration can react to room messages via webhook
  • Group mentions: upon command a bot mentions many people
  • Watchdog: alert about community created rooms

Also, we held weekly meetings in the WordPress meta chat throughout the year, and published meeting notes afterwards.

There is a lot more in my presentation, I hope that my presentation slides can be helpful to other communities (or companies) trying to migrate from Slack to Matrix. Maybe some things that were a blocker for the WordPress community are not so important for other communities.

Finally, here is the video of the ~30 minutes presentation:

FOSDEM 2024 talk by Alex Kirk: Embracing Matrix for Enhanced Communication: Migrating the WordPress Community from Slack to Matrix

Kudos to my colleagues Paulo Pinto and Ashish Kumar who did a lot of the heavy lifting in the effort. Together we submitted around 40 upstream pull requests (on Synapse (pre-license change), Element-Web, Slack bridge, and more).

What is Matrix?

I am working on bringing Matrix to the WordPress community (see also the WP Tavern post) and part of this is also to explain what Matrix actually is, so I wrote up a few paragraphs that I’d like to share here:

Matrix is an internet-based chat system like Slack or Microsoft Teams with a few key differences:

Open Source

It is open source (Apache License 2.0). Thus it includes the four freedoms (run it for any purpose, modify it, distribute it or a modified version).

Federated

There is no centrally controlled server, similar to e-mail (or ActivityPub): to send and receive e-mail, you need to have an account on a mail server. In Matrix, these servers are called homeservers.

When you send messages, these messages are first sent from your client (computer or phone) to the server, from the server to the recipients’ servers (in e-mail, you manually list them, in Matrix, these are all other people in the room), and then the messages are delivered to the individual participant’s clients. The benefit of this is that the client (like a mobile phone app) doesn’t need to be connected when the server receives the message and can catch up when it comes back online. 

For this reason, Matrix account addresses look similar to e-mail (or Mastodon) addresses but they have the format @username:server.tld. Starting when a member of a homeserver joins a room, their homeserver will maintain a full, up-to-date copy of the chat room. Any message sent by others in the room will be sent to every participating homeserver. For this reason, joining a room can take a while because the server needs to (partially) populate its local copy from other homeservers. Because of the real-time nature of chat, the messages are exchanged very quickly between the homeservers as soon as that connection has been established.

A Matrix server can also be run in unfederated mode where it will not communicate with other servers on the internet, thus enabling a closed community. This decision can also be made on a room-by-room basis.

Encryption

Matrix rooms can be either unencrypted and openly discoverable, or end-to-end encrypted and invite-only. Because the server has no knowledge of contents or encryption keys, the latter need to be shared between the individual client software of a user. This is established through a verification step in which you use your other/old client to establish trust with the new one. Until this has happened, any encrypted communication is inaccessible.

Open Protocol

The Matrix protocol (and all of its updates, called MSC) is publicly available and can be implemented by any software. There are a couple of server implementations with best known ones by Element themselves, called Synapse (Python based) and Dendrite (Go based). Clients are easier to implement through Matrix provided SDKs that do the heavy lifting of encryption and protocol communication.

Free Choice of Clients

For the above reason, there is a wide selection of clients for mobile and desktop, different operating systems, text based, etc. We have developed a WordPress plugin called Chatrix that allows embedding Matrix inside a WordPress post or page which allows something like we demonstrated in this GIF: