Exciting to see the Swedish government leveraging Matrixβs interop properly: two independent agencies, FΓΆrsΓ€kringskassan and Trafikverket, have showcased seamless communication whilst respectively using Element and Rocket.Chat within their network.
π‘ It all started when eSam asked Element, Rocket.Chat and Mattermost to figure out a way to interoperate a few years ago. Now all three have converged on Matrix and eSam βhas the intention to recommend the public sector to establish the Matrix as a common standard for secure and interoperable communication between authorities.β πͺ
If you missed coming here this year, the good news is we have 3 more days, including towel day celebrations on Monday! If that's still too spontaneous, book your travel now for pentecost next year today!
Group photo of the Matrix Community Summit 2026 in Berlin
As per my last post in TWIM about Hammerhead, the project has now been renamed to Venator! There isn't a deeper reasoning to why other than I couldn't find any domains for "Hammerhead" that were memorable, nor think of a binary name for the CLI tool that wasn't trash. Plus the Venator-class is one of my favourite ships in Star Wars, soooo.
With the rename, the documentation has been moved to https://timedout.codeberg.page/venator, and the demo instance has been moved from hammerhead.nexy7574.co.uk to demo.thefifthfleet.net. The room's primary alias is now #venator:nexy7574.co.uk but the old Hammerhead alias still works too in case you're like me and will continue to mix up the names.
In terms of code changes over the past month, some highlights:
The CLI venatorctl has commands for most management operations available over the API, so you don't need to remember how cURL works.
Server notices - and by extension welcome messages upon registration - were implemented.
"Admin notifications" were implemented (in-band notifications from the server pertaining to important events, like new registrations).
A bit of new spec support (invite blocking, user/room/event reporting, earlier server notices, v12 default room version, read markers+receipts+typing indicators).
Support for systemd's watchdog.
A bunch of performance improvements regarding state, memberships, and authentication.
But something I wanted to highlight in particular is that Venator encountered storage issues. This was kind of devastating to discover during some stress testing, as I was hoping it wouldn't become an issue at all, let alone this early on. However, I think it might be a good thing that it happened not long after the first alpha release - since there's no compatibility guarantees until 0.1.0's stable release, that means I can go mad with a new schema. And that I did.
I've already implemented conditional compression on some parts of the database: event bodies that are over 512 bytes in size and have a mid-range or better compression gain will be compressed with deflate+LZ77 before being stored in the database. This yielded storage savings on the event content table of about 50% with the same test scenario that made me aware of the storage problem.
However, the bigger threat sill remains: Venator still stores full strings everywhere. As denoted in the issue linked, things like event IDs, room IDs, event sender user IDs, state keys, server names, etc. are all strings that are generally up to 255 chars each, and they are frequently repeated. Strings are big, they require N+1 bytes to store in postgres, and are generally slow too. This means that each event can possibly store a kilobyte of data that is just references to types and IDs. You know what doesn't require N+1 bytes to store? Integers.
After some brief research, I came up with a "short ID" model. Each repetitive identifier is mapped in a unique table to an integer, which itself is then referenced instead of the string. Event storage currently looks like this:
Column
Example value
room_id
"!vzDE5GnhIhncy8gpyeK4WFPVyeWvIh8JYeM3iqR8RV8"
event_id
"$TySB5FQUdZ3TFcGE0nLUwzvmtcRRGNirkAwhzYhz2CQ"
type
"m.reaction"
sender
"@this-week-in:matrix.org"
state_key
null
But, with short IDs, this is then changed to (example):
Column
Example value
room_nid
1
event_nid
2
type
3
sender
4
state_key
null
This yields absolutely insane space savings, as these references can be used outside of event-related tables too.
If you're particularly interested in this, I've got a short summary of how it works in the database's README, and I'll probably go into more detail as it evolves. You can also chat about it in the main room with me if you want. I won't go in too much detail in this TWIM post because this is a TWIM post, not an academic article (and there's no subway surfers on the side to keep your attention).
That's all I've got this time, progress is slow but steady while I'm working on more important projects and also finishing my semester. Keep an eye on the repository (perhaps leave a star :3) or at least the releases, and join the main room for live updates or getting help deploying your own instance.
Tuwunel 1.7.0 federates MSC3771 and MSC3773across storage, /sync v3, SSS v5, and the push gateway. Clients opting into unread_thread_notifications see per-thread counts; everyone else sees the merged total. Existing users may see a one-time bump in counts that previously sat at the main-context-only total.
One-time-key issuance now follows upload order per MSC4225, eliminating a class of stale-OTK failures on cross-server encrypted sessions; the legacy column drops on first read-write open and clients re-upload on /sync. Dehydrated devices persist fallback keys per MSC3814. BVollmerhaus's report on MSC2246 asynchronous media self-deadlocking is fixed.
Operators upgrading should note that per-cache defaults were rebalanced from observed utilization (#123). Anyone running cache_capacity_modifier above the 1.0 default should consider stepping it down; taking no action may cost 25% to 50% more memory.
Hello TWIM! You may have been wondering what has been happening with Nexus, as there hasn't been a TWIM entry in a while. What I've been doing is making a +3162 -2366 PR to remove a library that was quite extensively used in Nexus. The reason for this was that library, although helpful, wasn't very well written, and had a lot of bugs. So, I rewrote some Nexus code to not need it anymore! As an effect of this, we now have support for playing video and audio messages, a lot of UI improvements, and a lot of bug fixes!
We merged the PR yesterday, and whilst there are some bugs I need to fix, I'm happy to say it's working quite well. So now, back to preparing for an alpha release in the next few weeks. See you next TWIM!
Here comes Fractal 14.rc. This release candidate comes with a fair amount of quality of life improvements:
The sidebar room filter has been improved: Enter goes to first room result, and thereβs an empty state when no results match the term.
The performance of the room list has also been improved, it should be mostly noticeable for accounts that have joined a lot of rooms.
Informative events (Unable to decrypt, server noticesβ¦) are now styled differently to reflect their special nature and differentiate them from regular text messages that anyone can send.
Calls are rendered in the timeline and incoming calls trigger a notification. We still donβt support calls, but at least now you know when someone is calling and can open another client to answer.
As usual, this release includes other improvements, fixes and new translations thanks to all our contributors, and our upstream projects.
This time we brought our codebase to the SPA, to get some general stability and architectural improvements as:
Swift 6 migration for the Notification Service Extension, which should improve the concurrent code in it, and make the notification extension more stable overall
Various refactors to allow a more scalable architecture, which will help us immensely when we will migrate other parts of the codebase to Swift 6
Last but not the least, we introduced a nice feature, that allows the creation of a new room from a DM, where the recipient is automatically included in the invited users list.
A release 26.05.2 is making it's way to the stores. It includes:
Live location sharing. Make sure to try it out see how it goes!
Sign in using Element Classic. If you have an existing installation of Element Classic with a verified session, it will be very fast to sign in using Element X and get a verified session in a few clicks.
In the meantime we are working on improving accessibility of the application, for impaired users.
and as usual, regular maintenance: dependencies upgrade, bug fixing, UI/UX polishing
v0.5.0 is out, and it's a big one. The frontend has been fully rewritten from scratch β out goes the UK Government Design System, in comes a proper dark/light themed, mobile-first UI built on TanStack Router. The whole redesign was driven by the goal of making results easier to read at a glance and making account management actually pleasant to use.
Two new checks land in this release: probing for MatrixRTC transports (MSC4143) and the MSC3266 room summary endpoint (co-authored with @networkexception:nwex.de ). Both are visualised on the results page alongside the existing federation checks. The results page also gains auto-refresh, a manual re-run button, a "last checked" timestamp, and a fix for a false positive where endpoints returning 404 were incorrectly flagged as CORS-blocked.
Alert types have expanded beyond basic reachability. You can now be notified when a TLS certificate is within 14 days of expiry, when the TLS fingerprint changes, when the detected server version changes, or when delegation or the server name changes. Quiet hours are now properly wired in so alert dispatch is deferred until the window ends rather than just suppressed.
A new notification channel joins email: webhooks. Each alert can have multiple webhook endpoints, with HMAC-SHA256 request signing, exponential backoff retry (up to 5 attempts over ~1 hour), 30-day delivery history, and a test-ping button in the UI. The HMAC secret is stored write-only and never returned by the API.
The account section gains a proper password reset/change flow, and alerts can now be configured to send notification emails to specific addresses rather than always using the account's primary email.
All documentation pages have been massively extended and completed, available in both English and German. This includes a new webhook integration reference page covering everything needed to integrate with the webhook notification channel.
The backend saw a security update to hickory-resolver (CVE affecting 0.25.0-alpha.3β0.25.2), a fix for a double-send race condition in the email outbox under concurrent pods, non-blocking email dispatch, and a new server-side CORS proxy so the frontend can detect CORS misconfigurations without the browser getting in the way.
As of today, 19329 Matrix federateable servers have been discovered by matrixrooms.info, 4274 (22.1%) of them are publishing their rooms directory over federation.
The published directories contain 19323 rooms.
The most popular server software among the online servers is:
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.