This Week in Matrix 2020-08-21

2020-08-21 — This Week in Matrix — Ben Parsons

Matrix Live 🎙

Nico, one of the Nheko client maintainers, discusses the state of the project and shares various opinions about Matrix, chat clients, physics, the local weather and so on.

Dept of Spec 📜

anoa offered:

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://matrix.org/docs/spec/proposals.

MSC Status

Closed MSCs:

MSCs in Final Comment Period:

New MSCs:

Spec Core Team

In terms of Spec Core Team MSC focus for this week, MSC1960 will be the only one on the list. The two MSCs from last time will be put aside for this week while we focus on implementation.

2020-08-21-WX3fG-stacked_area_chart.png

Dept of GSoC 🎓️

Nheko(GSoC)

Nheko is a desktop client using Qt, Boost.Asio and C++17. It supports E2EE (with the notable exception being device verification for now) and intends to be full featured and nice to look at

Chethan offered:

  • Room Verification works in Nheko! Still needs some Improvement,working on it.

  • Improving and fixing some caching issues.

  • Fixing some breaking stuff with the new event store Nico is working on.

Dept of Servers 🏢

Dendrite / gomatrixserverlib

Dendrite is a next-generation homeserver written in Go

Neil Alexander told us:

This week we have largely been working on bug fixes and performance issues.

Changes this week include:

  • The room server now handles input events for multiple rooms in parallel when running with PostgreSQL, which helps a lot with perceived latency

  • Device key queries now obey federation backoffs, so that we don't spend a lot of time making unnecessary requests

  • The key server now only emits changes for /users/devices which reduces database hits significantly

  • The client API now tries to guarantee message ordering on a per-user basis (thanks Anand!)

  • Federated invites are now more reliable and are performed synchronously

  • Invite room metadata is now sent correctly in all cases

  • Accepting and rejecting invites is also now much more reliable

  • A bug has been fixed that caused excessive memory usage in the sync API (bringing the memory usage of my own instance down to less than 100mb)

  • A massive amount of work has been done to reduce database locks in SQLite mode across the entire codebase

  • Some unnecessary code has been removed from the roomserver updaters

Spec compliance has improved slightly:

  • Client-Server APIs: 54%, same as last week

  • Server-Server APIs: 71%, up from 70% last week

As always, feel free to join us in #dendrite:matrix.org for the latest!

Conduit

Conduit is a Matrix homeserver written in Rust https://conduit.rs

timo told us:

While work on federation is going on in the background, here are some other things we worked on this week

Also check out the Romeo and Juliet Benchmark!

Thanks to everyone who supports me on Liberapay or Bitcoin!

Synapse

Neil said:

This week we added some more federation readers to matrix.org which should noticeably improve federation lag.

2020-08-21-2HGwe-Screenshot2020-08-21at14.59.34.png

Patrick has continued on with the async/await-a-thon and we are starting to enter the home stretch. Of the things we care about only runInteraction remains. Once done we can get on with profiling the main process.

2020-08-21-u40Ex-Screenshot2020-08-21at15.08.51.png

On the sharding side the last big milestone is to get the event persister to shard. I know this comes up every week, but we now have a rough working implementation for non-backfilled events. Next steps are to get backfill working, get the tests passing, go through review and then ship. I asked Erik if it would be live on matrix.org within 2 weeks. He didn’t say, at least I didn’t hear him say no…> Aside from that Rich is working on the push rules redesign, the next steps are to design the APIs in more detail and then make a formal spec proposal. Brendan is also in notifications land and his work on room unread counts is going through final review.

Finally, Andrew has been working with Sorunome to dust off the knock feature, both on the spec and the Synapse side.

Romeo and Juliet benchmark to compare Matrix server implementations

timo offered:

This week I created the first(?) Matrix server benchmark and ran it on Synapse, Dendrite and Conduit. The test will go through the entire Romeo and Juliet play and create users for each character and sends messages for each line they say.

The results are very interesting:

Synapse:

     timo         neilalexander    Half-Shot

# default (sqlite)
time 5m0.870s

# postgres:
time 1m46.319s                     1m8s


Dendrite:

# default (sqlite)
time 6m8.802s     0m38.502s

# postgres:
time 2m45.387s    0m53.691s


Conduit:

