This Week in Matrix 2021-02-26

2021-02-26 — This Week in Matrix — Ben Parsons

Matrix Live 🎙

Dept of Status of Matrix 🌡️

Decentralized Systems and Network Services Research Group output

Florian told us:

The article of my research group Decentralized Systems and Network Services Research Group from the KASTEL Institute of Information Security and Dependability and me, Analysis of the Matrix Event Graph Replicated Data Type, was published in the Open Access journal IEEE Access! 📰 🥳 Open Access here means that the article is freely available for you to read, under CC-BY.


In layman's terms, we showed that the Event Graph provides a strong form of eventual consistency even when new events are applied in arbitrary order. In addition, this consistency guarantee can still be povided even if all other servers in a room are malicious, which is unexpected compared to the honest majority required for the usual Distributed Ledger Technology. We also looked at the problem of “If servers randomly select at which parents at the bottom of the Event Graph they append new events, and the number of parents for an event is limited, how can you be sure that the Event Graph does not grow arbitrarily wide?“, which is something that puzzled me since the beginning of my Ph.D. two years ago. It is easy simulate a given setup and see that the width shrinks really fast, but it is also easy to see that arbitrary growth has a likelihood larger than zero. As this was astonishingly hard to grasp mathematically, we were very happy that we could recruit Prof. Dr. Norbert Henze from the Institute of Stochastics as co-author to provide evidence that you can expect the Event Graph to shrink to a normal width quite quickly.

Let me quote parts of the abstract for some more technical details:

[…] By comparison with traditional decentralized communication systems, Matrix replaces pure message passing with a replicated data structure. This data structure, which we extract and call the Matrix Event Graph (MEG), depicts the causal history of messages. We show that this MEG represents an interesting and important replicated data type for decentralized applications that are based on causal histories of publish-subscribe events: First, we prove that the MEG is a Conflict-Free Replicated Data Type for causal histories and, thus, provides Strong Eventual Consistency (SEC). With SEC being among the best known achievable trade-offs in the scope of the well-known CAP theorem, the MEG provides a powerful consistency guarantee while being available during network partition. Second, we discuss the implications of byzantine attackers on the data type’s properties. We note that the MEG, as it does not strive for consensus or strong consistency, can cope with n > f environments with n participants, of which f are byzantine. Furthermore, we analyze scalability: Using Markov chains, we study the number of forward extremities of the MEG over time and observe an almost optimal evolution. […] With the properties shown, a MEG represents a promising element in the set of data structures for decentralized applications, but with distinct trade-offs compared to traditional blockchains and distributed ledger technologies.

Dept of Spec 📜

anoa offered:

Interrupting spec update!


Here's your weekly spec update! The heart of Matrix is the specification - and this is modified by Matrix Spec Change (MSC) proposals. Learn more about how the process works at

MSC Status

Closed MSCs:

MSCs in Final Comment Period:

New MSCs:

Spec Core Team

In terms of Spec Core Team MSC focus for this week, there's been activity from the core team on MSC2516 (voice messages), MSC2312 (matrix URI scheme) and MSC3026/MSC3032 (presence improvements).

New Spec Platform

PR updates on matrix-doc has been refactored and straightened out, and is up for review. We're reviewing changes to our infrastructure on in parallel which should result on hosting the unstable spec sometime early next week!


Dept of Servers 🏢


Synapse is a popular homeserver written in Python.

callahad announced:

Hey, it's Friday!

We released Synapse 1.28 yesterday, with the bulk of effort going into stability improvements and bug fixes, and an emphasis on further improving social login.

We're also working to more clearly communicate our prioritization of issues, starting with documenting our triage and labeling process for the core Synapse repository on GitHub.

(Still very much a work in progress, but starting to shape up nicely.)

We're also on track to maintain our fortnightly cadence of Release Candidates, with 1.29.0rc1 due out in just a few days. I look forward to telling you all about it next week!

Homeserver Deployment 📥️


Ananace offered:

Another week, another bump of the Kubernetes chart and image of Synapse (to 1.28.0), still haven't had time to fix it to be image agnostic - the Synapse team is just developing far too fast.

Dept of Bridges 🌉


Eric Eastwood announced:

We've added a "Chat via Matrix" button next to the join button in a Gitter room so you can jump straight into Matrix and start chatting that way. We've also added a link in the chat header so you can switch off to your favorite Matrix client at any time.


New LINE messenger bridge

fair offered:

matrix-appservice-line: A bridge for LINE messenger based on running LINE's Chrome extension in Puppeteer. Based on tulir 's mautrix-amp, as per Eric Migicovsky's suggestion 🙂

Currently very rough around the edges, but message sending & receiving in 1:1 chats works, as does conversation syncing & backfilling.

Repo: git://

Dept of Clients 📱

Neochat 1.1

Carl Schwan announced:

We released NeoChat 1.1 containing 2 months of new features and bugfixes. Most notably message editing, sticker events support, rewritten login screen, SSO support and more commands. Check it out at


In addition to the 1.1 release from earlier, aa13q added support for fancy animation for the 🎆, 🎉 and 🌨️ emojis. This feature can be disabled.


aa13q shared this video too!

neochat pinephone poorly recorded effects demo 🙂


Nheko is a desktop client using Qt, Boost.Asio and C++17. It supports E2EE and intends to be full featured and nice to look at


