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.
anoa offered:
Interrupting spec update!
Spec
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 https://matrix.org/docs/spec/proposals.
MSC Status
Closed MSCs:
MSCs in Final Comment Period:
- MSC2998: Room Version 7 (merge)
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 matrix.org in parallel which should result on spec.matrix.org hosting the unstable spec sometime early next week!
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!
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.
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 Matrix.to link in the chat header so you can switch off to your favorite Matrix client at any time.
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://miscworks.net/matrix-appservice-line
Discussion: #matrix-appservice-line:miscworks.net
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 https://carlschwan.eu/2021/02/23/neochat-1.1/
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 🙂 https://i.imgur.com/Z9vF9px.mp4
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 (@deepbluev7:neko.dev) 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!
Updates from the team:
Delight
Web
iOS
Android
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: https://github.com/pixlwave/Watch-The-Matrix
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/thisweekinmatrix:matrix.org
.
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 #kazv:tusooa.xyz.
Updates
In the past (how many?) weeks we ("tusooa and her longcat," we hope someday we can
remove this annotation :P):
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.
- Added related ebuilds to the overlay.
- Implemented streaming uploads for libkazv.
Made matrix-tencent-forward-bot support directly forwarding images
to the matrix room.
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 #opsdroid-general:matrix.org, raise an issue on GitHub and checkout the docs.
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 #caridina:cervoi.se to talk about it.
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 last.fm, 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!
jaywink said:
I created an Ansible role for installing Maubot via Docker - https://git.feneas.org/jaywink/ansible-maubot . Currently it only supports an Sqlite database, but pull requests are welcome for more configuration. Supports a pre-created client account.
ahq reported:
I've written a post introducing Hummingbard. https://hummingbard.com/hummingbard/introducing-hummingbard
This looks really interesting!
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: https://seirdy.one/2021/02/23/keeping-platforms-open.html
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 #ping:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.
Rank | Hostname | Median MS |
---|---|---|
1 | rollyourown.xyz | 420 |
2 | neko.dev | 465.5 |
3 | maunium.net | 480 |
4 | phys.ethz.ch | 481 |
5 | envs.net | 492.5 |
6 | mailstation.de | 738 |
7 | blackline.xyz | 891 |
8 | kif.rocks | 902 |
9 | casavant.org | 932 |
10 | aria-net.org | 1028 |
See you next week, and be sure to stop by #twim:matrix.org with your updates!
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 CONTRIBUTING.md file.
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 https://matrix.org/docs/spec/proposals.
MSC Status
Merged MSCs:
- No MSCs were merged this week.
MSCs in Final Comment Period:
New MSCs:
MSC3014: HTTP Pushers for the full event with extra rooms information
MSC3009: Websocket transport for client <--> widget communications
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/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
>~<
🦊
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: https://gitlab.com/famedly/services/hedwig
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 fixedSome dependency fixes have been merged
Sytest compliance:
Client-server APIs: 60%
Server-server APIs: 82%
As always, feel free to join us in #dendrite:matrix.org for general Dendrite chat or #dendrite-dev:matrix.org 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 matrix.org.
In addition to all the performance, stability, and social login improvements, there are two important things to note:
- If you use SSO, you will need update your configuration before upgrading; please see the link above for details.
- 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 thev1.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!
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.
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 translate.element.io!)
Lots of additional bugfixes and improvements
Join us in #niochat:matrix.org 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: https://gitlab.com/famedly/services/hedwig
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 (@deepbluev7:neko.dev) 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 matrix.org 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:
Delight
Social Login
- Social log-in has shipped to matrix.org, 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.
VoIP
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
Web
- Element 1.7.21 was released on Monday (15 Feb)
iOS
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
Android
We are preparing the release 1.1.0 which contains the work on VoIP
This release will also contain a lot of bug fixes
Ruma is a set of Rust library crates around Matrix
jplatte said:
This week,
@unseddd added the autodiscovery and public key validity endpoints to ruma-identity-service-api
@DevinR528 improved support for m.room.message event relations
@PunitLodha added get and set methods to Capabilities, improving forwards-compatibility
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.
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.
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 #synapse:matrix.org
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: https://github.com/JOJ0/synadm/releases
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: https://github.com/JOJ0/synadm
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: https://github.com/JOJ0/synadm#implementation-status--commands-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 #synadm:peek-a-boo.at!
Shine reported:
Dunno if twim worthy? Proton mentioned Matrix in https://protonmail.com/blog/whatsapp-alternatives/
Seems to be worthy, it's been included anyway!
Nico (@deepbluev7:neko.dev) 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: https://youtu.be/ahEWG4JCA1w
That indeed is an unusual way to get featured, well done NeoChat!
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 #ping:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.
Rank | Hostname | Median MS |
---|---|---|
1 | envs.net | 437 |
2 | midov.pl | 493 |
3 | kif.rocks | 582 |
4 | nicoll.xyz | 638 |
5 | maunium.net | 708 |
6 | rollyourown.xyz | 785 |
7 | utzutzutz.net | 912 |
8 | blackline.xyz | 975.5 |
9 | shortestpath.dev | 1194 |
10 | roeckx.be | 1516 |
See you next week, and be sure to stop by #twim:matrix.org with your updates!
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.
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 matrix.org 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.
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.
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.
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.
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!
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 fosdem.org 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 fosdem.org 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:
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:
There were four main components on the Matrix side:
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 stream.fosdem.org - 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 https://github.com/matrix-org/conference-bot/tree/main/web). Meanwhile the chat.fosdem.org 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 matrix.org 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:
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 #beerevent:fosdem.org, #cafe:fosdem.org and #food-trucks:fosdem.org 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 +fosdem:fosdem.org community which spanned all 1000 public rooms in the conference, as well as add the +staff:fosdem.org 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:
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 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!
Nico (@deepbluev7:neko.dev) announced:
Famedly (Matrix based application for German hospitals and clinics) seems to be getting positive feedback so far: https://medtech-zwo.de/aktuelles/nachrichten/nachrichten/famedly-ueberzeugt-mit-messenger-dienst-im-krankenhaus.html
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: https://en.wiktionary.org/wiki/datenkraken
They actually use
[matrix]–Protokoll
to refer to the Matrix protocol. The open and standardized Matrix protocol seems to be a big selling factor.
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 https://matrix.org/docs/spec/proposals.
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 (https://github.com/matrix-org/matrix-doc/pull/3002, https://github.com/matrix-org/matrix-doc/pull/3003), merging changelog representation with respect to the current idea of a global Matrix Spec version number (https://github.com/matrix-org/matrix-doc/pull/2992) 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.
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 #construct:zemos.net to learn more about bridges and lend a hand.
Jason
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. 😉
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
)
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: https://github.com/SchildiChat/schildichat-desktop
Matrix room: #schildichat-web:matrix.org
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 (@deepbluev7:neko.dev) 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 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:
Delight
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 matrix.org 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
- 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?
Web
1.7.21-rc.1 is now available at https://staging.element.io, 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
iOS
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.
Android
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.
Ruma is a set of Rust library crates around Matrix
jplatte offered:
In the last two weeks,
@DevinR528 fixed the push rule precedence for iterating a Ruleset
@jsparber added an unstable workaround for Synapse sometimes requiring authentication in the profile API (the spec says no authentication is required)
@NerdyPepper added an
event_type
accessor to our event enums@NerdyPepper added support for
m.room.message
events with custommsgtype
s
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.
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 #space-hub:nordgedanken.dev for discussions or have an eye on https://github.com/matrix-spaces-generator 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 https://docs.joinmatrix.rocks/users/what-is-keymaker.html
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.
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:
https://matrix-org.github.io/matrix-appservice-irc/latest
and the PR is:
https://github.com/matrix-org/matrix-appservice-irc/pull/1235
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 ^_^ https://www.thingiverse.com/thing:4550331/files
Freecad source file included for those who need some modifications.
(Yes, it's older, but I never TWIM'd it 🤦♀️)
sorunome shared:
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 #ping:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.
Rank | Hostname | Median MS |
---|---|---|
1 | envs.net | 347.5 |
2 | syn.steimel.info | 480 |
3 | matrix.xn--kll-sna.net | 491 |
4 | etke.cc | 682.5 |
5 | maunium.net | 692 |
6 | maescool.be | 708.5 |
7 | jupadr.de | 741 |
8 | matrix.godfreyhendrix.com | 1072.5 |
9 | shortestpath.dev | 1093.5 |
10 | queersin.space | 1180 |
See you next week, and be sure to stop by #twim:matrix.org with your updates!