Matrix Live

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.

MSC Status

New MSCs:

  • There were no new MSCs this week.

MSCs in Final Comment Period:

Accepted MSCs:

  • No MSCs were accepted this week.

Closed MSCs:

  • No MSCs were closed/rejected this week.

Spec Update

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 (website)

Synapse is a Matrix homeserver implementation developed by Element

Erik says

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.

Thanks to @zeeshanrafiqrana, @Dmytro27Ind and @loelkes for their contributions to this release!

Dept of Clients 📱

Quaternion (website)

A Qt5-based IM client for Matrix

kitsune reports

Quaternion 0.0.96

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!

Nheko (website)

Desktop client for Matrix using Qt and C++17.

Nico reports

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+.

Ștefan announces

We're ramping back up after the holidays and first on our list are whatever bugs didn't want to stay in 2023.

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!

Changes

  • 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

New features

  • 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!

elm-matrix-sdk (website)

Bram says

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.

matrix-rust-sdk (website)

Next-gen crypto-included SDK for developing Clients, Bots and Appservices; written in Rust with bindings for Node, Swift and WASM

bnjbvr announces

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 RoomListService and 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.

The rest of our changelog contains more details for each crate: matrix-sdk, matrix-sdk-base, matrix-sdk-crypto.

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 hope expect 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)

HarHarLinks announces

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.

If you have attended Matrix (community) events in the past you might have heard me ranting talking about it before, among other similar small tools.

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:

We have released v0.3.0 of Matrix Reminder Bot! You can find the release artifacts in the usual places: PyPI, Docker Hub, GHCR.

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.

If you have any questions or want to follow the project, you can find the repo here and a dedicated room at #matrix-reminder-bot:matrix.org (we also have a Hookshot for it now!).

Dept of Events and Talks 🗣️

FOSDEM 2024 (website)

Thib announces

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".

Episode: https://podcasters.spotify.com/pod/show/matrix-podcast0/episodes/Bram-English-episode---Matrix-Community-Summit-2023-e2ebuk3

RSS feed: https://anchor.fm/s/cdb34188/podcast/rss

Fediverse post: https://mastodontech.de/@jaller94/111743486844936832

Matrix Federation Stats

Aine says

collected by MatrixRooms.info - an MRS instance by etke.cc

As of today, 8438 Matrix federateable servers have been discovered by matrixrooms.info, 2307 (27.3%) of them are publishing their rooms directory over federation. The published directories contain 168930 rooms.

How to add your server | How to remove your server

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.

RankHostnameMedian MS
1envs.net236
2icbm.codes284.5
3ailuro.space294
4nerdhouse.io302
5fostered.uk373
6benstokman.me439
7sulian.eu721
8casavant.org910
9aguiarvieira.pt1102.5
10matrix.org1165.5

#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.

RankHostnameMedian MS
1matrix.its-tps.fr180
2fostered.uk197.5
3matrix.maymundere.org212
4nerdhouse.io217
5matrix.org301
6inu.is311.5
7herkinf.de401.5
8shiftsystems.net998.5
9puppygock.gay1922
10darkness.services4189

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