This Week in Matrix 2022-06-17

2022-06-17 — This Week in Matrix — Brendan Abolivier

Hey everyone! Thib is away today so I'm taking over TWIM for this week (but don't worry, he should be back next week!)

Let's see what the Matrix community has shared with us this week.

Matrix Live 🎙

In this week's Matrix Live, Thib talks to Ivan from the Matrix Rust SDK development team to ask him about the SDK's bindings for Node.JS and WASM.

Dept of GSoC 🎓️

Marco Melorio says

Hi there! I'm Marco Melorio and I'm participating in this year's Google Summer of Code, under the GNOME Foundation. I'm working on Fractal, the GNOME matrix client, with the help of my mentor Julian Sparber. More specifically I'm working on implementing a media history viewer to the app.

To follow my progress on the project you can check out my blog here. I've already published a small introduction post about me and a first update post which includes a mockup and milestones about the project.

Dept of Servers 🏢

Synapse (website)

Synapse is a Matrix homeserver implementation developed by the matrix.org core team

Brendan says

This week the team released Synapse 1.61, which main new feature is media retention. That's right, you can now control how long Synapse keeps media files around, which should help server admins manage Synapse's disk space usage more efficiently. On a different note, this release of Synapse removes support for groups/communities (which was deprecated back in Synapse 1.56), as it has now been replaced by Spaces. Farewell groups, you have served your users well.

See the full Synapse 1.61 release announcement on the matrix.org blog here: https://matrix.org/blog/2022/06/17/synapse-1-61-released

Aside from this, the team is as always hard at work on making Synapse better and more efficient.

Dept of Clients 📱

Quadrix (website)

JFA says

New version of Quadrix (1.0.6) available on desktops and mobiles. Mainly bug fixes, plus the addition of a button to deactivate the account on the server (this apparently will be soon mandatory for iOS and MacOS messaging apps). The new desktop version should offer better support for Wayland (tested on Fedora 36, Ubuntu 22.04 and Mobian/Phosh). Repo at https://github.com/alariej/quadrix, project room at #quadrix:matrix.org :-)

Nheko (website)

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

Nico announces

Since I skipped the last update, this one is a bit longer :3

First of all there have been lots and lots of updates to the translations! Finnish is now at 100% thanks to the tireless work of Aminda and Lurkki.

