๐Ÿ”—Matrix Live S11E01 - Introducing Project Aurora

๐Ÿ”—Dept of Status of Matrix ๐ŸŒก๏ธ

Matthew reports

The EU adopted the European Commission's proposal today for cybersecurity crisis management - which proposes Matrix for cross-EU communication: "On this basis, Union-level actors should use solutions based on the Matrix protocol for real-time communication". https://digital-strategy.ec.europa.eu/en/news/eu-takes-step-further-cybersecurity-crisis-management

๐Ÿ”—Dept of Spec ๐Ÿ“œ

Andrew Morgan (anoa) {he/him} announces

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://spec.matrix.org/proposals.

๐Ÿ”—MSC Status

New MSCs:

MSCs in Final Comment Period:

  • No MSCs are in FCP.

Accepted MSCs:

  • No MSCs were accepted this week.

Closed MSCs:

See the list of MSCs with proposed final comment period here!

๐Ÿ”—Spec Updates

A couple new MSCs above, both related to enhanced bot functionality it seems.

Otherwise, the week has been fairly quiet with the usual low hum of activity across different MSCs slowly moving forwards. The SCT is continuing to focus on MSCs related to moderation (with some custom emotes and stickers work sprinkled in).

๐Ÿ”—Dept of Trust & Safety โš–๏ธ

๐Ÿ”—Policy Server

TravisR reports

A brief policy server update: with Synapse v1.131.0, the policy server is now consulted on events and messages in rooms that have the policy server configured. If you're previously installed the now-deprecated policyserv_spam_checker module, it's time to upgrade Synapse to v1.131.0 or higher and uninstall the module.

If you were using the module for autoredactions, your policy server or other similar tool may need to be configured/set up for sending them. The module will not send redactions in Synapse v1.131.0 or higher.

๐Ÿ”—Invites filtering in Synapse

Half-Shot announces

From the dept. of making invites not suck. We've been bashing away at MSC4155, and are happy to announce that Synapse has now merged an implementation of it. This now means that once you enable this MSC in your config file, you can start filtering invites based on users or servers that you'd like to receive it from. I encourage everyone to read and feedback on the MSC, but this should hopefully prove to be immensely helpful for folks :)

For folks trying this at home, you'll need to:

  • Be on bleeding edge Synapse, or the next version.
  • Alter your synapse configuration to have experimental_features.msc4155_enabled: true
  • Edit your account data (such as using /devtools) to include a new entry for org.matrix.msc4155.invite_permission_config. The format is documented here

Obviously this is an experimental feature on bleeding edge, so there may be dragons and your cat may be formatted.

๐Ÿ”—Meowlnir

nex (it/she) ๐Ÿฆˆ๐Ÿˆ๏ธ๐Ÿณ๏ธโ€โšง๏ธ announces

At the start of this week, Meowlnir finally got its MSC4284 policy server implementation merged. Now, if you run your own Meowlnir bot, you can enable a policy server in your protected rooms, which adds an additional, even stronger layer of protection to your rooms. You can see the pull request here, and you can read more about policy servers here.

See more about Meowlnir: https://docs.mau.fi/meowlnir/

๐Ÿ”—Dept of Clients ๐Ÿ“ฑ

๐Ÿ”—Element X iOS (website)

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

Doug says

This week weโ€™ve been working on version 25.06 which now has a second RC (and may receive a third before hitting the store on Monday). This version of Element X brings:

  • The ability to configure calls to use the Earpiece for audio instead of the Speaker.
  • The native audio device picker is now used in the Element Call settings instead of the "not so well" working WebView one.
  • The room list no longer shows duplicated rooms when searching and upgraded rooms now show links for tombstone events in the timeline.
  • Syncing of the Media Previews and Invite Avatars settings via your account data.
  • Declining invites from the room list is now quicker.

Along with this, the work on Threads continues to progress nicely in the background!

๐Ÿ”—Element X Android (website)

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

ganfra reports

This week, we've been focused on version 25.06. While most of the work centered around bug fixes and developer experience improvements, here are two noteworthy highlights:

  • As on iOS, the call audio device behavior has been improved. We achieved this by handling most of the audio logic on the native OS. The device list is computed in the native app, which then forwards the options to the EC WebView. This allows the audio to play through the correct channel and fixes a very fundamental issue where the volume rocker during a call adjusted the call volume channel, but Element Call would output the sound through the media channel of the phone.
  • You can now moderate another user directly from the timeline, no need to navigate multiple screens to access the moderation actions.

Otherwise we are working on handling upgraded rooms, meaning removing duplicates from the room list, and managing links between rooms.

