Dept of Spec 📜
Andrew Morgan (anoa) [GMT-6] 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.
- MSC4030: Progressive image in Matrix
- MSC4029: [WIP] Fixing
- MSC4028: Push all encrypted events except for muted rooms
- MSC4027: Propose method of specifying custom images in reactions
MSCs in Final Comment Period:
- MSC3989: Redact
originproperty on events (merge)
- MSC3821: Update the redaction rules, again (merge)
- MSC3077: Support for multi-stream VoIP (merge)
- No MSCs were closed/rejected this week.
This actually happened last week, but a huge shoutout to Kévin Commaille, aka @zecakeh, for their work on upgrading the OpenAPI schema data for the Matrix Spec to version 3.1. This schema describes all of the requests and responses for all endpoints in the spec, as well as various event types and other bits and pieces. It directly powers the Matrix spec website, the Matrix API Playground and several Client and Homeserver SDKs that generate code from it.
With a diff of
+14,997 −12,660, this was a multi-month effort of both implementation and review (thank you @richvdh and @KitsuneRal!). This change will allow us to use all the new features that OpenAPI 3 has to offer, as well as generally keeps us up to date with modern tooling.
Random MSC of the Week
The random MSC of the week is... MSC3051: A scalable relation format!
This MSC describes a different way of describing how an event relates to other events. In the current Matrix spec, you can use the
m.relates_toproperty to indicate that this event (say, a reaction) relates to another event (say, a message) in a certain manner. You can specify how it relates using the
m.relates_to->rel_typekey; a value of "m.annotation" for reactions.
But sometimes you may want to relate to multiple other events. For instance, what if that message you're reacting to is also in a thread? In fact, this MSC has come up recently as one possible way to solve the problem of efficiently discerning whether an event should belong in a thread or not (discussion). This MSC isn't the only option for solving such a problem - MSC4023 would also work, and both have tradeoffs.
MSC3051 could also allows for actions such as editing replies; both the text and the message it was a reply to. Neat!
Do read the MSC and give feedback if relations is something that excites you.
Dept of Servers 🏢
An open source Matrix homeserver implementation written from scratch in ANSI C and designed to be lightweight and simple, yet functional
Jordan Bancino reports
A Matrix homeserver written in ANSI C, targeting POSIX operating systems.
- Telodendria v0.3.0:
v0.3.0was just released earlier this week. It finishes out the client authentication portion of the specification, including a few basic profile management endpoints. This release also features full TLS support and some major architectural changes to make the code base easier to work with, the details of which I laid out in a previous TWIM.
- Cytoplasm: A lot of the code that makes up Telodendria has been broken out into a separate C library for general-purpose use. I am calling this library Cytoplasm. At some point, it will live a life of its own, with its own website, releases, and Matrix rooms. But for now, it is still an integral part of Telodendria, so while it can be built and installed without Telodendria, you'll have to download the Telodendria source code to get it.
- Coming Soon: I think the main thing that has a lot of us really excited around here is that the next step for Telodendria is implementing rooms and events. I'm hoping that the next release,
v0.4.0, due around the end of this year, will have all of the necessary components in place to allow very basic communication between local users.
As always, feel free to say hi in #telodendria-general:bancino.net, and for more details, join #telodendria-newsletter:bancino.net to read the full-length newsletters. If you want to support Telodendria, please donate to the project.
Synapse is a Matrix homeserver implementation developed by the matrix.org core team
This week we released 1.86.0rc2. Here are a few of the highlights:
- Support resolving a room's canonical alias via the module API
- Speed up
/messagesby backfilling in the background when there are no backward extremities where we are directly paginating
- Correctly clear caches when we delete a room
- Enable support for MSC3952: intentional mentions
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.
Dept of Clients 📱
A client for matrix, the decentralized communication protocol
Tobias Fella says
Here's what's happened in the last three weeks of NeoChat development:
- You can now create spaces in NeoChat. You can't edit them yet, but it's a start 😀.
- NeoChat will no longer show outdated notifications.
- As part of the matrixification of Itinerary (stay tuned for more info about that), Volker implemented support for viewing MSC3489 Live Location Shares.
Matrix client for Emacs
- When uploading a GPG-encrypted file (i.e. one whose filename ends in
.gpg), if the recipient's private key or the symmetric encryption key were cached by Emacs (or a configured agent, like
gpg-agent), Emacs would automatically decrypt the file while reading its contents and then upload the decrypted contents. (This happened because the function
insert-file-contentswas used, which does many things automatically, some of which are not even mentioned in its docstring; refer to its entry in the Elisp Info manual for details. The fix is to use
insert-file-contents-literallyinstead.) Thanks to
- Support for Single Sign-On (SSO) authentication. (#24. Thanks to Jeffrey Stoffers for development, and to Phil Sainty, Jakub Kadlčík, and Juanjo Presa for testing.)
min room buffers to
ement-room-mark-read(which moves read markers to point).
- Activating a space in the room list uses
ement-view-space(which shows a directory of rooms in the space) instead of
ement-view-room(which shows events in the space, which is generally not useful).
ement-view-room, when used for a space, shows a footer explaining that the buffer is showing a space rather than a normal room, with a button to call
ement-view-spacefor it (which lists rooms in the space).
ement-describe-roomshows whether a room is a space or a normal room.
ement-view-spaceshows the space's name and alias.
ement-room-scroll-up-mark-readmoves the fully read marker to the top of the window (when the marker's position is within the range of known events), rather than only moving it when at the end of the buffer. (This eases the process of gradually reading a long backlog of messages.)
- Improve readme export settings.
- Extra indentation of some membership events. (Thanks to Steven Allen.)
- Customization group for faces.
- Don't reinitialize
ement-room-list-modewhen room list buffer is refreshed. (#146. Thanks to Ted Reed for reporting.)
- Don't fetch old events when scrolling to the bottom of a room buffer (only when scrolling to the top). (Thanks to Steven Allen.)
- Minor improvements to auto-detection of homeserver URIs. (See #24. Thanks to Phil Sainty.)
- Uploading of certain filetypes (e.g. Emacs would decompress some archives before uploading). Thanks to
- Messages edited multiple times sometimes weren't correctly replaced.
Feel free to join us in the chat room, #ement.el:matrix.org.
Element Web/Desktop (website)
Secure and independent communication, connected via Matrix. Come talk with us in #element-web:matrix.org!
Johannes Marbach announces
- Our changes to the notification settings are entering code review and we’ve started planning a beta release for further testing
- The Compound design library has been integrated as a dependency and we started working on an initial color and typography pass
- OIDC-native support is moving ahead. We’ve mostly finished provider discovery and are now implementing static and dynamic client registration.
- Our call sounds have been normalized using LUFS. Thanks to JMoVS for contributing this improvement. 🙌
Element X iOS (website)
- DMs will prompt you to re-invite the other user when trying to send a message after they left.
- Messages that failed to send can now be tapped to retry sending.
- Improvements to message decryption in notifications.
- Colours from our Compound design system are now used throughout the app.
- Adopted the new RoomList API from the Rust SDK.
- Work continues on message forwarding, static location sharing and improvements to reactions.
Element X Android (website)
Everything related to Element but not strictly bound to a client
- Element X Android is getting more and more features and polishing, especially around the timeline. We will also work on the room list screen to make it as snappier as ever.
Element iOS (website)
Secure and independent communication for iOS, connected via Matrix. Come talk with us in #element-ios:matrix.org!
- Version 1.10.13 is available on TestFlight with the Jitsi screen sharing feature and an increased voice message length of 5 minutes.
Element Android (website)
Secure and independent communication for Android, connected via Matrix. Come talk with us in #element-android:matrix.org!
- We have started the roll out of Element Android including the Crypto Rust SDK for 5 % of the users in production. We will create a new version 1.6.3 to fix an issue which occurs during the database migration.
- In the meantime we are fixing more crashes and more ANR.
Dept of SDKs and Frameworks 🧰
simplematrixbotlib is an easy to use bot library for the Matrix ecosystem written in Python and based on matrix-nio.
- Improvements :)
- Add sending of reactions
- Add recovery if stored access token is invalid
- Show proper error message when connection fails
- Improve api docs
- Fix circular import bug
- Update matrix-nio dependency to 0.20
- Update pillow dependency to 9.0
Next-gen crypto-included SDK for developing Clients, Bots and Appservices; written in Rust with bindings for Node, Swift and WASM
Jonas Platte says
- Fixed processing of state events for invited rooms in sliding sync
Timeline::cancel_sendfor cancelling local echoes that failed to send
RoomListAPI, replaces direct access to sliding sync for GUI clients
- Always fall back to auto-discovered sliding sync proxy URL
- Properly support the
hkdf-hmac-sha256.v2MAC method for SAS verification
- Timeline: Add loading indicator before waiting for
- Make store requests in btch for
- Sliding Sync: Lazily generate and include the transaction id, only if it's useful
- Fix wrong room state for invites with Sliding Sync
- Make upload progress observable (WIP)
Dept of Bots 🤖
LoaD Accumulator announces
For a while, I and a couple of other people have been working and testing on a bot to parse LaTeX and LilyPond expressions. This allows people on clients like Nheko to send and see math equations on LaTeX(and even more, like custom packages, and TikZ support) and sheet music with LilyPond, both on normal, and encrpyted rooms!
A plugin-based Matrix bot system.
I have written a handful of Maubot plugins which help me manage my private community on matrix, and figured I could share them a little more publicly with the world:
maubot-welcome is a greeter bot for when new users join a room, and can optionally alert admins in a separate notification room that someone new has joined. maubot-createroom allows admins to issue a simple command to create a new room and automatically connect it to a Space, saving you the trouble of configuring it with default settings manually. maubot-join is a helpful plugin that allows you to turn off Maubot's auto-join feature, and rest assured that only a known list of users can invite your maubot to any new rooms. maubot-kickbot will watch activity within the rooms in a Space and generate a report of inactive users. If you make your bot a moderator (or whatever your appropriate power-level is), the bot can also kick inactive users out of all rooms in the space and the space itself. Helpful for tidying up your community.
all of these plugins, and any other Maubot plugin I come across, can be found in a hopefully-easy-to-use list at https://maubotplugins.mssj.me. Please feel free to submit more that aren't here!
A Matrix bot for the Friendly Linux Players community.
Hey, I haven't updated here in a while! Shortly after my last update, I did some refactoring work that made the code a little nicer and more testable, then added some more unit tests in, along with implementing CI. After this, I took a bit of a break from working on the bot.
Earlier this week, I implemented an idea suggested by a community member and contributor to the bot: users joining our main Matrix room (#flip:flip.earth ) are now greeted by the bot. This includes a random prompt/ice breaker to help get the conversation going. The first two times this was triggered, it spurred a bunch of conversation, so I'm pretty happy with it so far!
On the website side, the events page now lists the next upcoming event at the top. Outside of our development work, several FLiP community members participated in a Q&A session with GitLab, resulting in the following blog post (published last month): Building a more inclusive gaming community with GitLab.
Dept of Events and Talks 🗣️
Matrix @ FrOSCon this year
On August 05-06 the annual Free and Open Source Conference (short FrOSCon) will take place at the German University of applied Sciences Bonn Rhine Sieg.
As German Matrix community grown rapidly in the last years, this is a great opportunity to meet each other and hack together.
Matrix Dev Room
We will be organizing a Devroom this year. The idea is to exchange on the latest Matrix development and projects, get to know each other and drink
<your_favorite_beverage>together on the Saturday evening. 😉
To make it happen we need your help!
Devroom is living from talks and workshops - this is your chance to present your Matrix project or to do a workshop on Matrix!
- Language: German or English
- Due date: please give us feedback ASAP so we can plan now
Also help in organizing the Devroom (moderation, timekeeping, etc) is needed.
Matrix Open Source booth
It was a great place to chit-chat and to get your in-depth answers regarding Matrix at FOSDEM this year. 👍️
We will have a Matrix booth at FrOSCon as well.
We need your support in answering questions about Matrix or just to have a good time at the booth. If you have experience with Matrix and want to help us out at the booth - get in touch with us!
Get in touch
If you want to take part please contact @oleg:fiksel.info (or [email protected]) ASAP to add you to the Devroom/booth participants list.
BTW: we also have a Matrix FrOSCon room
Matrix auf der FrOSCon dies Jahr
Dieses Jahr wird die FrOSCon (Free and Open Source Conference) in-person ablaufen.
Das ist eine gute Möglichkeit die Deutsche Matrix-Community zusammen zu bringen.
Deshalb organisieren wir eine Devroom und ein Matrix-Stand.
Eine Devroom lebt von Vorträgen und Workshops.
Wir brauchen eure Hilfe!
Wollt ihr euer Matrix-Projekt vorstellen oder ein Workshop machen - das ist die Möglichkeit!
Auch brauchen wir Hilfe beim Moderieren vom Devroom.
Beim Matrix-Stand werden wir auch Unterstützung brauchen.
Dept of Guides 🧭
Matrix Client Tutorial
As promised, I've been working on the end-to-end encryption chapter of my Matrix client tutorial. I've recently added an sections on uploading device keys and one-time keys and keeping track of recipient devices, both which of were much longer than I expected (and they're not even complete yet). Next up is the Megolm encryption and decryption section. As usual, feedback is welome. The source code is 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!