Nico ( sent a teaser image firest, then added:

As seen from the image, you can now share your screen. This currently only works on X11, since there are no cross platform APIs for that, so look out for that, if you run into issues.

Jedi18 also polished the UX a bit more and fixed bugs, so registration should now work properly again and leaving or joining rooms should place you in the right rooms after that. We also fixed some inconsistencies, where text could be misaligned, when writing long messages.


kitsune reported:

Version 0.0.95 beta4 is out, with significantly better Markdown support (code fences work now, and the overall formatting is better), further improvements to the shuttle dial and other smaller fixes. The release notes and some packages are at their usual place at GitHub; the Flatpak is also coming real-soon-now.

No (or almost no) changes in strings are expected before 0.0.95 from now, so translation contributions are very welcome at Lokalise. German, Polish and Spanish translations are quite advanced but need just a few more entries; the French translation is just about half-way; and there are many prominent languages not even started. You can help!

Element Clients

Updates from the team:


  • Social Login
    • After shipping Social Login on, we’re working on general stability to harden the feature, and get better visibility on stability.
  • Spaces
    • On Android, we’re making good progress on creating and managing spaces, first focusing on public space use cases. Otherwise, we’re also polishing implementations on web & iOS.


  • 1.7.22 RC on staging, includes
    • Improved Jitsi conference names
    • Disabled chat effects when reduced motion preferred
  • 1.7.22 planned for release on Monday (1 Mar)


  • 1.2.2 RC currently available in TestFlight
  • 1.2.3 RC is coming
  • Will be released on Monday:
    • Mainly bug fixes around e2ee and VoIP


  • 1.1.0 released with a huge update on VoIP
  • Initial sync is now more reliable for big accounts, consuming less RAM

Watch The Matrix, for Apple Watch

Doug told us:

Hey TWIM. I'd like to present Watch The Matrix, a matrix client for watchOS that I've been working on over the last few weeks. Currently can view rooms, receive new messages and react to them:

Find the code:

Dept of SDKs and Frameworks 🧰


kitsune reported:

libQuotient 0.6.5 is out, featuring fixes in rich replies handling and the updated Matrix URIs support, as per the latest iteration of MSC2312, enabling shorter, nicer Reddit-style URIs such as matrix:r/

libkazv (and the Kazv Project)

tusooa offered:

libkazv is a sans-io C++ (gnu++17) client library

built upon lager. Along with it there is kazv, a kirigami/qml client, and a

forward bot between matrix and tencent qq. Talk to us on


In the past (how many?) weeks we ("tusooa and her longcat," we hope someday we can

remove this annotation :P):

  1. Released libkazv 0.1.0 and matrix-tencent-forward-bot 0.1.0.

    Those are stable enough to run as daemon, at least for days.

  1. Added related ebuilds to the overlay.
  1. Implemented streaming uploads for libkazv.
  1. Made matrix-tencent-forward-bot support directly forwarding images

    to the matrix room.

Opsdroid 0.21

Cadair reported:

opsdroid is an easy to use chatops framework with excellent matrix support.

0.21 Release

This week opsdroid 0.21 has been released, it's an incremental release but includes a couple of nice matrix related features and fixes. The highlights are:

  • Support authorization by access token in addition to user name and password for the matrix connector. #1707.

  • Fix parsing a sync response with more than one message in it. #1715.

  • Minor fixes to the matrix documentation. Thanks to @anoadragon453 @xDiesel76 for these.

For a full list of the other changes see the release notes.

If you have any questions or want to get involved come say hi in, raise an issue on GitHub and checkout the docs.

Caridina, Crystal library for Matrix

erdnaxeli said:

Caridina, a Crystal library for Matrix, got some new releases, which bring it to v0.10.2. It now supports the last version of Crystal (0.36.1) and redacted events, which I discovered the hard way were making the lib crash. Internally a big part of the lib was rewritten using macros, which makes the code a lot clearer but the API doc too. Thanks to Ruma actually for giving me inspiration about implementing events using macros.

Again, if you like Crystal and want to write some matrix bot, this library might interest you. Feel free to open issues about bugs or feature requests! There is now a room to talk about it.

Dept of Bots 🤖


select announced:

So I had a minute to release my open q&a bot taavi.

I always wanted to write a chatbot that does cool things, so checkmark for that one on the list. In addition to that I recently failed a job interview. For their technical skill test (I did not fail this :P), I got a task for which I learned how to use puppeteer, then saw a post on reddit about Tuxi and together with my previous project that included Matrix (Audius), I knew what I had to do: create Taavi.

I have created this bot as a "weekend project", litteraly one day for the code and one day for documentation. Surely it's far from perfect but I don't have any big plans with it so far… If you think I should add some features, create an issue and let me know. I could imagine adding other websites / services to it like, do you have any ideas?

I gave my daugther the task to choose a name for a bot, that can anser any question in the world, and she came up with Taavi, nice!

Ansible role for installing Maubot via Docker

jaywink said:

I created an Ansible role for installing Maubot via Docker - . Currently it only supports an Sqlite database, but pull requests are welcome for more configuration. Supports a pre-created client account.

Dept of Interesting Projects 🛰️


ahq reported:

I've written a post introducing Hummingbard.

This looks really interesting!

Final Thoughts 💭

JCG said:

Not sure if TWIM worthy, but here's a nice article about the recent flood of people migrating away from whatsapp, and why people should've migrated to matrix instead of Signal.

(In German)

There is also a sympathetic response that has been discussed on HN.

Seirdy said:

i've been getting some feedback from other matrix users on a blog post i wrote that outlined a few concerns I had about the Matrix ecosystem and steps for improvement. idk if it'd be relevant in TWIM, but I noticed that "Final Thoughts" sometimes linked blog posts so I thought I'd share:

Dept of Ping 🏓

Here we reveal, rank, and applaud the homeservers with the lowest ping, as measured by pingbot, a maubot that you can host on your own server. Join to experience the fun live, and to find out how to add YOUR server to the game.

RankHostnameMedian MS

That's all I know 🏁

See you next week, and be sure to stop by with your updates!

Synapse 1.28.0 released

2021-02-25 — Releases — Dan Callahan

Synapse 1.28.0 is now available!

This release comes with several further improvements to the user experience of single sign-on and numerous bugfixes and stability improvements.

For admins, Synapse 1.28 adds a new Admin API for retrieving event context and implements new spam checker hooks which enable checking file uploads and remote downloads. We've also improved memory usage of media repository workers.

Lastly, we have marked an undocumented Admin API for deprecation. If any of your tools use /_synapse/admin/v1/users/<user_id> to get account information, please replace that with the V2 List Accounts API, which has been available since Synapse 1.7.0.

There are no special upgrade instructions for 1.28.0. See the full changelog for more details on what's in this release.

Synapse is a Free and Open Source Software project, and we'd like to extend our thanks to everyone who contributed to this release, including arya2331, auscompgeek, bubu, compu42, dklimpel, dykstranet, and shadowjonathan.

We'd also like to thank yoric for thoroughly reviewing and re-organizing the Synapse file.

This Week in Matrix 2021-02-19

2021-02-19 — This Week in Matrix — Ben Parsons

Matrix Live 🎙

Dept of Spec 📜


anoa offered:

Here's your weekly spec update! The heart of Matrix is the specification - and this is modified by Matrix Spec Change (MSC) proposals. Learn more about how the process works at

MSC Status

Merged MSCs:

  • No MSCs were merged this week.

MSCs in Final Comment Period:

New MSCs:

Spec Core Team

The Spec Core Team has spent this week working on getting MSC2312 (Matrix URI Scheme) over the line, which is really exciting! Otherwise the team has been reviewing MSC2304 (knocking).

New Spec Platform

Work is currently underway in migrating to the new spec platform. A PR for updating the CI of matrix-org/matrix-doc to build the new spec is up, and an equivalent for matrix-org/ should be up next week.



sorunome said:

Soru has been working on experimenting with / designing a way to improve push systems within the matrix ecosystem, so that ideally clients can display full event contents in a notification and dispose of specific push notifications without the need for any extra HTTP calls. This lead her to making MSC3013 (encrypted push), so that no gateway is able to read event contents pushed down to the client and MSC3014, so that the client can know which rooms have been read on other devices, allowing them to dispose push notifications.

This is more than just MSCs already, soru already got encrypted push in a patched synapse and a patched fluffychat working locally, and it is working super great!

Dunno soru is just really excited about this somehow >~< 🦊

Dept of Servers 🏢

Hedwig: push gateway

krille reported:

Let's talk more about Hedwig: This is a push gateway for matrix and an alternative to Sygnal. Hedwig is completely written from scratch in Rust (Yes! Rust!) and offers the basic functionality to forward matrix push notifications to Firebase Cloud Messaging. That's it. Nothing more. It is intended to be as lightweight as possible and so it is very fast and stable. Just change a simple config.toml file and run the binary. There are docs for how you can configure a proxy in Apache2 and an example systemD service file. Currently it only supports event_id_only formatted notifications but maybe, in the future, we expand this functionality.

Learn more:

Dendrite / gomatrixserverlib

Dendrite is a next-generation homeserver written in Go

Neil Alexander reported:

This week we released Dendrite 0.3.10, and have committed a couple more fixes to master:

  • The database is now only queried for remote servers once in /send

  • The oldest cache entries are now gradually evicted, saving a small amount of memory

  • The destination queues in the federation sender are now not stored forever, saving some memory

  • A bug where a non-excluded event could be accidentally excluded from /sync has been fixed

  • Some dependency fixes have been merged

Sytest compliance:

  • Client-server APIs: 60%

  • Server-server APIs: 82%

As always, feel free to join us in for general Dendrite chat or for development discussion.


Synapse is a popular homeserver written in Python.

callahad reported:

Synapse 1.27 is out, and you can read all about it on the Matrix Blog! This is the version that powered FOSDEM, and we're super proud of it. Especially the much improved support for multiple social login providers, which debuted at FOSDEM and is now enabled on

In addition to all the performance, stability, and social login improvements, there are two important things to note:

  1. If you use SSO, you will need update your configuration before upgrading; please see the link above for details.
  2. We were unable to build Docker images for ARM platforms in time for this release, and will not build images for ARMv7 in future releases.
  • To avoid unexpected breakage, we have not updated the latest tag on Docker Hub for this release; if you want Synapse 1.27, you'll need to specifically reference the v1.27.0 tag.

  • Images for ARM64 (and an updated latest tag) will return with the next Synapse release.

It took us a bit longer than usual to get 1.27 out the door, so we're also pleased to announce that 1.28.0rc1 is also now available, and we expect to release it early next week. Keep your eyes peeled for more on that next week!

Homeserver Deployment 📥️


Ananace announced:

New chart versions have been pushed for Element 1.7.21 and Synapse 1.27.0.

The rejiggering to allow arbitrary images for the Kubernetes chart got delayed due to lack of time, but 1.27.0 should hopefully be the last version with that limitation.

Dept of Clients 📱


Nio is a client written with SwiftUI

kilian offered:

Nio has seen some great improvements since the last update, mostly thanks to gaining a new main contributor \o/

  • History loading now works (seems like a rather essential messenger feature 😄)

  • New conversations can be started (with a slick UI)

  • There's a preliminary (but well-working!) build for macOS on Catalyst

  • As a first step towards E2EE support Nio can now participate in encrypted sessions while running

  • Many new translations (thanks to all the contributors on!)

  • Lots of additional bugfixes and improvements

Join us in for more details 😊


FluffyChat is a cute cross-platform matrix client. It is available for Andorid, iOS, Web and Desktop.

krille said:

FluffyChat 0.27.0 is out. Not with the new design but with some minor design improvements like the return of the presence list top bar (or whatever you would name it!). Also this release brings a lot of bug fixes, working bootstrapping and the switch to our new Push Gateway (in Rust) we have invented inside of Famedly. You can find it here:

FluffyChat on Pinephone

Lukas Lihotzki said:

FluffyChat runs on the PinePhone (Flutter Linux ARM64). I've built it with flutter master on the PinePhone itself, because cross-compiling is not yet supported. Currently, Flutter Linux on the PinePhone only works with X11. It crashes with Wayland.

I am on the brink of buying one of these!



Nheko is a desktop client using Qt, Boost.Asio and C++17. It supports E2EE (with the notable exception being device verification for now) and intends to be full featured and nice to look at

Nico ( told us:

We had a fun week this time. Today I tested trilenes screen sharing code, which seems to work pretty well on X11, although it only shares the full screen atm. I expect window sharing to land next week though. We also ran into some issues with enabling optional SSO login, which locked some people out of their accounts, since Nheko preferred SSO login in that case... This is now fixed and in such cases you will be offered both login flows.

Jedi18 also added a room name completer, which means you can finally complete aliases when typing them! The room settings were also ported to Qml and now actually show the room topic. Apart from that there were various UX fixes here ad there, like hovering actually working properly now, emote messages formatting correctly in notifications and more. We also adapted the matrix: uri support to the latest changes, although the MSC is a bit volatile atm, so it may need some more adaptions over time.

I think that's all, have a nice weekend everyone!


Bruno announced:

I'm back working on Hydrogen, and started to tackle logging to be able to diagnose problems better. I've opted for a structured log format in JSON that gives a tree of log nodes for an entire operation (e.g. sync, or sending a message, ...) which will be more compact and should also be easier to find patterns in than a pure line based format. I had hoped to get that out in a release by today but didn't get as far as I hoped, so should get released early next week.


Yes! Hydrogen progresses!


Neil told us:


  • Social Login

    • Social log-in has shipped to, we are seeing about 40% of new users opting for a social method. Next up will be landing some robustness improvements as well as automatic avatar import.
  • Spaces

    • We are aiming to get a basic version up and ready over the next few weeks. The idea is to have something behind a labs flag that will work for Spaces containing public rooms only. After that we will think about more complex cases such as Spaces containing private rooms.


  • Fix for crash on Android caused by VoIP tiles

  • Design updates on iOS for in-call view and dial pad

  • Couple of tweaks to web that may help 1:1 call connectivity


  • Element 1.7.21 was released on Monday (15 Feb)


  • Element 1.2.1 was released on Friday (12 Feb)

  • We now use XcodeGen to generate Xcode project files. Please check new instructions to build the project. It is only on develop for the moment

  • We made an update to libolm so that it accepts an external pickle key to encrypt its data when serialising it. Element-iOS uses the Keychain to provide this key.

  • We started to review and merge pending PRs in our repos but we still have work. Thanks for your contributions and patience


  • We are preparing the release 1.1.0 which contains the work on VoIP

  • This release will also contain a lot of bug fixes

Dept of SDKs and Frameworks 🧰


Ruma is a set of Rust library crates around Matrix

jplatte said:

This week,

Dept of Ops 🛠

matrix-docker-ansible-deploy: Synapse workers

This Ansible playbook is meant to easily let you run your own Matrix homeserver.

Slavi told us:

After lots and lots of work (done over many months by Marcel Partap, Max Klenk, a few others from the Technical University of Dresden, Germany and various other contributors), support for Synapse workers has finally landed in matrix-docker-ansible-deploy. 🚀

Learn more from our changelog announcement.

matrix-docker-ansible-deploy: GroupMe bridge

Slavi returned to say:

Thanks to Cody Neiman, matrix-docker-ansible-deploy can now install the mx-puppet-groupme bridge for bridging to GroupMe.

This brings the total number of bridges supported by the playbook up to 18. See all supported bridges here.

To get started, follow our Setting up MX Puppet GroupMe docs.

ansible-matrix-collection from tntclaus

tntclaus announced:

Collection of Ansible modules to manage Matrix Homeserver instance. Only tested with Synapse but may (partially) work with the other Matrix Homeserver implementations.

Provides modules to manage users, rooms and communities.


jojo said:

synadm is growing! Pull requests have been submitted, issues been raised, bugs fixed and quite some user community seems to have evolved around it as it’s regularily mentioned on

Since it’s first announcement on TWIM in December, notable things happening in the project are:

  • Massive internal overhaul, tidying up and refactoring

  • Media Admin API support

  • Make Room Admin API support

  • Delete Group (community) API support

  • 4 availalbe output formats (json, yaml, pprint, human)

  • Python requests debugging switch

  • Textual Error responses of Synapse now showing in output

  • Licensed under GPL-3

Have a look at the latest release notes for a complete list of new features and fixes:

Thanks a lot to contributors @hpd, @kaiyou, @schwindp, @aaronraimist and @rht! Keep those PR's and ideas coming! You have been a great help!

Next features on the roadmap are "Purge History API", regular matrix client calls support and login as a user. Help me prioritise features by raising an issue:

Still, I am basically a one man show, and certainly any contributions are warmly welcomed! Even as a non-programmer you can help by keeping the implementation-status list up to date. If you find an admin API missing, please take a minute and use the integrated edit functionality github provides and add it to the list: It helps contributors to quickly find out what feature they could code!

I am also thinking about finding people who'd like to join the team, code new features and help maintain codebase, review PR's, get push access and so on. Spread the word! Join!

Matrix in the News 📰

Shine reported:

Dunno if twim worthy? Proton mentioned Matrix in

Seems to be worthy, it's been included anyway!

Final Thoughts 💭

Nico ( offered:

Oh, and maybe as a side note: Since Steam voice chat failed me one too many times now, I now use Nheko for voice chat, if I just play with one other player. It is more reliable and most people I play with do have a voip capable Matrix client installed!

Using own product 😀 👍

TR_SLimey said:

It seems neochat has made it into the Plasma 5.21 preview video, albeit not quite as one might expect :P


Here's the video link:

That indeed is an unusual way to get featured, well done NeoChat!

Dept of Ping 🏓

Here we reveal, rank, and applaud the homeservers with the lowest ping, as measured by pingbot, a maubot that you can host on your own server. Join to experience the fun live, and to find out how to add YOUR server to the game.

RankHostnameMedian MS

That's all I know 🏁

See you next week, and be sure to stop by with your updates!

Synapse 1.27.0 released

2021-02-18 — Releases — Dan Callahan

Synapse 1.27.0 is now available!

We're especially proud of this release, as this is the version of Synapse that powered FOSDEM 2021 on Matrix. As such, our main focus was on stability, performance, and long-awaited support for social login.

What's New

To our surprise, nearly half of all people who created accounts on the FOSDEM homeserver did so via a social login method. Full support for those methods is included in Synapse 1.27.0, and already available for all users on the homeserver.

We've also changed how we use Redis in larger deployments, making Synapse more resilient to lost connections and eliminating delays when restarting with multiple federation senders.

Our Server Admin APIs saw a few tweaks, including new APIs to query and delete forward extremities or list the current state of a room.

See the full changelog for more.

Breaking Changes for SSO

If you use Single Sign-On (SSO) via SAML, OAuth2, or OpenID Connect you must adjust your provider's configuration before upgrading to Synapse 1.27.0, as some endpoint URLs have changed. See the upgrading notes for more information.

Dropping ARMv7 Docker Images

We were unable to produce ARM-based Docker images for this release due to problems with cross-compilation. As a result, we have made the difficult decision to cease building 32-bit ARMv7 Docker images as part of our release process. We will resume publishing ARM64 images with the next Synapse release.

Users on ARMv7 platforms (most notably Raspberry Pis) should consider building images locally using Synapse's Dockerfile or switching to installing Synapse directly as a Python module. Users with Raspberry Pi 3's or newer also have the option of installing a 64-bit Linux distribution and using an ARM64 Docker image.

Thank you to our contributors

Synapse is a Free and Open Source Software project, and we'd like to extend our thanks to everyone who contributed to this release, including dklimpel, intelfx, jcgruenhage, Oliver-Hanikel, rht, and y-pankaj.

How we hosted FOSDEM 2021 on Matrix

2021-02-15 — General — Matthew Hodgson

Hi all,

Just over a week ago we had the honour of using Matrix to host FOSDEM: the world's largest free & open source software conference. It's taken us a little while to write up the experience given we had to recover and catch up on business as usual... but better late than never, here's an overview of what it takes to run a ~30K attendee conference on Matrix!

[confetti and firework easter-eggs explode over the closing keynote of FOSDEM 2021]

First of all, a quick (re)introduction to Matrix for any newcomers: Matrix is an open source project which defines an open standard protocol for decentralised communication. The global Matrix network makes up at least 28M Matrix IDs spread over around 60K servers. For FOSDEM, we set up a server to host newcomers, provided by Element Matrix Services (EMS) - Element being the startup formed by the Matrix core team to help fund Matrix development.

The most unique thing about Matrix is that conversations get replicated across all servers whose users are present in the conversation, so there's never a single point of control or failure for a conversation (much as git repositories get replicated between all contributors). And so hosting FOSDEM in Matrix meant that everyone already on Matrix (including users bridged to Matrix from IRC, XMPP, Slack, Discord etc) could attend directly - in addition to users signing up for the first time on the FOSDEM server. Therefore the chat around FOSDEM 2021 now exists for posterity on all the Matrix servers whose users who participated; and we hope that the server will hang around for the benefit of all the newcomers for the forseeable so they don't lose their accounts!

Talking of which: the vital stats of the weekend were as follows:

  • We saw almost 30K local users on the FOSDEM server + 4K remote users from elsewhere in Matrix.
  • There were 24,826 guests (read-only invisible users) on the FOSDEM server.
  • There were 8,060 distinct users actively joined to the public FOSDEM rooms...
  • ...of which 3,827 registered on the FOSDEM server. (This is a bit of an eye-opener: over 50% of the actively participating attendees for FOSDEM were already on Matrix!)
  • These numbers don't count users who were viewing the livestreams directly, but only those who were attending via Matrix.

Given last year's FOSDEM had roughly 8,500 in-person attendees at the Université libre de Bruxelles, this feels like a pretty good outcome :)

Graphwise, local user activity on the FOSDEM server looked like this:

How was it built?

There were four main components on the Matrix side:

  1. A horizontally-scalable Matrix server deployment (Synapse hosted in EMS)
  2. A Jitsi cluster for the video conferencing, used to host all the Q&A sessions, hallway sessions, stands, and other adhoc video conferences
  3. An elastically scalable Jibri cluster used to livestream the Jitsi conferences both to the official FOSDEM livestreams and to provide a local preview of the conference on Matrix (to avoid the Jitsis getting overloaded with folks who just want to view)
  4. conference-bot - a Matrix bot which orchestrated the overall conference on Matrix, written from scratch for FOSDEM by TravisR, consuming the schedule from FOSDEM and maintaining all the necessary rooms with the correct permissions, widgets, invites, etc.

Architecturally, it looked like this:

On the clientside, we made heavy use of widgets: the ability to embed arbitrary web content as iframes into Matrix chatrooms. (Widgets currently exist as a set of proposals for the Matrix spec, which have been preemptively implemented in Element.)

For instance, the conference-bot created Matrix rooms for all the FOSDEM devrooms with a predefined widget for viewing the official FOSDEM livestream for that room, pointing at the appropriate HLS stream at - which looked like this:

Each devroom also had a schedule widget available on the righthand side, visualising the schedule of that room - huge thanks to Hato and Steffen and folks at Nordeck for putting this together at the last minute; it enormously helped navigate the devrooms (and even had a live countdown to help you track where you were at in the schedule!)

Each devroom was also available via IRC on Freenode via a dedicated bridge (#fosdem-...) and via XMPP.

The bot also created rooms for each and every talk at FOSDEM (all 666 of them), as the space where the speaker and host could hang out in advance; watch the talk together, and then broadcast the Q&A session. At the end of the talk slot, the bot then transformed the talk room into a 'hallway' for the talk, and advertised it to the audience in the devroom, so folks could pose follow-on questions to the speaker as so often happens in real life at FOSDEM. The speaker's view of the talk rooms looked like this:

On the right-hand side you can see a "scoreboard" - a simple widget which tracked which messages in the devroom had been most upvoted, to help select questions for the Q&A session. On the left-hand side you can see a hybrid Jitsi/livestream widget used to coordinate between the speaker & host. By default, the widget showed the local livestream of the video call - if you clicked 'join conference' you'd join the Jitsi itself. This stopped view-only users from overloading the Jitsi once the room became public.

The widgets themselves were hosted by the bot (you can see them at Meanwhile the webclient itself ended up being identical to mainline Element Web 1.7.19, other than FOSDEM branding and being configured to hook the 'video call' button up to the hybrid Jitsi/livestream widget rather than a plain Jitsi.

Meanwhile, for conferencing we hosted an off-the-shelf Jitsi cluster sized to ~100 concurrent conferences, and for the Jibri livestreaming we set up an elastic scalable cluster using AWS Auto Scaling Groups. Jibri is essentially a Chromium which views the Jitsi webapp, running in a headless X server whose framebuffer and ALSA audio is hooked up to an ffmpeg process which livestreams to the appropriate destination - so we chose to run a separate VM for every concurrent livestream to keep them isolated from each other. The Jibri ffmpegs compressed the livestream to RTMP and relayed it to our nginx, which in turn relayed it to FOSDEM's livestreaming infrastructure for use in the official stream, as well as relaying it back to the local video preview in the Matrix livestream/video widget.

Here's a screengrab of the Jitsi/Jibri Grafana dashboard during the first day of the conference, showing 46 concurrent conferences in action, with 25 spare jibris in the scaling group cluster ready for action if needed :)

There was also an explosion of changes to Element itself to try to make things go as smoothly as possible. Probably the most important one was implementing Social Login - giving single-click registration for attendees who were happy to piggyback on existing identity providers (GitHub, GitLab, Google, Apple and Facebook) rather then signing up natively in Matrix:

This was a real epic to get together (and is also an important part of achieving parity betwen Gitter and Element) - and seems to have been surprisingly successful for FOSDEM. Almost 50% of users who signed up on the FOSDEM server did so via social login! We should also be turning it on for the server this week.

Finally, on the Matrix server side, we ran a cluster of synapse worker processes (1 federation inbound, reader and sender, 1 pusher, 1 initial sync worker, 10 synchrotrons, 1 event persister, 1 event creator, 4 general purpose client readers, 1 typing worker and 1 user directory) within Kubernetes on EMS. These were hooked up for horizontal scalability as follows:

The sort of traffic we saw (from day 2) looked like this:

How did it go?

Overall, people seem to have had a good time. Some folks have even been kind enough to call it the best online event they've been to :) This probably reflects the fact that FOSDEM rocks no matter what - and that Matrix is an inherently social medium, built by and for open source communities (after all, the whole Matrix ecosystem is developed over Matrix!). Also, Matrix being an open network means that folks could join from all over, so the social dynamics already present in Matrix spilled over into FOSDEM - and we even saw a bunch of people spin up their own servers to participate; literally sharing the hosting responsibility themselves. Finally, having critical infrastructure rooms available such as, and probably helped as well.

That said, we did have some production incidents which impacted the event. The most serious one was on Saturday morning, where it transpired that some of the endpoints hosted on the main Synapse process were taking way more CPU than we'd anticipated - most importantly the /groups endpoints which handle traffic relating to communities (the legacy way of defining groups of rooms in Matrix). One of the last things we'd done to prepare for the conference on Friday night was to create a community which spanned all 1000 public rooms in the conference, as well as add the community to all of those rooms - and unfortunately we didn't anticipate how popular these would be. As a result we had to do some emergency rebalancing of endpoints, spinning up new workers and reconfiguring the loadbalancer to relieve load off the main process.

Ironically the Matrix server was largely working okay during this timeframe, given event-sending no longer passes through the main process - but the most serious impact was that the conference bot was unable to boot due to hitting a wide range of endpoints on startup as it syncs with the conference, some of which were timing out. This in turn impacted widgets, which had been hosted by the bot for convenience, meaning that the Jitsi conferences for stands and talk Q&A were unavailable (even though the Jitsi/Jibri cluster was fine). This was solved by lunchtime on Saturday: we are really sorry for folks whose Q&As or conferences got caught in this. On the plus side, we spotted that many affected rooms just added their own widgets for their own Jitsis or BBBs to continue with minimal distraction - effectively manually taking over from the bot.

The other main incident was briefly first thing on Sunday morning, where two Jibri livestreams ended up trying to broadcast video to the same RTMP URL (potentially due to a race when rapidly removing and re-adding the jitsi/livestream widget for one of the stands). This caused a cascading failure which briefly impacted all RTMP streams, but was solved within about 30 minutes. We also had a more minor problem with the active speaker recognition malfunctioning in Jitsi on Sunday (apparently a risk when using SCTP rather than Websockets as a transport within Jitsi) - this was solved around lunchtime. Again, we're really sorry if you were impacted by this. We've learned a lot from the experience, and if we end up doing this again we will make sure these failure modes don't repeat!

Other things we'd change if we have the chance to do it again include:

  • Providing a to-the-second countdown via a widget in the talk room so the speaker & host can see precisely when they're going 'live' in the devroom (and when precisely they're going to be cut in favour of the next talk)
  • Providing a scratch-pad of some kind in the talk room so the host & speaker can track which questions they want to answer, and which they've already answered
  • Keep the questions scoreboard and scratchpad visible to the speaker/host after their Q&A has finished so they can keep answering the questions in the per-talk room, and advertise the per-talk room more effectively.
  • Use Spaces rather than Communities to group the rooms together and automatically provide a structured room directory! (Like this!)
  • Use threads (once they land!) to help structure conversations in the devroom (perhaps these could even replace the hallway rooms?)
  • Make the schedule widgets easier to find, and have more of them around the place
  • Make room directory easier to find.
  • Give the option of recording the video in the per-talk and stands for posterity
  • Provide more tools to stands to help organise demos etc.

So, there you have it. We hope that this shows that it's possible to host successful large-scale conferences on Matrix using an entirely open source stack, and we hope that other events will be inspired to go online via Matrix! We should give a big shout out to HOPE, who independently trailblazed running conferences on Matrix last year and inspired us to make FOSDEM work.

If you want to know more, we also did a talk about FOSDEM-on-Matrix in this month's Open Tech Will Save Us meetup and the Building Massive Virtual Communities on Matrix talk at FOSDEM went into more detail too. Our historical Taking FOSDEM online via Matrix blog has been somewhat overtaken by events but gives further context still.

Finally, huge thanks to FOSDEM for letting Matrix host the social side of the conference. This was a big bet, starting from scratch with our offer to help back in September, and we hope it paid off. Also, thanks to all the folks at Element who bust a gut to pull it together - and to the FOSDEM organisers, who were a real pleasure to work with.

Let's hope that FOSDEM 2022 will be back in person at ULB - but whatever happens, the infrastructure we built this year will be available if ever needed in future.

This Week in Matrix 2021-02-12

2021-02-12 — This Week in Matrix — Ben Parsons

Matrix Live 🎙

This week we have Neil presenting P2P Matrix over Bluetooth. It's titled "P2P Matrix Bluetooth Low Energy demo", but I thought Neil and Matthew brought a pretty good energy to the video!

Dept of Status of Matrix 🌡️

Famedly in the media

Nico ( announced:

Famedly (Matrix based application for German hospitals and clinics) seems to be getting positive feedback so far:

Article in German, but my favourite parts are:

  • They used the word "Anti-Datenkrake" to describe how data is handled in the application, which basically is a metaphor for Famedly being the opposite of the usual corporations trying to pry their tentacles into everyones personal data. See also:

  • They actually use [matrix]–Protokoll to refer to the Matrix protocol. The open and standardized Matrix protocol seems to be a big selling factor.

Dept of Spec 📜


anoa said:

Here's your weekly spec update! The heart of Matrix is the specification - and this is modified by Matrix Spec Change (MSC) proposals. Learn more about how the process works at

MSC Status

Merged MSCs:

  • No MSCs were merged this week.

MSCs in Final Comment Period:

  • No MSCs are in FCP.

New MSCs:

Spec Core Team

Some chatter about the MSC2403 (knocking) as FCP has been proposed. Otherwise work on MSC1772 (Spaces) as that nears production and some encryption work with MSC2874 (single SSSS).

The team is carefully debilitating MSC2997, which spurred out of a conversation during FOSDEM2021. What sizes to include? What font to use? What colour do we paint this bike shed? All incredibly complex questions.

New Spec Platform

Will Bamberg has done an incredible job with getting both an entire redesign and an internal refactoring to the Matrix Spec. Remaining work includes ironing out some remaining minor blockers (,, merging changelog representation with respect to the current idea of a global Matrix Spec version number ( and then finally hooking up all the CI/CD to deploy it all (my job!).

We're planning to present the new spec on a new domain; running it in parallel with the old design for a bit before eventually retiring the latter.


Dept of Servers 🏢


grin shared this note from Jason:

This week in Matrix Construct added Application Services support. I've been using the Mautrix Telegram bridge on a daily basis, and it's been a pleasure to develop with. Expect more bridges to be tested in the coming weeks. I'll also be working on completing the documentation for how to setup a bridge in Construct. Just to give some insight: The server has the ability to manage all of your bridges as sub-processes. In any client, just create a room for your bridge and enter its configuration there. Voila! The bridge's console appears right in that room and can even highlight you about errors!

Join us at to learn more about bridges and lend a hand.




Synapse is a popular homeserver written in Python.

callahad announced:

We survived FOSDEM! Last week was relatively slower in Synapse land as we paused to catch our breath, but we do have news!

First, releases. Synapse 1.27.0rc2 is out now (changelog), and we anticipate a full 1.27 release early next week. This is basically the branch that FOSDEM ran, so we think it's a good one.

Second, keeping with our biweekly development cadence, the first 1.28 release candidate is due out midweek next week, so keep your eyes peeled for that. Given FOSDEM, most of our recent focus has been on stability, bug fixes, and social login. We hope to knock your socks off with more ambitious features soon. 😉

Homeserver Deployment 📥️


Pierre told us:

YunoHost is an operating system aiming for the simplest administration of a server, and therefore democratize self-hosting.

Synapse integration had been updated to 1.25.0 (1.26.0 available in branch testing)

Element Web integration had been updated to 1.7.16 (1.7.20 available in branch testing)

Dept of Clients 📱

SchildiChat Web/Desktop

qg offered:

SchildiChat is a fork of Element, which focuses on UI changes such as message bubbles and a unified chat list for both direct messages and groups, which is a more familiar approach to users of other popular instant messengers.

Thanks to @michi7801 we can now provide builds for macOS!! 🍎

Code on GitHub:

Matrix room:



Nheko is a desktop client using Qt, Boost.Asio and C++17. It supports E2EE (with the notable exception being device verification for now) and intends to be full featured and nice to look at

Nico ( announced:

We just landed basic support for edits. Which means edits are now applied to the original message instead of showing the fallback and you can edit your messages. You can also change a text message to a video (or the other way around) or change, who you replied to, but the latter fails to render in some clients properly, so be aware of that. Edits also send a secondary relation format, which makes handling edits easier, but I still haven't written up the MSC for that... The UI is not final yet and you can't show edit history yet, but apart from that it may or may not work fine.

There were also a lot of bugfixes like broken kerning in some cases, improved focus handling when clicking buttons in the timeline, Duplex devices should now work in calls, notifications now work on Haiku and a few more.

Now please stop asking for edits! :D

Cos discovers the /addwidget command in Element Web

Cos offered:

Public service announcement: Widgets are awesome. You can use /addwidget <url> in Element Web to add any web page in a iframe to the sidebar of Element Web. They get default name "Custom Widget" but you can rename them from /devtools menu. Very useful for group calendars, status pages and other info related to Matrix rooms.


Neil announced:


  • Social Login

    • We’ve concluded most of the development on Social Login, and tested it last weekend on the FOSDEM deployments. We found that over 50% of new accounts used it to register! We’ll be deploying Social Login to in the near future after polishing some final pieces on iOS.
  • Spaces

    • We’re iterating on the user experience for Spaces, first focusing on setting up, sharing and joining public spaces.


  • VoIP branches merged to develop on iOS and & Android - please test voice & video calling if you have the android develop build, or testflight for iOS will be coming soon. More complex scenarios with multiple devices are particularly useful to test, eg. do other devices stop ringing when you answer on a different one?


  • 1.7.21-rc.1 is now available at, including:

    • Fixed screen sharing in VoIP calls

    • Added window vs. full screen sharing option in VoIP calls

    • Fixed event permalinks to show link text instead of a room pill

  • 1.7.21 planned for release on Monday (15 Feb)

  • Element Desktop nightly builds are now using Electron 11

    • Please report any issues you notice so we can address them before the next Element release


  • 1.2.1 has been submitted to Apple. TestFlight should be available from tomorrow:

    • All new VoIP stuff described above

    • Handle User-Interactive Authentication for delete device and adding user 3pid.

    • Improve grace period management and setup Cross-Signing after login if possible when using SSO.

  • XcodeGen integration into the Element-iOS codebase is almost complete. From next week, we will not have merge conflicts on the pbxproj files. This also means better control on build settings.


  • Initial sync work improvements: performance is far better regarding RAM usage and stability (especially true for large accounts), though duration is still a concern.

  • Started working on running integration tests via CI.

  • 1.0.17 released, fixing a join over federation bug. Expect 1.0.18 next week.

Dept of SDKs and Frameworks 🧰


Ruma is a set of Rust library crates around Matrix

jplatte offered:

In the last two weeks,

Dept of Ops 🛠


This Ansible playbook is meant to easily let you run your own Matrix homeserver.

Slavi told us:

Thanks to @Peetz0r, matrix-docker-ansible-deploy can now install a bunch of tools for monitoring your Matrix server: the Prometheus time-series database server, the Prometheus node-exporter host metrics exporter, and the Grafana web UI.

To install these services, follow our Enabling metrics and graphs (Prometheus, Grafana) for your Matrix server docs page.

Dept of Interesting Projects 🛰️


MTRNord offered:

This is a super early announcement.

As now Spaces exist and are kind of testable if you know how I went ahead to plan organizing my 200 rooms I currently have into spaces and realized soon that I will have A LOT of nested Spaces.

So I am now starting to write a tool to generate these spaces easily from a folder structure and exporting them.

You may ask why not a yaml or json format: Simply to more easily allow forking of existing collections. A folder structure is much easier to do a diff over in git than file content.

Feel free to join for discussions or have an eye on where at the time of writing this only an example of the spaces folder structure exists.


MTRNord reported:

Small update time:

We are currently starting to add some documentation to it over at

It at time of writing still very barebones but over the next few weeks the goal is to add the Code of Conduct as well as a server admin guide on how to use this.

Dept of Guides 🧭

matrix-appservice-irc sprouts a book

Half-Shot said:

Hi folks! I'm happy to say that after many years of fielding IRC bridge support questions, the bridge team has now written the book on it. A markdown book! Using the latest mdbook tech we've written a draft of a usage guide and a server administration guide for the bridge and would value feedback on how we can make it better. This could be typos that I have strewn about it, or suggesting new content.

The draft is hosted at:

and the PR is:

Final Thoughts 💭

FluffyChat is a cute cross-platform matrix client. It is available for Andorid, iOS, Web and Desktop.

Shine reported:

If you have a 3D printer and want to express your love for Fluffychat with a nice badge, you can download the necessary files here ^_^

Freecad source file included for those who need some modifications.

(Yes, it's older, but I never TWIM'd it 🤦‍♀️)

sorunome shared:


Dept of Ping 🏓

Here we reveal, rank, and applaud the homeservers with the lowest ping, as measured by pingbot, a maubot that you can host on your own server. Join to experience the fun live, and to find out how to add YOUR server to the game.

RankHostnameMedian MS

That's all I know 🏁

See you next week, and be sure to stop by with your updates!

NextPage 2