Matrix Live S09E30 — The Account Migrator

The Foundation is hard at work to let you move your Matrix account around. Tadzik walks us through a pragmatic solution to several problems we have.


Policy and Regulations blog series

Denise [away] says

we're starting a policy and regulation blog series over on the Foundation's blog. Over the next few months I'll be covering various pieces of legislation that are already in place, as well as incoming regulation, and what it all means for Matrix.

Dept of elections 🗳️

Josh Simmons (he/they) says

The votes have been counted! Introducing the first elected Governing Board of the Foundation 🎉

Thanks to everyone who ran and everyone who voted, and congratulations to those who have been elected!

This is a huge milestone for Matrix, and now we can tackle the challenges we face with greater community involvement:

Dept of Clients 📱

Kazv (website)

nannanko announces

kazv v0.3.0 has been released.



Internal changes

FluffyChat (website)

Krille-chan reports

🥳 FluffyChat v1.21.0 has been released 🥳

The new FluffyChat has several performance improvements, including a fix which should speed up the whole app if you have a lot of megolm sessions.

Also FluffyChat v1.21.0 includes a new search and gallery feature for chats. You can now search for specific messages or browse the shared photos in a conversation.

Also please note that the default network request timeout has been changed. Before FluffyChat ran into a timeout if the server needed more than 30 seconds to send the initial sync. This was probably too optimistic so the timeout has now been set to 30 minutes. This should allow much more users with very large accounts to log in. Feel free to share your feedback.

All Changes

  • feat: Enable download images on iOS, not only share images (krille-chan)
  • feat: Search feature (krille-chan)
  • build: Update record package (krille-chan)
  • build: Use correct pubspec.yaml format for hosted dependency (krille-chan)
  • build: Use matrix sdk main branch (krille-chan)
  • chore: Change default timeout to 30 min (krille-chan)
  • chore: Go back to matrix sdk (Krille)
  • chore: Hotfix create missing objectbox (Krille)
  • chore: Increase default network request timeout (Krille)
  • chore: Make bottomnavbar labels always visible (krille-chan)
  • chore: Nicer message animation (krille-chan)
  • chore: Only load last event sender if necessary (Krille)
  • chore: Set a maxsize for textfields (Krille)
  • chore: upgrade flutter to 3.22.0 (lauren n. liberda)
  • chore: upgrade flutter to 3.22.1 (lauren n. liberda)
  • ci: run flutter gen-l10n on code_tests (lauren n. liberda)
  • design: Improve design of Voice Messages and add 1.25 as speed (Krille)
  • fastlane: i18n ru (Yurt Page)
  • fastlane: improve full_description.txt (Yurt Page)
  • fix: Broken localization with empty strings in it (krille-chan)
  • fix: FakeMatrixApi check (krille-chan)
  • fix: mxc reactions not rendered correctly (krille-chan)
  • fix: Stickers from gboard have black background (Krille)
  • fix: voip code breaking from 0.28 (td)
  • refactor: Delete database file on failed app start (krille-chan)
  • refactor: Display better command hints (Krille)
  • refactor: Improve performance of chat list (krille-chan)
  • refactor: Precache theme and directchatmatrixid to improve performance in chat list item (krille-chan)
  • refactor: Update to Matrix Dart SDK 0.29.9 (Krille)
  • Translated using Weblate (Croatian) (Milo Ivir)
  • Translated using Weblate (Czech) (Jozef Mlich)
  • Translated using Weblate (Georgian) (Nicholas Winterhalter)
  • Translated using Weblate (German) (Gian Klug)
  • Translated using Weblate (Korean) (kdh8219)
  • Translated using Weblate (Latvian) (Edgars Andersons)
  • Translated using Weblate (Norwegian BokmÃ¥l) (sunniva)
  • Translated using Weblate (Turkish) (Oğuz Ersen)

Element X iOS (website)

A total rewrite of Element-iOS using the Matrix Rust SDK underneath and targeting devices running iOS 16+.

