Dept of Status of Matrix 🌡️
Michael Downey announces
Don't miss this week's Matrix Live, where Amandine & Matthew talk about the growth of the Foundation and how it will help all of us working in the Matrix ecosystem be more successful. And in case you missed it, a job description for the Foundation's first Managing Director has now been posted. If you think you have what it takes, or if you want to share it with others who might, don't delay!
Matrix.org Website Bug Hunt
Some of you might have heard of it, but we're about to launch a (long overdue) update of the matrix.org website! The current one has served us well, but it grew organically as exciting projects and features were added to it. It became a little impractical to navigate and sometimes confusing.
The new matrix.org website, nicknamed "Zola" after the static site generator it uses, is not just a fresh coat of paint on the website: it's a complete rewrite to address three kind of people who would browse the website. Sorted by time they're willing to spend on a web page:
- The general public, who is not tech savvy and doesn't want to understand how things work, but who wants to get an easy onboarding
- Community managers, who are not too tech savvy but are willing to spend a bit of time to understand more advanced use cases
- Developers who want to understand how matrix works, and who want to build & break things!
We're in the final stages of developing the website, and we need you to help us making it ready! Head to the preview of the website, use the website, and give is feedback by opening an issue on the website tracker. Please make sure the issue doesn't already exist before opening it.
Reporting the following is particularly helpful:
- Something looks off, misplaced, is not aligned well or behaves oddly
- Something is missing (the doc is incomplete? Some informationg is missing somewhere?)
- There's an accessibility issue
- Something doesn't work on your browser
- It's not clear how to get to a particular information (you're looking for a client or a SDK, and after visiting the website you still don't know which one to use or how to get it?)
We still need to:
- Finish up the Bots page (which will likely be replaced by an Integrations page)
- Flesh out the support page to highlight more of the work of the Matrix.org Foundation
- Import the historical projects that are no longer maintained (clients, servers, bots, bridges, sdks)
If you want to follow along, you can join the #matrix.org-website:matrix.org room.
Help us make the website look as neat as possible for launch!
The UK's online safety bill is a catastrophe in the making, and as currently written empowers the UK telecoms industry regulator (OFCOM) to obligate end-to-end encrypted messaging apps to embed proprietary 3rd party scanning software which attempts to identify and flag abusive content and report it to the authorities. If you are in the UK, please sign this petition https://petition.parliament.uk/petitions/634725 to try to force the government to reconsider. Element, for instance, would rather be blocked by the UK govt from the app stores than embed third party scanning technology. For more info: https://element.io/blog/the-uks-online-safety-bill-undermines-everyones-safety/ and https://element.io/blog/the-online-safety-bill-an-attack-on-encryption/
Dept of Spec 📜
Andrew Morgan (anoa) reports
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-4004: unified view of identity service
- MSC4003: Semantic table attributes
- MSC4002: Walkie talkie
MSCs in Final Comment Period:
- No MSCs are in FCP.
- MSC3987: Push actions clean-up
- MSC3952: Intentional Mentions
- MSC2746: Improved VoIP Signalling
- MSC2246: Asynchronous media uploads
- No MSCs were closed/rejected this week.
Lots of MSCs moving through the process this week. I'm particularly excited about MSC3952: Intentional Mentions, which modifies the default push rules to only generate a notification if the sender's client has specifically intended to mention you. That's a really impactful, user-facing feature!
The other MSCs on the list, especially MSC2246: Asynchronous media uploads, bring quality-of-life improvements and unlock future functionality in Matrix. Check them out!
Random MSC of the Week
The random MSC of the week is... MSC3189: Per-room/per-space profiles!
MSC3189 proposes a concept of per-room/per-space profiles within Matrix, allowing users to have different display names and avatars across their various rooms and spaces. To do so, an optional query parameter scope is added to all profile-related endpoints. When specified, the scope defines the profile that should be used to complete that action.
That way you can represent yourself in a business context in one space, and a less serious context in another space. Short of profile-rooms, this would get us a fair way towards having multiple public profiles in Matrix!
Check out the MSC if you're interested. Reviews are always welcome!
Dept of Servers 🏢
Synapse is a Matrix homeserver implementation developed by the matrix.org core team
How is it Friday again?? This week the Synapse team released 1.82.0. Here are a few of the highlights:
- Allow loading the
/capabilitiesendpoint on workers.
- Improve robustness when handling a perspective key response by deduplicating received server keys.
- Synapse now correctly fails to start if the config option
app_service_config_filesis not a list.
- Speed up the user directory background update.
and much more. If you'd like to take a deep dive into the changes, you can find the release notes here and as always, if you encounter a bug feel free to report it at https://github.com/matrix-org/synapse/issues/new/choose.
A performance-oriented homeserver with minimal dependencies.
Jason Volk reports
🔒 This week some follow-up work further improving End-to-End Encryption took place. Compatibility between Nheko and Element devices through Construct have been fixed. About two weeks ago my quality assessment of e2ee through Construct was about 30%. Last week saw major progress but we were still maxing out around 70%. This week is closer to 90%; a few UISI's are still happening in some places such as a user's first message to an encrypted room. We'll have that worked out soon enough.
🙋 I'd like to thank Giovanni Bottaro for fixing some compatibility issues with the Dart Matrix SDK (Fluffychat) by replacing some HTTP 201 (Created) codes returned by Construct with HTTP 200's instead.
🚀 Tell us how important reliable e2ee is to you in #test:zemos.net today.
Dept of Bridges 🌉
M<>M Relay (website)
Jeremiah K announces
This handy tool bridges Meshtastic channels and Matrix rooms 1:1, and is built using matrix-nio.
For those unfamiliar with Meshtastic, it's a project enabling encrypted long-distance messaging via decentralized LoRa meshnets, using affordable devices. LoRa is license-free and certification-free in most of the world, making it accessible for everyone. Radios automatically rebroadcast messages, creating a mesh network for group communication—even from the furthest member. The Meshtastic mesh can sustain up to 80 device nodes, depending on settings.
Naturally, we wanted to integrate this incredible tech with Matrix.
M<>M Relay's Features:
- Bidirectional message relay between Meshtastic meshnets and Matrix chat rooms, supporting multiple meshnets
- Serial and network connections to Meshtastic devices
- Truncation of long messages to fit within Meshtastic's payload size
- Extended features via plugins, such as meshnet health plugin analyzing telemetry data and providing network stats
- E2EE support is planned, but not yet implemented (we appreciate any help!)
We're excited about extending our meshnets' range using existing Matrix bridges. Learn more and download the files here.
Join our #meshtastic-relay-1:matrix.org where we currently have 3 meshnets connected. If you have Meshtastic devices, we'd love help with testing, but all users are welcome.
A multi purpose multi platform bridge, formerly known as matrix-github
Andrew F (UTC+9) reports
Hookshot 4.0.0 makes its debut
Greetings all; Hookshot latest release is out, along with some exciting news!
You may recall the TWIM post for 2.6.0 from back in January having announced Encrypted Room Support, though not without warnings of it being experimental & not quite ready for prime time. Well, the latest release changes all that: encrypted room support is much more stable now, as we've collaborated with the fine folks behind the matrix-sdk-crypto Rust library to squash some of the biggest bugs that had been plaguing Hookshot. Encryption support even works for Service Bots!
Other than enabling encryption in your Hookshot's config file, there is no migration necessary to enable these fixes, even if you've already enabled Hookshot's encryption from before this release. Please give it a try and let us know how it goes!
This release also brings some useful features for RSS feeds: the ability to customize the format of feed messages, and the option to toggle posting messages for feed failures. This provides much more control & peace of mind over your feed messages, so give them a try & enjoy!
Finally, to align with the recent release of Node 20, this latest Hookshot release adds support for Node 20, and drops support for Node 16. The latter is due to Hookshot's policy of supporting only LTS & Active releases of Node. So, please ensure to update your Node versions if needed.
The release is available at https://github.com/matrix-org/matrix-hookshot/releases/tag/4.0.0, or by doing
docker pull halfshot/matrix-hookshot:4.0.0. And as usual, feel free to direct any questions about Hookshot in our Matrix room: #hookshot:half-shot.uk
Node.js IRC bridge for Matrix
Major new 1.0.0-rc1 for the IRC bridge
Friday's greetings TWIM. On June 15th, 2018 I submitted my first pull request to matrix-appservice-irc. Little did I know then, that nearly 5 years later I would now be announcing the 1.0.0 release candidate of the IRC bridge. This release brings a major new component, which is the ability to restart the bridge in place. This allows us to effectively do noise-less restarts of our larger bridges (in nearly all cases). This should also give us quite a bit more headroom on the bridge, so performance should improve.
The feature is currently marked as experimental but has been tested by the bridge crew fairly extensively, so the major wrinkles should have been ironed out by now. We'd really appreciate feedback, so please try it out.
We've also bumped the minimum required version of the bridge to Node 18 to slightly get ahead of the curve, as Node 16 is due to lose support later this year.
Notable changes for this release include:
- IRC connections can now be run via an external process using "connection pooling", allowing the bridge to be restarted without IRC connection loss. (#1669)
- Bridge logging can now be hot-reloaded. (#1704)
- Fix not handling thread fallbacks as replies. (#1697)
- Show a helpful error for !link/!unlink admin failures, rather than "Check the logs for details", in more cases. (#1702)
- Fix documentation not being built and uploaded to GitHub pages on release. (#1703)
- Fix linking rooms from setup widget when a
networkIdis configured. (#1706)
Please report any bugs in https://github.com/matrix-org/matrix-appservice-irc/issues.
Thanks for your continued support!
Dept of Clients 📱
Element Web/Desktop (website)
Secure and independent communication, connected via Matrix. Come talk with us in #element-web:matrix.org!
Recursive relations MSC to improve stuck notifications is moving forwards. Along with some other major steps forward in our investigation into stuck notifications we’re feeling confident that our next few releases will significantly reduce the amount of issues in this area.
- We’re also still working on updating the Settings screen for notifications.
- The Intentional mentions MSC passed its FCP this week so work to stabilize it will begin soon.
We’re smashing through accessibility bugs and working closely with our design team to address larger concerns such as text sizes and color contrasts.
Element X iOS (website)
Everything related to Element but not strictly bound to a client
- progress is being made on improving the the sliding sync integration and our focus for the upcoming week is to ensure that our integration tests are asserting the right things to support these steps forwards.
- the Room List has also seen an update this week, specifically the sorting functionality ensuring that only rooms with new messages move up the stack.
- push notifications work is ongoing as as we’re implementing local notification handlers
- and we’re also working on OIDC support, media uploading, the design system and generally improving our stack
Dept of VoIP 🤙
Element Call (website)
Native Decentralised End-to-end Encrypted Group Calls in Matrix, as a standalone web app
Florian Heese reports
Hello from the VoIP team,
We have shipped Element Call release 0.3.8 today -- still in beta. In order to get a data driven approach towards getting out of beta we added a bunch of telemetry to Element Call in our previous release using the Open Telemetry framework. And in the meantime we gathered together with submitted rage-shakes (also now backed by Open Telemetry) meaningful insights which enabled us to identify and fix two major split-brain issues. You will find the full list of changes in the release notes.
Dept of SDKs and Frameworks 🧰
Dart matrix sdk (website)
We released another breaking change this week :p bump to v0.19.0, the main features/changes from last time include:
- Upgrading to matrix api 1.6
- Private read receipts support
- Fixed an issue where loading archive returned a stale version. Since different sync timeouts bust through the cache, we make use of that to be able to load the new archive immediately.
- There's also a way for clients to provide media streams when starting a call, which should make setting up calls with audio/video mute toggles much easier
- Stopping media streams properly for calls and several other fixes!
Until next time :D
Long time no see! A few new shiny things have landed recently:
- Trinity now supports reading the wasm commands from multiple, custom directories. Of course, all of these are watched by Trinity so any module in there will be instantaneously hot-loaded as usual.
- Trinity has been dockerized! It's now possible to start Trinity in a Docker environment, provided a few environment variables and configuration options. In particular, thanks to the previous change, it's also possible to hack only on the commands, and not have to compile the host runtime on your machine yourself.
- We've also started experimenting with higher-level Rust traits to simplify even more the implementation of commands. If you have any feedback about this, or opinions about developer ergonomics for implementing Matrix bots in general, come over the #trinity:delire.party channel and let's chat about that!
Next-gen crypto-included SDK for developing Clients, Bots and Appservices; written in Rust with bindings for Node, Swift and WASM
Jonas Platte says
This week, there's two highlights:
- We've got basic notification support in the FFI layer
- A lot of plumbing is still necessary before this can be used from a separate notification process as required on mobile platforms though
- SQLite is now supported as a state store backend
- It will soon become the default for both the crypto and state stores
A Qt5 library to write cross-platform clients for Matrix
I'm trying to get to senses and make releases a bit more often than before - so here's libQuotient 0.7.2, with massive internal code cleanup work carried out by Volker (@vkrause:kde.org) and a few functional fixes. The release notes are at the usual place.
This is likely the last 0.7.x release of libQuotient - after discussions within the team we agreed to prioritise a release of libQuotient 0.8 to fix a few API shortcomings in the current codebase (around E2EE but not only). This means that the final Quaternion 0.0.96 is unlikely to be released for another month or so, as it will be done on libQuotient 0.8 as well.
Tobias Fella announces
In addition to the 0.7.2 release, we've been working on improving the documentation for libQuotient. You can now see an up-to-date version of the documentation at https://quotient-im.github.io/libQuotient
Dept of Ops 🛠
I've been working on refactoring one of my older projects, synapse-media-proxy, which separates the media repository from Synapse (similar to matrix-media-repo), but instead only acting as a caching proxy layer. This keeps the media in long-term storage at the homeserver (which is literally at home in my case, behind a slower residential line), but serves requests as fast as possible from a cheap VPS which keeps a minimal in-memory cache.
The refactor includes a lot of general cleanup/rework, but also moves the caching from in-process caches to a separate Redis database, as my previous implementation had some memory leakage. While not quite finished yet (no uploads, url previews), preliminary benchmarks for downloads and thumbnailing are very promising, way faster than both the original implementation and normal synapse. Benchmarks were done with wrk, all against localhost on the same machine for a fair comparison.
You can see the progress by comparing branches here
(some benchmarks detailed omitted for space, see them here) synapse-media-proxy refactor
Running 1m test @ download/pixie.town/Nrp1oyUgHirgm7gDSlDvHutM Requests/sec: 478.23 Transfer/sec: 2.84GB Running 1m test @ thumbnail/pixie.town/OjN4zjsGXzSZBkLBsHh5REJi?height=128&width=128 Requests/sec: 5405.62 Transfer/sec: 23.18MB
Running 1m test @ download/pixie.town/Nrp1oyUgHirgm7gDSlDvHutM Requests/sec: 160.01 Transfer/sec: 0.95GB Running 1m test @ thumbnail/pixie.town/OjN4zjsGXzSZBkLBsHh5REJi?height=128&width=128 Socket errors: connect 0, read 0, write 0, timeout 3 Requests/sec: 43.07 Transfer/sec: 141.64KB
Running 1m test @ download/pixie.town/Nrp1oyUgHirgm7gDSlDvHutM Requests/sec: 59.71 Transfer/sec: 369.38MB Running 1m test @ thumbnail/pixie.town/OjN4zjsGXzSZBkLBsHh5REJi?height=128&width=128 Non-2xx or 3xx responses: 19278 Requests/sec: 321.01 Transfer/sec: 263.01KB
(note a lot of those requests returned non-2xx/3xx responses, failing to actually thumbnail)
Dept of Services 🚀
Lack of rooms discovery for new users is one of the issues we noticed while installing and hosting hundreds of Matrix servers on etke.cc Today, we welcome you to MatrixRooms.info, a search engine built for matrix rooms discovery.
The current index contains over 230,000 rooms across 19,000 servers, and we're constantly tweaking it to provide more relevant search results. Even non-English users may find it useful because it does automatic language detection in room names and topics.
We plan the following future improvements:
- Searching by language
- Searching by specific field
- Providing a browsable catalog of rooms by server/language/etc
- Implementing a subset of the Matrix Server-Server API to request (and provide!) a Matrix-native rooms directory
As with anything else we do at etke.cc, the website, its API backend and all related tools are free software (A/GPL).
Dept of Guides 🧭
Matrix client tutorial
I've started writing a Matrix client tutorial, explaining how to use the Matrix Client-Server API. It's still in the very early stages, but I've gotten to the point of being able to write a simple echo bot. I'll be tackling end-to-end encryption next. Feedback is welcome. Client authors, if you have any tips and tricks, or potential pitfalls, that you think that every client author should know, feel free to share. The document can be read at https://uhoreg.gitlab.io/matrix-tutorial/ and the sources are at https://gitlab.com/uhoreg/matrix-tutorial.
Dept of Ping
Join #ping:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.
Join #ping-no-synapse:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.
That's all I know
See you next week, and be sure to stop by #twim:matrix.org with your updates!