No Matrix Live this week, but a YouTube playlist of the Matrix talks given at FrOSCon!
Dept of Spec 📜
Andrew Morgan (anoa) 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.
- There were no new MSCs this week.
MSCs in Final Comment Period:
- No MSCs were accepted this week.
- No MSCs were closed/rejected this week.
For those familiar with Travis' weekly task lists of MSCs for the Spec Core Team to review in the Office of the Matrix Spec Core Team room, a new weekly list is now being posted in the Matrix Spec & Docs Authoring room. This list is aimed at technical writers who can help by converting MSC authors' words into PRs against the spec text itself.
This is the final step for getting an MSC integrated into a new release of the Matrix spec, and anyone can try their hand at it! It would also very much help the Spec Core Team by freeing up more bandwidth for review of the MSC backlog, as well as push forward the protocol itself. Thank you!
If you have any questions, feel free to ask them in the relevant Matrix rooms.
Random MSC of the Week
The random MSC of the week is... MSC4003: Semantic table attributes!
This MSC proposes expanding the set of suggested, interpreted HTML tags in Matrix clients to include additional tags related to tables. With them, more control over table rendering is possible. The proposal itself includes one such (albeit fairly arbitrary) example
The proposal is well-written and straight-forward, so do feel free to have a look if the subject interests you!
Dept of Servers 🏢
Synapse is a Matrix homeserver implementation developed by Element
This week the Synapse team has released v1.99.0rc1! This is the first release under the new AGPL3 license (see the blog post if you haven't already). The new release is mostly bugfixes and minor performance improvements, but also include some new configuration options.
Dept of Clients 📱
A Qt5-based IM client for Matrix
After another two-year wait, the new claimed-stable version of Quaternion is out! Although release notes put beta E2EE support as the biggest thing, in fact the biggest thing is that stable Quaternion is finally on par with NeoChat in running on the most recent libQuotient (0.8.x, that is). Packagers who were sitting back waiting for this to happen (yes, Debian) - it's now time to really get to work and update both libQuotient and Quaternion. Otherwise, it's pretty much the same minimalistic and fast desktop client as it used to be. Packages for Windows and macOS are next to release notes, Flatpaks have been published a few minutes ago - go and grab it!
Desktop client for Matrix using Qt and C++17.
Well, this week I should have really been doing other stuff, but I did not!
First of all we sent out a call to update the translations. Apparently that was quite successful, there are like 20 commits with translation updates from the last 2 days now... If you find your language to be out of date, don't hesitate to jump on https://weblate.nheko.im/projects/nheko/nheko-master/ to fix it.
Because telling other people what to do is quite exhausting, I needed some time to relax. So I spent all night optimizing the room switching logic. Specifically because of how ListView works in Qml, the timeline used to render about 100 messages when switching a room, when instead only 10 or so can be visible at one. This is for the simple fact, that an incomplete message has a size of 0, so the ListView tries to fill the timeline with more messages. That can easily be worked around by setting an incomplete message size to something reasonable like 100. In most cases they do need more space than that and if they don't, the ListView will quickly notice. As a result switching rooms is now about 10 times faster.
Another fun thing slowing down room switching were video messages. Obviously those take a long time to display, I thought, it is a video after all. But do you know why that is slow? Well, it takes about 5ms to load the video and 500ms to find the audio output... So that is clearly stupid, why would we spend 100 times as much time on looking for an audio output, when the user isn't even playing the video yet? So we now only initialize the audio output, when a user clicks the play button, which makes scrolling much smoother. If only I had investigated that years ago instead of just brushing it off as "probably normal"... We now also show you if the video is already downloaded instead of making you click the download button first just to immediately ask you to click play.
Another thing that has been bugging me endlessly... you couldn't really use the arrow keys in most cases on macOS. This meant "up" to edit, "Ctrl+up" to switch rooms, etc didn't work. Turns out macOS keys are just weird. They actually send "Num+up" when you press up, making Nheko think you are using the numpad. Anyway, after years this is fixed now.
Annoyed by always mistyping the password on the Steam Deck, Bubu added a button to show you the text you just entered. Meanwhile q234rty improved our hack to make the color palette work in windows in cases where the window pointer gets reused. We also now have arm flatpaks again for the nightlies. Since my new arm board never arrived (because communication is hard!), we now spend 3h cross-compiling it... Duam also added a toggle to disable swipe gestures. You can also now delete image packs (thanks to Emma) and there is a /command to ignore people now and a button on invites thanks to NepNep!
That's all, I now really need to work on the things that have been piling up... otoh, look, shiny food!
Element X iOS (website)
A total rewrite of Element-iOS using the Matrix Rust SDK underneath and targeting devices running iOS 16+.
We're ramping back up after the holidays and first on our list are whatever bugs didn't want to stay in 2023.
- Fixed issues around timeline items flickering
- Improved text handling on the message composer in 1, 2 and dictation on iOS 17+
- Fixed the reporting screen not being displayed
- Fixed draft composed messages being lost unexpectedly
- Completed our monthly notification placeholder rotation dance
- The app is now faster in loading member profiles
- and we might even have a workaround for one of our biggest crashers
Note: none of the items above are available in a release build yet. Please see our releases page for details.
Dept of SDKs and Frameworks 🧰
Rory&::LibMatrix (.NET 8 matrix bot/client library/SDK) (website)
Emma [it/its] ⚡️ announces
Any help I can get is super appreciated!
- RemoteHomeserver now has a way to attempt to create an instance without throwing if it fails
- Initial sync detection is more reliable now and requires less retries
- Messages can now be dynamically built (see
MessageBuilder, the message factory implementation), maybe I'll be using it to post these next time?
- Some event types now have User-Interface-friendly names (mainly policy types)
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 me know, I'd love to hear all about it!
This week has a relatively small update: a patch update 2.1.1 that, given Elm's enforced semantic versioning, means there's no API changes! Only internal ones.
The main development is taking place in a separate branch, which creates the timeline. ⏲️ This is quite a difficult part of the SDK which takes some serious architecture to figure out! If you're curious, then Nico's blog post is a good example of a timeline design and the complexity that it requires.
If you would like to see more about the timeline design, join the conversation at #elm-sdk:matrix.org and feel free to offer help and/or tips about how to design the timeline.
Next-gen crypto-included SDK for developing Clients, Bots and Appservices; written in Rust with bindings for Node, Swift and WASM
A few days late, we're happy to announce that we've shipped the 0.7.0 release of the Matrix Rust SDK 🥳 As a reminder, this SDK powers next generation Matrix clients, like Fractal, iamb or the Element X apps, among others.
This has been the first release for a long long time (the last one was around mid October 2022), so there are plenty of new features including, but not limited to:
- added sqlite as a storage backend, that becomes the new default over
sled(which has been removed),
- support for authentication via OpenID Connect (aka OIDC), allowing simplified sign-in management when running along the Matrix Authentication Service,
- client support for the unreasonably fast MSC3575 aka Sliding Sync, for instant room list synchronization (*requires a server supporting it),
- many new cryptography features, including secret storage, initial support for dehydrated devices, key backup support, automatic cross-device signing setup, and so on and so forth, as well as many bugfixes and performance improvements
- an exciting new crate implementing opinionated high-level features making it easier to build clients: the matrix-sdk-ui. Use the new
EncryptionService, and get a fully functional, high performance client using Sliding Sync by default in no time!
- work on FFI bindings for the Rust SDK to be used in Swift and Kotlin code bases,
- generally more support for client-server APIs: notification settings, read receipts and markers, and so on.
- and your usual load of numerous simplifications of the existing public APIs, refactorings, performance improvements, etc.
Thanks to all the contributors of this release ❤️ Happy hacking! 🦀
Dept of Bots 🤖
Spam Police (website)
jjj333_p (any pronouns) announces
Meet Spam Police, the moderation bot that is new to the scene, now in its first stable release! It has been a long time coming (~2 years), but in my defense I (the main and pretty much only dev) am a full time college student and this has been a project that I hack away at during vacation.
Spam Police began because about 2 years ago the Matrix platform began experiencing the growing pain of becoming somewhat mainstream of being periodically flooded with scam posts. As someone who has fought scammers since my early teens, I was driven to get to work on a bot that would detect these scams in abandoned rooms and post a warning, as well as logging these posts to a room so that the moderation groups I was apart of could add the scam accounts to their banlists. As I left those groups for various personal reasons I made the decision to turn #jjj-tg-scams:matrix.org into a Mjolnir compatible banlist, however during my time in said moderation communities I learned about a lot of the drawbacks of Mjolnir/Drapunir and made the decision to make my own attempt at a true moderation bot.
Spam police is aimed to be a Mjolnir replacement for small communities or ones migrating from other platforms and don’t want to selfhost. Currently the only noteworthy features of Spam Police is Mjolnir-type banlist writing and following, and automatic maintenance of #jjj-tg-scams:matrix.org, however a lot of the work that has been put into Spam Police has been into making it very easily extensible, so there is more to come! Spam Police can be selfhosted as it is AGPLv3 (https://github.com/jjj333-p/spam-police), however it is intended to be run in a more centralized manner, filling the gaps that Drapunir leaves for those not wishing to selfhost, or looking for an experience more familiar to the moderation bots on Discord. With this first release I
hopeexpect that while Spam Police is still somewhat limited in features it is prepared for general public use in it’s designed use-case.
If you have any questions feel free to join #anti-scam-support:matrix.org and feel free to lurk in #jjj-tg-scams:matrix.org and watch its scam detection process in action! And don’t forget to check out our github https://github.com/jjj333-p/spam-police for more information and a command/usage guide.
Matrix Reminder Bot (website)
Matrix Reminder Bot is a small standalone bot with which you can set and receive reminders for yourself or your rooms over Matrix written in Python using matrix-nio.
I still use it quite a lot, despite not too much activity on the codebase with the last release dating back to July 2021. Anoa, the original author, recently granted me maintainership on the repo, which is why I am happy to share some news about it with you today:
In December, reminder bot received a very notable contribution from @svierne: It is now possible to configure who may or may not interact with your instance of the bot! This change will mandate that you update your bot's configuration once you update, because we deem it important for administrators to manage the access to their services. The provided example configuration file has been updated to reflect this and defaults to the previous setting, but we suggest you consider limiting access.
A key functionality that allows the bot to work, is sending notifications to specific people. This was historically done by literally mentioning their name, which lead to some grief when unintentionally mentioning people. MSC3952: Intentional Mentions tries to address this issue and was included in Matrix Spec v1.7. Again thanks to @svierne, reminders will now use this new field correctly to notify you of your reminders!
Beyond that, I started to remove the cobwebs of 2 years inactivity by updating dependencies, adding CI, etc. Notably, that makes pre-built docker images available not only on Docker Hub like they always were, but also on GHCR.
Dept of Events and Talks 🗣️
FOSDEM 2024 (website)
The Matrix Foundation and Community will be at FOSDEM in Brussels between February 2 and 4, with a main track talk, a devroom and a booth! Find all the details on our blog.
Matrix Salon Podcast (English episode)
Christian Paul (jaller94) announces
Meet Bram, who has many Matrix projects like the Matrix Event Directory, various games and the "tomato video".
RSS feed: https://anchor.fm/s/cdb34188/podcast/rss
Fediverse post: https://mastodontech.de/@jaller94/111743486844936832
Matrix Federation Stats
As of today,
8438Matrix federateable servers have been discovered by matrixrooms.info,
27.3%) of them are publishing their rooms directory over federation. The published directories contain
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!
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