Mauro Romito announces

  • QR Code login works is completed we are just waiting for matrix server to fully support native OIDC login, before rolling out the feature
  • Message queue work is also almost completed, now messages will be automatically queued for resending when internet connection comes back, without the need of taking any manual action
  • We are also working on storing and restoring composer drafts for each room, so no need to worry about losing anything that has not been sent yet if you browse another room or close your app
  • Great news also for element call integration, we are implementing native call notifications (with ringing), and a call log for DMs. Also starting a call will also be displayed as an event in the timeline.

Element X Android (website)

Android Matrix messenger application using the Matrix Rust SDK and Jetpack Compose.

ganfra reports

  • Release 0.4.14 is available here Will be on the store soon.
  • We have added a quick implementation of sharing, so you can now send text and media from other applications.
  • QR Code login works is completed we are just waiting for matrix server to fully support native OIDC login, before rolling out the feature
  • Message queue work has been started, messages will be automatically queued for resending when internet connection comes back, without the need of taking any manual action.
  • Great news also for element call integration, we are implementing native call notifications (with ringing). Also starting a call will also be displayed as an event in the timeline.

Dept of Encryption 🔐

Complement Crypto (website)

Kegan reports

Way back in December I TWIM'd I was working on a new project called complement-crypto which aims to write an extenstive, exhaustive set of end-to-end E2EE tests for Matrix clients. The aim of this work is to ensure encryption in Matrix Rust SDK in particular is robust to all kinds of failure modes: from connectivity blips over federation, server restarts and corrupted data, to actively malicious homeservers. Work has progressed significantly in the intervening 6 months:

  • The test suite runs in both Rust SDK and JS SDK CI pipelines to detect regressions. This required a lot of work enabling conditional compilation (so you don't need to run JS code in rust SDK) and improving test reliability to a sufficient standard that it can be relied upon.
  • It now has full federation support, spinning up sliding sync proxies for both homeservers if needed.
  • It has a comprehensive RPC client process to test ungraceful shutdowns (e.g what happens if your client gets SIGKILL'd?)
  • When things do go wrong, you have powerful debugging tools thanks to using mitmproxy for all communications, in addition to client log files and container logs. The use of mitmproxy is not only useful for debugging, but is also used as a test synchronisation primitive to reduce flakiness (e.g do X when you see the HTTP response to Y), as an assertion tool (e.g ensure the client has uploaded one-time keys by looking for the request), and as an adversarial tool (e.g modify the response returned to the client).

The overall architecture looks like:

     Host        |       dockerd           
                 |                          +-----------+      
                 |                     .--> | ss proxy1 | <------.
 +----------+    |    +-----------+    |    +-----+-----+        V
 | Go tests | <--|--> | mitmproxy | <--+--> | hs1 |          +----------+
 +----------+    |    +-----------+    |    +-----+          | postgres |
                 |                     +--> | hs2 |          +----------+
                 |                     |    +-----+-----+        ^
                 |                     `--> | ss proxy2 | <------`
                 |                          +-----------+      
Debugging a test run in `mitmweb`

Debugging a test run in mitmweb

In terms of the impact this project has had:

There's still more work to be done, including:

  • finishing off the test hitlist,
  • supporting device verification tests,
  • adding adversarial tests (e.g malicious homeserver tests),
  • adding targets beyond rust/JS SDK (matrix-bot-sdk, mautrix, and others). A perfect client can still receive UTDs if the sending client didn't encrypt correctly, and the sender may be on a different codebase.

This has been just one part of our work reducing UTD errors. Another significant part has been aggressively analysing bug reports in the wild to identify common failure modes. To that end, please report any 'unable to decrypt' messages you see and include log files with your report. Please also try to get the sender to submit a bug report. I may reach out to you if I need additional information. These bug reports not only guide our priorities, but have also helped us identify obscure failure modes which we cannot reproduce via complement-crypto.

Dept of SDKs and Frameworks 🧰

Rory&::LibMatrix (.NET 8 matrix bot/client library/SDK)

Emma [it/its] announces

Some minor changes, this week's update will be mostly project/management updates!

Call for help! (Update)

It's been decided to split the event rewrite up into multiple phases/parts. The original vision of the changes turned out to be far too optimistic, and we've run into some language-related challenges trying to implement them. We'll still try to implement those changes, but this might depend on compile-time source generation or similar endeavours.

If this sounds like a fun challenge to you, or want to discuss and shape the semantics of these changes, feel free to join in!

Changes (Projects & Policies)

Some policy changes, and some new projects have been started within the LibMatrix source tree:

  • New workflow: Use of feature branches

Keeping up to date with LibMatrix is hard, because the chance of updating to a partially finished commit is too high. To address this, we're moving to a "main branch is stable" model, with partial implementations on deciated branches so developers can keep up and prepare for those changes.

  • New subproject: Writing of full documentation

We want to improve the developer experience by offering documentation of features right in your editor, without having to reference the backing source. This should enable users who are less familiar with Matrix' internal structures to still be able to implement their deepest wishes.

  • New subproject: Workspace and structural cleanup

The LibMatrix source tree became a mess as the project grew. We want to restructure it to be maintainable, and also far more friendly to those who might want to contribute. If this sounds like something you'd like to help with or would love to offer feedback on, please do feel free to reach out at!

  • Splitting up of subproject: Event handling rewrite

Due to the large amount of complexity and work, we've decided to first start rewriting the inner implementations of events. This should massively improve the end user experience, as custom event content is no longer lost if edited, as well as no longer having to worry about desyncs between actual event content and what you might see in an editor! Next to this, you will likely see performance improvements when dealing with accessing the contents of events! Longer-term changes still include static typing of event collections, especially around single content type collections such as fetching a room's member list, which should also see a large performance uplift when fetching!

Changes (Main release)

  • All dependencies have been updated. End users should not notice any differences as this is a maintenance task, but this does potentially enable some new usecases and squashes some bugs and security risks originating from outdated dependencies.

And, as always:

  • The code is available at!
    • All contributions are more than welcome, be it documentation, code, anything! Perhaps, example usecases, bots, ...?
  • Discussion, suggestions and ideas are welcome in (Space:
  • Got a cool project that you're working on and want to share, using LibMatrix? Be sure to let us know, we'd love to hear all about it!

Libkazv (website)

nannanko announces

libkazv v0.5.0 has been released.


Internal changes

Dept of Built on Matrix 🏗️


ben announces

It's been a while since our last blog post of updates in Acter and, oh boy, a lot has happened. Just to scratch the surface here, we have:

  • Totally redesigned the Invite flows, including easier "all from spaces" and using super invites to allow external invitations
  • Upgraded the registration wizard to include a default registration token and recommendation to link an email address for better recovery options
  • A new flow for observing and managing the join rules of spaces and chats
  • we took a fresh look at the chat and cleaned up the design, including some nice new messages at the start of the chat
  • you can not only bookmark chats, but also spaces now, to keep things more organized
  • we added a few more labs: chat read markers & end-to-end-encryption-backup
  • and we are seeing the finishing line for the task lists features to leave the labs section

More details and video screens on today's blog post.

We have also expanded our team, in particular on the community growth side, and are about to open another position for a product designer ... if that's you or someone you know, stay tuned!

Matrix in the News 📰

Comments on Canonical JSON in Matrix

Matthew reports

Neilalexander has written an interesting analysis of Canonical JSON and how to improve it at

Matrix Federation Stats

Slavi says

collected by - an MRS instance by

As of today, 9397 Matrix federateable servers have been discovered by, 2860 (30.4%) of them are publishing their rooms directory over federation. The published directories contain 160776 rooms.

Stats timeline is available on

How to add your server | How to remove your server

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

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!

To learn more about how to prepare an entry for TWIM check out the TWIM guide.

The Foundation needs you

The Foundation is a non-profit and only relies on donations to operate. Its core mission is to maintain the Matrix Specification, but it does much more than that.

It maintains the homeserver and hosts several bridges for free. It fights for our collective rights to digital privacy and dignity.

Support us