# default (sled)
time 0m4.184s     0m2.776s         0m2.935s

2020-08-21-KRqaI-Screenshot_20200818_223636.png

There is some question here about how federation and state resolution will affect performance on these tests.

Synapse Deployment 📥️

There is rather a lot in this section this week (see also Ops 🛠 section below.) I'll consider making this a more structured (table?) feature in future.

SELinux policy module

0xC0ncord reported:

Hello! Just recently I made public an SELinux policy module I developed for Synapse. This policy is one I developed early on during my trip down the SELinux rabbit hole, and I have been using it in production for some time. At the moment, this policy module is built for the Gentoo SELinux policy (not RHEL/CentOS/Fedora) and does not currently have systemd support, nor has it been tested in all environments, i.e. with workers. I am publishing this policy in the hopes that it will be useful and I am open to any contributions, even those to help tighten the policy if possible. Finally, I have also made public a policy module for coturn, which I am also using in my own personal environment under the same conditions. Both the Synapse policy and the coturn policy can be found on Github. Thank you!

Ansible

JCG said:

The ansible collection famedly.matrix has seen another release, 0.1.2, which updates the element role to 1.7.4 and the synapse role to 1.19.0. As always, get it from Ansible Galaxy, source from Gitlab, and for any questions join #ansible:famedly.de.

Kubernetes

Ananace announced:

Just pushed the 1.19 tags for the K8s-optimized Synapse image, as well as an updated chart version for it that also takes advantage of the added /health endpoint.

Void Linux

JCG announced:

Element 1.7.4 and Synapse 1.19.0 have been packaged for Void Linux, packages are already available from mirrors.

dacruz21/matrix-chart Kubernetes Helm Chart

Typo Kign told us:

v2.5.0 of dacruz21/matrix-chart has been released with Synapse 1.19 support and some new configuration options.

YunoHost

Pierre reported:

YunoHost is an operating system aiming for the simplest administration of a server, and therefore democratize self-hosting.

Synapse integration is still 1.18.0, 1.19.0 is available en branch testing

Element Web integration is still 1.7.3, 1.7.4 is available en branch testing

Dept of Bridges 🌉

Telegram public channel mirror

bo41 reported:

As channels are really popular in Telegram, I wrote a quick and dirty program/bot which can mirror (text and image) public Telegram channels to Matrix rooms. This should make it easier for Telegram users to consider a switch.

Making the rooms read-only via permissions prevents messages from users. It provides a good basis for someone trying to make a real 1to1 mirror. Please fork this project and host some channels publicly ;)

https://git.sr.ht/~bo41/matrix-channel-mirror

This project is functionally quite different from the more established mautrix-telegram: it is purely designed to mirror content from Telegram public rooms.

matrix-appservice-irc release 0.20.1

Half-Shot said:

Hello all, I'm going to be quick off the mark and announce matrix-appservice-irc release 0.20.1! This release contains a ton of bug fixes and quality of life changes that you never knew you were missing. Please update and report back in the usual channels as always. Thanks!

Dept of Clients 📱

Nheko

Nheko is a desktop client using Qt, Boost.Asio and C++17. It supports E2EE (with the notable exception being device verification for now) and intends to be full featured and nice to look at

Nico (@deepbluev7:neko.dev) reported:

I've been working on trying to finish the event store (when I wasn't distracted by video calls with some people). This should allow limited offline use and reduce memory use as well as allow some other features in the future. If you want to try it out, you can build this PR or try out the nightlies with new-event-store in their name.

If you decide to try it out, backup your cache or at least BACKUP YOUR ENCRYPTION KEYS! I won't be responding to feedback immediately, since I am currently hiking, but I should get to it this weekend or next week. Come discuss it in #nheko:ocean.joedonofry.com, if you have some feedback or issues.

See also Matrix Live this week!

Element Android

benoit announced:

We are still fixing issues on Element Android. Hopefully we will release version 1.0.5 of the application and of the Matrix SDK in the coming days!

later, fidèle à sa parole:

Element Android 1.0.5 has been published on the beta channel of the PlayStore. If everything is fine it will be pushed to production next week. I've also published SDK v1.0.5, and push translations of the PlayStore home page of Element to German, Chinese, English US, Hungarian, Portuguese (Brazil), Russian, Slovak, Swedish and Ukrainian.