๐Ÿ”—Element Web/Desktop (website)

Secure and independent communication, connected via Matrix. Come talk with us in #element-web:matrix.org!

Matthew says

The Element Web team went to DINUM's HackDays 2025 hackathon this week and decided to have a go at spiking a prototype of Element X Web, using the shiny new matrix-rust-sdk-wasm bindings which were contributed by Filament at the end of last week, building on top of Matthew's Aurora rust-sdk+tauri test jig.

The whole exercise was way too much fun, and made some major breakthroughs in porting hunks of Element Web's actual MVVM UI components (RoomList, MemberList) to run on matrix-rust-sdk in browser - as well as hooking up a placeholder timeline & composer and a bunch of placeholder UI. The resulting experiment is released as AGPL at https://github.com/element-hq/aurora - please see Matrix Live for a more comprehensive tour and explanation of what we did :)

๐Ÿ”—Dept of VoIP ๐Ÿค™

๐Ÿ”—Element Call (website)

Native Decentralised End-to-end Encrypted Group Calls in Matrix.

Timo K. says

Cracking the iOS Earpiece Mystery

This week, the Element Call team tackled a fundamental but challenging area: audio device selection.

๐Ÿ”Š Between WebViews, mobile OS quirks, browser inconsistencies, and audio APIs... it's a wild world out there!

While we've made countless bug fixes and minor improvements, we also uncovered one juicy anecdote worth sharing:

๐Ÿ‘‰iOS really doesn't want to expose the earpiece in a WebView.

No matter what we tried, audio just wouldn't route through the top speaker (like it does in native phone calls)

๐Ÿ’ก But we got creative!

By using the Web Audio Context API and panning audio to one stereo side, we managed to simulate earpiece-style output with surprisingly good results.

๐ŸŽ‰ In the next version of Element X for iOS, the earpiece will be available in audio settings! This is a big step toward making MatrixRTC-powered calls feel just like traditional phone calls.

๐Ÿ“ฑ๐Ÿ”ง One step closer to seamless, native-like VoIP on Matrix!

๐Ÿ”—Dept of SDKs and Frameworks ๐Ÿงฐ

๐Ÿ”—matrix-rust-sdk (website)

Your all-in-one toolkit for creating Matrix clients with Rust, from simple bots to full-featured apps, with bindings to Swift, Kotlin, WebAssembly, Go and more

Ivan ๐Ÿฆ€ reports

Hello there, how nice to meet you once again! This past week and this current week were a bit busy, but we did achieve a couple of awesome things. Let's go through them, should we?

๐Ÿ”—WebAssembly

Mental things are happening on this side! Let's provide a bit of context here, would you? The Matrix Rust SDK is WebAssembly compatible, which means it compiles to targets like wasm32-unknown-unknown or wasm32-wasi. This is ensured by having special jobs on our CI (Continuous Integration) servers. We use a special crate for the SDK bindings, it's called matrix-sdk-ffi, and is able to generate bindings for Swift, Kotlin and other platforms, by using UniFFI, a project we have contributed to greatly (notably by providing procedural macros support, or async support!). matrix-sdk-ffi was not yet intended to be compiled to WebAssembly. That was a long-term planned project, but it requires to add support in UniFFI first, which isn't the case as we speak. However, Element and Filament have partnered to improve UniFFI and matrix-sdk-ffi on that specific front (Filament is doing the majority of the work, kudos to them)! Lastly, this week, the French government was running the HackDays for 3ย days. In this hackathon, some people did hack on Matrix. And guess whatโ€ฆ? They have been able to use the Matrix Rust SDK compiled to WebAssembly via UniFFI, to build a reboot of Elementย Web in only 3ย days! Let's just enjoy the output of this hackathon a moment please.

The base:

  • Elementย Web is built on top of matrix-js-sdk, which is 10ย years old now! matrix-js-sdk is using a bit of the Rust SDK as it uses matrix-sdk-crypto via the matrix-sdk-crypto-wasm bindings (which, unlike matrix-sdk-ffi, compiles to WebAssembly and aims at running on a JavaScript host with wasm-bindgen), but we want more,
  • Elementย Web uses too much memory: 782Mib for my account with Firefox nightly,
  • Elementย Web is slow to start: it takes almost 10ย seconds to load on my account, 4G network.

The result of the hackathon:

  • The experimental client loads much much faster, and provides instant login and sync: it loads in less than a second now, so 10ย times faster!
  • The experimental client uses wayyyy less memory: 115Mib, so 6.8ย times less!,
  • The experimental client supports de facto a solid, secure and safe set of API, which includes the most stable e2e-encryption features, sliding sync (!), an event cache, room list, a full featured timeline, reactive programming and so on.

