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.
Foundation
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 🗳️
The votes have been counted! Introducing the first elected Governing Board of the Matrix.org 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: https://matrix.org/blog/2024/06/election-results/
Dept of Clients 📱
Kazv (website)
nannanko announces
kazv v0.3.0 has been released.
Added
- Support displaying read receipts. https://lily-is.land/kazv/kazv/-/merge_requests/83
- Display edited version of events. https://lily-is.land/kazv/kazv/-/merge_requests/84
- Collapse nickname and avatar of messages from the same sender. https://iron.lily-is.land/D14
- Post read receipts when the room page is visible. https://iron.lily-is.land/D17
- Open link when clicked on. https://iron.lily-is.land/D18
- Display unread indicator in room list. https://iron.lily-is.land/D19
- Display edited version of events. https://iron.lily-is.land/D5
- Display invited room at the top of RoomListView. https://iron.lily-is.land/D32
- Make all secondary pages closable. https://iron.lily-is.land/D23
- Support enabling encryption in a room. https://iron.lily-is.land/D33
- Add functionality to parse matrix.to links. https://iron.lily-is.land/D34
- Optimize style for Device.qml. https://lily-is.land/kazv/kazv/-/merge_requests/95
- Differentiate between messages with and without sound. https://iron.lily-is.land/D21
- Implement event editing. https://iron.lily-is.land/D22
- Activate the corresponding room when clicking on notification. https://iron.lily-is.land/D24
Fixed
- Fix some type errors in ConfirmUploadPopup.qml. https://lily-is.land/kazv/kazv/-/merge_requests/88
- Fix type error in AsyncHandler.qml. https://lily-is.land/kazv/kazv/-/merge_requests/98
- Stop click leaking from sticker picker. https://iron.lily-is.land/D29
Internal changes
- Remove explicit compiler version in CI script. https://lily-is.land/kazv/kazv/-/merge_requests/93
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 pub.dev 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 https://github.com/element-hq/element-x-android/releases/tag/v0.4.14. 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 ofmitmproxy
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 | <------` | +-----------+
In terms of the impact this project has had:
- it has allowed us to test the SDKs to reproduce tricky "unable to decrypt" (UTD) scenarios which we couldn't otherwise replicate. The NSE bug was reproduced via a complement-crypto test which semi-randomly performed high-level operations like restarting clients and sending messages in a multiprocess environment to try to trip up the SDK code.
- it has allowed us to write regression tests for UTDs such as:
- it has been instrumental in identifying other logic errors in client SDKs: CVE-2024-34353 was initially identified via a complement-crypto test.
- it has also reproduced server-side bugs which would prevent E2EE from working correctly.
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 #libmatrix:rory.gay!
- 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 cgit.rory.gay!
- All contributions are more than welcome, be it documentation, code, anything! Perhaps, example usecases, bots, ...?
- Discussion, suggestions and ideas are welcome in #libmatrix:rory.gay (Space: #mru-space:rory.gay)
- 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.
Added
- Add action to send different to-device messages to multiple devices. https://iron.lily-is.land/D25
- Support encrypting olm separately for each device. https://iron.lily-is.land/D26
- Send only relevant ciphertext to each device when sharing room keys. https://iron.lily-is.land/D27
Internal changes
- Fix not pushing code for branch commits. https://iron.lily-is.land/D30
- Exclude tests, testfixtures and examples from coverage report. https://iron.lily-is.land/D31
- Split each test into its own executable. https://iron.lily-is.land/D35
Dept of Built on Matrix 🏗️
Acter
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 https://neilalexander.dev/2024/06/05/canonical-json
Matrix Federation Stats
Slavi says
collected by MatrixRooms.info - an MRS instance by etke.cc
As of today,
9397
Matrix federateable servers have been discovered by matrixrooms.info,2860
(30.4%
) of them are publishing their rooms directory over federation. The published directories contain160776
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 | doctoruwu.uk | 207.5 |
2 | 4d2.org | 208 |
3 | awawawawawawawawawawawawawawawawawawawawawawawawawawawawawawaw.gay | 215 |
4 | girlboss.ceo | 222.5 |
5 | uwu.sulian.eu | 258.5 |
6 | nerdhouse.io | 271 |
7 | aguiarvieira.pt | 289 |
8 | maunium.net | 307.5 |
9 | matrix.jayryn.de | 343 |
10 | productionservers.net | 354 |
#ping-no-synapse:maunium.net
Join #ping-no-synapse:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.
Rank | Hostname | Median MS |
---|---|---|
1 | conduwuit.daedric.net | 78 |
2 | doctoruwu.uk | 88 |
3 | matrix.jayryn.de | 91 |
4 | girlboss.ceo | 111 |
5 | awawawawawawawawawawawawawawawawawawawawawawawawawawawawawawaw.gay | 119 |
6 | nerdhouse.io | 140 |
7 | craftingcomrades.net | 170 |
8 | matrix.its-tps.fr | 190.5 |
9 | aguiarvieira.pt | 218 |
10 | spritsail.io | 219 |
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