Element-iOS

steve offered:

This week, we improved customisation for forks. We add possibility to customize default HTTP headers (like "User-Agent") and improve login and room settings screens customisation. We started to improve project documentation. We also made some fixes like fixing registration validation link in email.

Element Web

Ryan announced:

  • Released 1.7.4

    • Updated various links and strings for the new brand

    • Renewed Windows code signing cert

    • Removed rebranding toast

    • All cross-signing keys now shared with other devices during verification

  • This week

    • Mode to require secure backup during registration

    • Continue work on deferred cross-signing setup

    • Light weight Hydrogen client continues, adding key features and design tweaks

    • Notifications continues in background while push rules evolve

    • Matrix.to link previews in progress

Hydrogen

Hydrogen is a web-based client designed to be very lightweight, and with few dependencies. Anyone who wants to discuss Hydrogen can join #hydrogen:matrix.org.

Bruno told us:

Added several features this week:

  • avatars and display names in the timeline and for rooms

  • implemented the logic for the member list, but no UI for this yet

  • room list sorting by last message timestamp, unread state and badge count

  • clear unread state when reading a room

  • some visual tweaks in the timeline and room list

  • bug fixes

If you have checked out hydrogen before, you'll need to clear your session (the little clear button in the session picker) to get correct avatars and display names everywhere.

Next week I'll get started on E2EE, which should make the project a lot more useful. I'll look into leveraging the nice rust matrix-crypto-sdk for this.

2020-08-21-qAi-A-image.png

Mirage 0.6.1

miruka hit us with a late breaking update about Mirage!

Mirage 0.6.1 was released today:

Added

  • SSO authentication support

  • Homeserver browser:

    • To add a new account, you will be asked first to pick one of the listed public server (list data from anchel.nl) or to manually enter a server address
  • Typing in the server address field will also filter the public server list, Up/Down or (Shift+)Tab and Enter can be used to navigate it by keyboard

  • If the address doesn't have a scheme://, auto-detect whether the server supports HTTPS or only HTTP

  • Use the .well-known API if possible to resolve domains to the actual homeserver's URL, e.g. matrix.org resolves to https://matrix-client.matrix.org

  • The server address field will remember the last homeserver that was connected to

  • Room members autocompletion:

    • Type @ followed by one or more characters in the composer, or one or more characters and hit (Shift+)Tab to trigger username/user ID autocompletion

    • Only autocompleted names will be turned into mentions, unlike before where any word in a sent message that happened to be someone's name would mention them

  • Full image viewer for matrix image messages and URL previews:

    • Click on a thumbnail in the timeline to open the image viewer

    • Middle click on a thumbnail (or use the option in the context menu) to open the image externally

    • Left click on the image (mouse only): expand to window size if the image's origin size is smaller than the window, else expand to original size

    • Tap on the image (touch screen/pen only): reveal the info and button bars when auto-hidden (bars will auto-hide only when they overlap with a big enough displayed image)

    • Any mouse movement: reveal auto-hidden bars

    • Double click on the image: toggle full screen

    • Middle click anywhere: open externally

    • Right click anywhere: close the viewer, back to chat

    • Drag when displayed image is bigger than window to pan

    • Wheel to pan up/down, hold shift or alt to pan left/right

    • Ctrl+wheel to control zoom

    • Buttons to control rotation, scale mode, full screen, GIF play/pause and GIF speed

    • New keyboard shortcuts are available for all these actions, see keys.imageViewer in the config file (will be automatically updated when you start Mirage 0.6.1)

  • Add media.openExternallyOnClick setting to swap the new click and middle click on thumbnails behavior

  • Room and member filter fields now support (Shift+)Tab navigation, in addition to Up/Down

  • Add a colored left border to the currently highlighted item in list views (e.g. room list, members list, etc) to improve visibility

  • Themes:

    • Add controls.listView.highlightBorder and controls.listView.highlightBorderThickness properties (can be set to 0)
    • Add the chat.userAutoCompletion section