This is a proof-of-concept for the moment, but it seems very promising, and we are extremely happy to see all the progresses that have been made on that front! As I said, this is mental!

It's gonna be complex to list all patches, but here is a list just for you: #5183, #5170, #5169, #5159, #5158, #5156, #5089, #5085, #5083, #5082.

๐Ÿ”—Threads

The hot topic currently is providing Threads support inside the Rust SDK. On that front, many progresses have been made:

  • #5153 The thread summary contains a couple of useful information to quickly glance at threads. With this new set of patches, it is now possible to get the missing ones: number of replies in thread, and the latest thread event!
  • #5126, #5152, #5165 While working on plugging Threads to the Event Cache, a possible bug has been found in case the underlying LinkedChunk is lazy-loaded: when an in-memory event is replaced by another event, this operation is propagated to the storage.
  • #5160 The SDK suffers of some SQLite locking issues. A solution is being experienced by using the busy_timeout pragma. This solution is now also applied to the event cache store. If you see a lock issue with SQLite, please reach us!

๐Ÿ”—Room upgrades

Room upgrades are a reasonably important topic too. Basically, a room can be upgraded to another version. Fun part is: rooms can't be compared, because the version can be 42, or hello.world. Also, a room with version 42 can be upgraded to a room with the version 7, yup. Thanks Matrix specification. A room then has a successsor and a predecessor. The successor is set via the m.room.tombstone state event, and the predecessor is set via the m.room.create state event. Don't forget to fetch them. Don't want to bother with the details, but it's important to protect against malicious or buggy homeservers, as it can be a serious attack vector: it's possible to create loops in room upgrades for example. We believe the SDK is now more protected with #5186 (and #5150).

๐Ÿ”—Media

Galleries and medias!

  • #5125 Implementation of MSC4274 is improving, and almost reaches its end. The Timeline::send_gallery method is now a thing! How cool is that?
  • #5163 Like the previous item, but for the FFI bindings, oh yeah.
  • #5119 The SDK now asks your homeserver what is the maximum allowed size for uploading media. Before this patch, a media was uploading until the server rejects it, which was quite unpleasant, isn't it? That was a waste of time, for the user, for the client, and for the server. Now the client checks if the homeserver will accept this media before starting to send anything. Much better!

๐Ÿ”—Dept of Events and Talks ๐Ÿ—ฃ๏ธ

Thib (m.org) announces

The Call for Proposals for the Matrix Conference 2025 is live!

We have quite a few interesting proposals already, but don't be shy! You can submit one and update it down the line. We want to hear from everyone!

๐Ÿ”—Dept of Interesting Projects ๐Ÿ›ฐ๏ธ

๐Ÿ”—New Matrix Server sanity checker

spaetz announces

While the federationtester is a great tool, it does not really test client endpoints and it does not help sanity checking MatrixRTC setups. Enter testmatrix (codeberg repository here)!

It will perform a couple of sanity checks and hopefully be able to deliver you a token that you can easily use in the livekit connection tester.

Usage: ./testmatrix sspaeth.de If you want to test the jwt auth system to get a livekit token, you will need to add credentials of a valid user, such as ./testmatrix sspaeth.de -u @spaetz:sspaeth.de -t mct_COMPATTOKENHERE Finally, there is a -q switch which makes it a bit less verbose.

It works for me and my setup, so I would be interested in feedback in case it explodes in the face of your server. It can also be installed by pip install testmatrix or uvenv install testmatrix (if you have uvenv installed)

๐Ÿ”—Matrix Federation Stats

Aine [don't DM] says

collected by MatrixRooms.info - an MRS instance by etke.cc

As of today, 13105 Matrix federateable servers have been discovered by matrixrooms.info, 3764 (28.7%) of them are publishing their rooms directory over federation. The published directories contain 18975 rooms.

Stats timeline is available on MatrixRooms.info/stats

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.

๐Ÿ”—#ping:maunium.net

Join #ping:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.

RankHostnameMedian MS
1codestorm.net200.5
2bi-vibes.com209
3neko.dev232
4vengeful.eu234
5nerdhouse.io247.5
6nheko.im251.5
7nexy7574.co.uk272
8haise.uk315.5
9envs.net321
10nplusc.de343

๐Ÿ”—That's all I know

See you next week, and be sure to stop by #twim:matrix.org with your updates!

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

The Foundation needs you

The Matrix.org 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 matrix.org homeserver and hosts several bridges for free. It fights for our collective rights to digital privacy and dignity.

Support us