25 KiB
+++ title = "This Week in Matrix 2020-08-21" path = "/blog/2020/08/21/this-week-in-matrix-2020-08-21"
[taxonomies] author = ["Ben Parsons"] category = ["This Week in Matrix"]
[extra] image = "https://matrix.org/blog/img/2020-08-21-ml.jpg" +++
Matrix Live 🎙
{{ youtube_player(video_id="LE-1s9h8YT4") }}
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:
- MSC2033: Adding a device_id to /account/whoami
- Accidentally merged on github, #2738 opened to re-merge after FCP ends
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.
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 significantlyThe 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
Arch AUR support (thanks to @s7evink)
Very efficient searching through rooms (custom implementation based on https://artem.krylysov.com/blog/2020/07/28/lets-build-a-full-text-search-engine/)
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.
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.
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
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 ;)
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.
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 HTTPUse the .well-known API if possible to resolve domains to the actual homeserver's URL, e.g.
matrix.org
resolves tohttps://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 autocompletionOnly 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 behaviorRoom 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
andcontrols.listView.highlightBorderThickness
properties (can be set to0
)- Add the
chat.userAutoCompletion
sectionChanged
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 toopenMessagesLinksOrFiles
and can now also open media message filesUsing the
openMessagesLinksOrFiles
keybind on a reply will now ignore the matrix.to links contained in the "In reply to XYZ" headerPressing 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.0Don'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
propertyAnd lots of fixes, see full changelog
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.
Rank | Hostname | Median MS |
---|---|---|
1 | fairydust.space | 345 |
2 | maescool.be | 865 |
3 | chatserver.ca | 985 |
4 | nuclearlimes.co.uk | 1206 |
5 | utzutzutz.net | 1826 |
6 | nct08.de | 1885 |
7 | kapsi.fi | 1994.5 |
8 | mailstation.de | 2324 |
9 | envs.net | 4053 |
10 | kittenface.studio | 4076 |
That's all I know 🏁
See you next week, and be sure to stop by #twim:matrix.org with your updates!