๐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:
- MSC3659: Invite Rules
- Closed by the author due to discontinuation of development.
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 hereObviously 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
orwasm32-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 calledmatrix-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 andmatrix-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 usesmatrix-sdk-crypto
via thematrix-sdk-crypto-wasm
bindings (which, unlikematrix-sdk-ffi
, compiles to WebAssembly and aims at running on a JavaScript host withwasm-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
, orhello.world
. Also, a room with version42
can be upgraded to a room with the version7
, yup. Thanks Matrix specification. A room then has a successsor and a predecessor. The successor is set via them.room.tombstone
state event, and the predecessor is set via them.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
oruvenv 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 contain18975
rooms.Stats timeline is available on MatrixRooms.info/stats
๐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.
Rank | Hostname | Median MS |
---|---|---|
1 | codestorm.net | 200.5 |
2 | bi-vibes.com | 209 |
3 | neko.dev | 232 |
4 | vengeful.eu | 234 |
5 | nerdhouse.io | 247.5 |
6 | nheko.im | 251.5 |
7 | nexy7574.co.uk | 272 |
8 | haise.uk | 315.5 |
9 | envs.net | 321 |
10 | nplusc.de | 343 |
๐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