Changed

  • Messages context menu:

    • Use a cleaner icon for the "Copy text" entry

    • Replace the confusing broken "Copy media address" entry with:

      • Copy media address: visible for non-encrypted media, always copies the HTTP URL

      • Copy local path: always visible for already downloaded media, even if they were downloaded before mirage was started

  • The openMessagesLinks keybind (default Ctrl+O) is renamed to openMessagesLinksOrFiles and can now also open media message files

  • Using the openMessagesLinksOrFiles keybind on a reply will now ignore the matrix.to links contained in the "In reply to XYZ" header

  • Pressing Ctrl+C to copy selected/highlighted non-encrypted media messages will copy their HTTP URL instead of the filename

  • Retry downloading image thumbnails if they fail with a 404 or 500+ server error (uploads sometimes take a few seconds to become available on the server)

  • Non-encrypted media messages are now always downloaded on click and opened with a desktop application (or the image viewer), instead of being opened in a browser

  • Compress thumbnails and clipboard images in a separate process, to avoid blocking every other backend operation while the compression is running

  • Reduce the level of optimization applied to clipboard images, the previous setting was too slow for large PNG (10MB+)

  • Increase applied scrolling velocity when using the scrollPageUp/scrollPageDown keybinds, now similar to how it was before Mirage 0.6.0

  • Don't catch SIGQUIT (Ctrl+\ in terminal) and SIGTERM signals, exit immediately

  • Slightly increase the top/bottom padding to the multi-account bar in the left pane

  • Dependencies: minimum nio version bumped to 0.15.0

Removed

  • Themes: remove unused controls.listView.smallPaneHighlight property

And lots of fixes, see full changelog

Mirage

Dept of SDKs and Frameworks 🧰

Ruma

iinuwa offered:

We wanted to take a little bit of time to show off a state resolution library for Ruma, courtesy of @DevinR528 and @Timo. Ruma has a new crate to make resolving state easier, state-res! The goal of this crate is to be the base for federation, it provides the necessary utilities to resolve state, sort power events (reverse topological ordering), sort events (based on mainline depth), and a lot of event authentication functions. It is still in the early stages of development, but will be hopefully proved out in Conduit.

Other things that happened this week:

  • Added the invite endpoints from the Federation API

  • Started requiring strong types for event-sending endpoints

  • Augmented error types with error-specific fields (see the livestream here)

Speaking of livestreams, @jplatte streams coding sessions from time to time on Twitch. If you're interested in watching some coding streams to get more familiar with the Ruma codebase or learn Rust in general, follow us at [#ruma-livestreams:matrix.org](https://matrix.to/#/#ruma-livestreams:matrix.org)!

Very impressed that these features are landing in Ruma first, with the intention of getting them into Conduit.

mautrix-go

nikofil reported:

  • SSSS and cross-signing are slowly making their way to mautrix-go! A WIP PR exists for both features and is being developed upon. This will allow any clients that use the library to eventually be able to use SSSS and verify the trustworthiness of other devices based on cross-signing.

Ruby

Ananace announced:

Just pushed version 2.1.1 of the Ruby Matrix SDK, mainly including a couple of fixes for various minor issues.

Dept of Ops 🛠

matrix-docker-ansible-deploy

This Ansible playbook is meant to easily let you run your own Matrix homeserver.

Slavi said:

matrix-docker-ansible-deploy now makes it incredibly easy to use rust-synapse-compress-state to compress the state groups in your Synapse database.

See our Compressing state with rust-synapse-compress-state documentation page to get started.

Dept of Bots 🤖

go-neb

nikofil said:

  • Device verification was merged to neb! It needs human intervention to approve that the SAS match, of course.

  • A new service called "cryptotest" was added that allows other clients to exchange e2e-related events with neb to test their capabilities (such as encryption, room key forwarding, SAS verification)

Final Thoughts 💭

Christian told us:

Residents of Germany can apply for the Prototype Fund until the end of September. They are looking for new open source ideas or features and fund about 20 projects twice a year with 47,500 EUR for six months (starting in April for this round).

Previously funded chat-related projects include Briar and OpenPush. It would be great to see a project building on Matrix.

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. Join #ping:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.

RankHostnameMedian MS
1fairydust.space345
2maescool.be865
3chatserver.ca985
4nuclearlimes.co.uk1206
5utzutzutz.net1826
6nct08.de1885
7kapsi.fi1994.5
8mailstation.de2324
9envs.net4053
10kittenface.studio4076

That's all I know 🏁

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