Nheko now also shows a nice badge on Unity compatible desktops (like KDE) for unread messages (although that doesn't work properly for multiple profiles being open at the same time due to limitations in that desktop protocol. Thank you d42 for contributing this, may you role a natural 42 every dice throw!

Syldra fixed up the paste behaviour (which didn't properly tie into undo in some edge cases), cleaned up how we find some of our dependencies and made cusor movement more consistent across systems.

Finally we fixed our glare resolution when verifying other sessions, which will be especially noticeable when verifying Cinny, since that responds to verification requests in a different way than I tested before! This should get rid of a whole range of verification issues people might have experienced. As part of our stabilization for the next release, we also fixed a crash on logout because I fatfingered and deleted a return statement, we now send an Element Android compatible height attribute on emotes, properly compile when the C++ version is set to 20, we once again support the current version of the hidden read receipts MSC (so that others can't tell what you read), edits now properly update in replies again, you can close the image overlay again by clicking outside, cancelled uploads properly get removed again, logging out and back in now doesn't mess up your configuration anymore and pinned messages now properly refresh once the events are loaded.

Phew, that was a mouthful. And we are not even done yet!

I spent some time on making Nheko compilation a bit faster again as well as improve startup speed. This might order your room list a bit weirdly for a few days after updating, but should normalize when receiving a few messages in some rooms. With this we now don't need to load the last message in all rooms on startup. This makes Nheko startup now only take 7 seconds on my old laptop (when not doing something CPU heavy at the same time). The remaining startup time is 40% building up the font database and 40% loading the powerlevels for each room. So we do have the chance to speedup startup by probably another 60%. It is unlikely that is necessary though.

When I discovered Matrix, Element was still called Riot. At the time some of the big design changes started happening to make it the Element you know today. One of the sideeffects was that the roomlist was consistently taking up 20% of my CPU on my Laptop, which I used at the time (and am forced to use now again, since I broke my newer laptop). It also used a lot more RAM than it does today. So for that reason I started shopping around for what other clients there are and I found Nheko. Clearly because it isn't a webclient, it had to be faster and use less RAM. Well, it did maybe a bit, but frankly the difference wasn't that much. Especially since at the time it loaded and rendered ALL your messages on startup (kinda). It never removed messages from memory, so it would just continuously render more and more parts of your timeline, which clearly increased RAM usage. It did however never resort the full roomlist, which made it not use a lot of CPU.

Since I didn't know any web development at the time, but I knew some C++, I started contributing to Nheko. At some point I made the roomlist constantly resort, which used quite some amount of CPU, but I quickly fixed that. At the time the most noticeable difference was that my fans didn't spin when using Nheko, but Element did (because of the roomlist sorting, iirc). RAM usage was pretty bad though. So that was one of the next projects, removing all events from RAM and only pulling them from the database as needed. While this means some additional load when switching rooms, it did decrease RAM requirements by quite a bit. Some new features made us still require loading data for every room from the database on startup, which causes quite some noticeable startup delay. The latest changes however got rid of most of that. We now don't need to load the messages from the database anymore. The only thing we still load is a small info object with roomname, notification and member count as well as the power levels of the room.

Since I recently broke my new and fast laptop, I decided to checkout how things changed on my old and slow laptop. Nowadays I am not in 15 rooms anymore, but I am in 900 rooms, but Matrix, servers as well as clients, has also gotten a lot more performant. So in the end I decided to do a little benchmark of where things stand. DISCLAIMER: This is completely unscientific and unfair, so please take those numbers with a grain of salt. Almost no one runs such a slow laptop as I do, so likely your measurements will completely different. Even more, I was video recording the benchmark, which makes both clients a lot slower. Nonetheless it does somewhat mirror my personal experience.

I came to the conclusion that with 900 rooms, Nheko takes about 10-20 seconds to load and be ready for use on my system, while Element takes about 3 to 4 minutes. So basically Element handles 60 times as many rooms about 2x slower than it did back in the day, while Nheko got a bit faster or about the same speed on the same hardware (but still 60x as many rooms). I've attached a sped up video to this post, so that you can compare it for yourself. But since a lot of people ask, I guess the reason is that I wanted to see how fast you can make a Matrix client. I think I somewhat achieved that in the startup time department, but switching rooms still has a loooooong way to go. Also it is just fun to implement whatever you want in a client, since you are the maintainer and none can tell you how bad of an idea it is. That's probably the reason a lot of people start their own clients? (Although I didn't start Nheko, I just wrote too much code and people didn't want to review it anymore.)

That's it, I hope your eyes didn't glaze over with me babbling on about things. See you next time! :3

Element Web/Desktop (website)

Secure and independent communication, connected via Matrix. Come talk with us in #element-web:matrix.org!

Danielle reports

  • We converted even more end-to-end tests to Cypress and remove Piwik support
  • The issue around permissions to redact reactions has been resolved
  • Added option to hide image previews
  • There have been many improvements to clickable texts in various parts of the application (e.g. when you see “Show more” in the UI) and many other UI tweaks (thank you luixxiul!). As well as UI improvements to colours and layouts in the settings dialog
  • And! Waveforms for voice messages are back! 💃

In labs (you can enable labs features in settings on develop.element.io or on Nightly):

  • Many updates to the new search experience have been merged in preparation for release out of labs!

Element iOS (website)

Secure and independent communication for iOS, connected via Matrix. Come talk with us in #element-ios:matrix.org!

Ștefan says

  • The new first time user experience has now entered internal testing and parts of it were even brought over to ElementX
  • A simplified version of session verification for ElementX is almost ready
  • Redacted messages now show up in the timeline like on the other platforms
  • Message bubbles have finally moved out of labs
  • And, as always, we’re continuing to fix bugs and improve the application overall

Element Android (website)

Secure and independent communication for Android, connected via Matrix. Come talk with us in #element-android:matrix.org!

benoit reports

  • Fixing a pagination regression because of a synapse update to conform the matrix spec. The fix will be included in the coming release 1.4.22.
  • Merged a selection of FTUE improvements, including simplifying login if you specify your server as part of your username. This work is not visible yet in the UI.
  • UnifiedPush is coming! Will be available in Element Android 1.4.22. In the meantime, you can test the feature using a nightly build . This technology will let F-Droid version of the app be able to receive Push and Element Android can stop polling your homeserver in the background, which was consuming lots of battery.
  • When you send a rageshake, screenshots will not be included by default any more
  • We also have set up Flipper in the app, to help developers to debug the application. Inspecting the Realm databases, or the network traffic will help a lot when developing new features or fixing issues.

Element (website)

Everything related to Element but not strictly bound to a client

Danielle reports

Threads

  • This week on Threads we continued our investigation into ranged read receipts as a solution to some of the notification issues
  • We also fixed a UI issue around the rendering of the thread summary in the timeline on iOS

Community testing

  • We found 20 issues this week, testing on Android and web. Thank you to everyone that took part!
  • No testing sessions next week, back as usual week after
  • For more info on our next testing sessions (sync or async), you can join us at #element-community-testing:matrix.org!

Dept of Non Chat Clients 🎛️

Matrix Wrench (website)

Matrix Wrench is a web client to tweak Matrix rooms.

ChristianP says

Happy birthday, Matrix Wrench! 🔧

As you can guess by the title, I've started Matrix Wrench one year ago. Here are the most notable changes of today's birthday release v0.8.0 (2022-06-13):

  • Added: All pages have URLs to quickly navigate to.
  • Added: Bulk actions to invite and kick users
  • Added: The About page now shines some light on the application's features and security.

Dept of SDKs and Frameworks 🧰

matrix-rust-sdk (website)

Matrix Client-Server SDK for Rust

ben announces

Over the last two weeks we've seen major development on the NodeJS support side. After basic nodejs bindings for the crypto-crate have landed, we have been working on getting it ready for shipping: fixing bugs, tests and documentation and working on the prebuild-download-on-postinstall for user convenience.

On other major news, the first UniFFI macro PR, submitted by our very own Jonas, was merged by Mozilla earlier this week 🎉. This is an important milestone as this PR is the opening gate for getting more and more macro-support into UniFFI, eventually replacing the enitre UDL-in-between-action. Congrats for this major step forward

👉️ Wanna hack on matrix rust? Go check out our help wanted tagged issues and join our matrix channel at #matrix-rust-sdk:matrix.org.

Dept of Ops 🛠

matrix-docker-ansible-deploy (website)

Matrix server setup using Ansible and Docker

Slavi reports

Thanks to CyberShadow, matrix-docker-ansible-deploy can now install the go-skype-bridge bridge for bridging Matrix to Skype.

See our Setting up Go Skype Bridge documentation to get started.

The playbook has supported mx-puppet-skype bridging since 2020-04-09, but mx-puppet-skype is reportedly broken.

Dept of Bots 🤖

Matrix Registration Bot

moanos [he/him] reports

The there is a new release that avoids crashing of the bug when the synapse admin is not correctly exposed. For technical reasons (on layer 8) the bug fix is made in two releases. The latest version is now v1.1.7

You can install the new version via matrix-docker-ansible-deploy, directly from dockerhub and of course via pip

Dept of Events and Talks 🗣️

Matrix Summit Berlin 2022

ChristianP says

Four days of Barcamp sessions, presentations, meeting others and Berlin culture! The Matrix Summit 2022 brings people together who work with Matrix. Thu, 25th to Sun, 28th August at the iconic hacker space c-base in Berlin. This event is organised by the local Matrix Meetup community. While people of every skill level are welcome on all days, we're going to highlight real world use cases of Matrix on Sunday. We're inviting newcomers and other communities to learn about decentralised communication software. In return we're learning how Matrix is already used by the German education and health sectors.

Our Call for Presentations starts next week. The event is going to be bilingual: English and German.

See the schedule: https://summit2022.matrixmeetup.de/

Dept of Interesting Projects 🛰️

UnifiedPush (website)

S1m says

UnifiedPush is an open protocol for push notifications on Android, independent from Google Services. It is currently supported by FluffyChat, SchildiChat, and now nightly builds of Element.

If you are new to UnifiedPush:

Installing the ntfy app (F-Droid, Play Store) is the easiest way to start receiving notifications for your matrix messages without Google Services. And if you want to go one step further and self-host a ntfy server, the latest release makes it simpler than ever to set it up on your own server!

For persons already self-hosting ntfy:

The brand new version v1.26 of ntfy server includes a built-in matrix gateway: your homeserver can talk directly to ntfy. If you were self-hosting ntfy with a personal matrix gateway (common-proxies or with a Nginx setup), you can remove the gateway after upgrading to v1.26.

MessageHub (website)

gdlol announces

A P2P Matrix home server created using libp2p.

An early-stage home server prototype that communicates in a fully decentralized manner: every user runs their own server locally!

This is achieved with the libp2p library which provides decentralized node discovery, NAT traversal and gossip-based communication capabilities.

The server implements the Matrix API specifications (with many advanced features still missing, like client-side end-to-end encryption), but did little modification on federation side so that it doesn't rely on the centralized domain name system to setup and authenticate other nodes. On the other hand, this means it cannot federate with existing home servers yet, because of the different trust model (domain name/HTTPS vs self-owned cryptographic keys).

Try out the latest Webview client on windows, or on other OSs with Docker&Browser!

Final Thoughts 💭

Matthew shared

anarc.at published a long and thoughtful critique of Matrix over at https://anarc.at/blog/2022-06-17-matrix-notes/ - interesting reading, even if we don't agree with all the points.

Dept of Ping 🏓

No Thib means no ping this week :(

You can still go check out the ping stats yourself in #ping:maunium.net and #ping-no-synapse:maunium.net!

That's all I know 🏁

See you next week, and be sure to stop by #twim:matrix.org with your updates!