[Matrix will] be rolled out by the German education system to provide collaboration tools for half a million seats in the states of Schleswig-Holstein and Hamburg
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.
In terms of Spec Core Team MSC focus for this week, we'll be continuing on with MSC2674 (aggregations pt1: relationships) and adding MSC1544 (QR code verification) on top.
E2E Dendrite work is progressing, and we're making a lot of breaking changes ahead of our first stable release which you can expect in the coming weeks.
As for the changes this week:
Add a bare bones user directory. This is mainly to benefit the iOS Yggdrasil demo.
The dendrite-config.yaml configuration format has been overhauled. It's still in review but expect big changes here!
Fixed a bug with SQLite when handling large rooms (thanks @HenrikSolver!)
Device lists now work locally, with federation support to come.
This week we shipped 1.18.0 which contained support for our worker sharding performance projects that youβve been hearing about recently.
We also shipped a security and feature release of Sygnal (actually two eachβ¦). The main new feature being the ability to run behind an HTTP proxy which is useful in environments that mandate that all traffic go through a proxy.
Aside from that week we continued our async/await-athon and Patrick provided a visual update
Weβve been documenting worker support and diving into sharding the event persisters. This is not a small job since it means every other part of the code base that assumes an integer stream id will need to be updated to be aware of multiple stream ids from multiple persisters.
Over in feature land weβve been working on the notifications project and most of the backend support is done. The project will mean more intuitive defaults as well as a much better client UX in configuring notification settings.
Just pushed the 1.18.0 K8s-optimized Synapse images, now only doing the debian-based version as like upstream - though still including jemalloc. So latest/v1.18.0 and *-debian will be the same in this version and going forwards. Additionally, the *-debian tags will only remain for a release or two more before disappearing, as they're now superfluous.
I finally added automatic backfilling options to mautrix-telegram. Like my other bridges, it can backfill old messages when creating portals and missed messages when restarting, and it can disable notifications in the room while backfilling.
I also added bridging for your own read receipts, so if you read a message with another Telegram client, the bridge will mark it as read on your Matrix account with double puppeting.
gomuks can now do interactive verification for e2ee. Most of it is thanks to nikofil's SAS verification PR to mautrix-go, I just made a UI for using it. Currently gomuks can only send verification requests, but I'll add some interface for accepting incoming requests soon.
Related to verification, there are some new commands for verifying/unverifying/blacklisting devices and viewing device lists. There's also a toggle to disable sending messages to unverified devices.
This is super exciting, raises gomuks to the level of a daily driver IMO.
SAS verification support has been merged! Support for it should also be landing in go-neb soon, both for verifying with the bot's device and for testing with go-neb's client testing service. Next up, looking at SSSS and eventually cross-verification support.
We, some German Synapse admins, have created a survey about the usage of Matrix-Synapse for private statistic purpose (results will be published alike). As suggested in #synapse:matrix.org, this could also be a topic for "TWIM".
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
kleinhirn.net
366
2
fairydust.space
383
3
tchncs.de
394.5
4
mjdsystems.ca
506
5
matrix.org
587
6
nobelium.no
753.5
7
pixie.town
761
8
matrix.linux.pizza
1111
9
uraziel.de
1230.5
10
yyyyyyy.ml
1314
That's all I know π
See you next week, and be sure to stop by #twim:matrix.org with your updates!
New guide for client e2ee implementation, including cross-signing
Thanks and congratulations to Sorunome this week for releasing a new guide: Implementing more advanced e2ee features, such as cross-signing. This is a hugely detailed guide detailing the necessary steps to enable Cross-Signing and verification. Thanks as well to uhoreg and poljar for their work in reviewing the text!
I wrote a master thesis that tries to create e2e encryption based on Ethereum on top of Matrix. It may not solve all problems but it's an interesting experiment
I have put the long-awaited MSC2312 out of WIP - this is about matrix: URIs in case you haven't heard - and it's already in active discussion at #uri-scheme-proposal:matrix.org! Join the fun to make it the most awesome! The upcoming Quotient 0.6 has an implementation of those so adventurous Quaternion users can start experimenting right away.
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.
In terms of Spec Core Team MSC focus, we've reduced last week's list of 5 MSCs down to one, MSC2674 (aggregations part 1: relationships). Next week, we're going to focus entirely on that MSC to make some headway on finally getting aggregations into the spec.
The P2P Yggdrasil iOS demo has seen some improvements:
Federation sender blacklists are now persisted which is important as the iOS app will be frequently terminated.
SQLite3 now uses TransactionWriters in more places to reduce the amount of 'database is locked' issues.
Federation sender has had much of its storage code refactored and de-duplicated.
In addition, there has been much work getting Dendrite to support E2E rooms, which it now mostly does.
You can create and join E2E rooms and have a conversation locally, though there's issues with it over federation. In addition,
Dendrite currently lacks device lists so adding new devices may result in unable-to-decrypt errors:
Send-to-device events now work over federation.
Device key uploads and querying now work both locally and over federation.
One-time key uploads and claiming now work both locally and over federation.
Spec compliance is up from last week:
Client Server APIs: 49%, up from 48%.
Federation APIs: 53%, up from 51%.
Doesn't it feel like we'll be using Dendrite in the wild really soon now?
This week we continued on our async/await athon, you can track progress here, expect steady progress over the coming weeks.
We dusted off the notifications project working with our pals in the Element client teams to ensure that the push rule defaults make sense. On the flip side we made further improvements to Sygnal and will merge the ability to have it sit behind a proxy rsn.
We are also trying to figure out how media retention limits should work in Synapse.
Up next is to continue our performance push. We need to spend time between pulling things off the master process as well sharding the event persister. We will continue with notifications and maybe finally squash https://github.com/matrix-org/synapse/issues/2528
Hello people. It's been a while since I've talked about a new bridge...or actually any bridges. Fear not, now you can hear both! Today I'm announcing the birth of another project matrix-figma. Figma is an online collaborative design tool. It was created to scratch an itch with the Element design team, who wanted to see comments appear in their Matrix rooms in realtime when someone commented on a Figma file.
The bridge works by first joining it to an "admin room", which functions as a permitted user list. The bot can then be invited to any other room so long as the invitee is in that admin room, and can then ask the bot to start directing comment notifications into the room.
The room uses room state to hold configuration, so you can host the bot as a docker container anywhere without the need for any support files!
I can announce that the bridge is now functional for simple use cases such as these, with more interesting functionality in the future.
This Python project was initially intended for a full migration from Slack to a new Matrix homeserver and allows reusing the imported user accounts. We have some research groups using Slack that would like to import their Slack workspace history to our Matrix homeserver. This PR allows to import a (free) Slack export to a fresh and empty Synapse instance that is federated with our main homeserver. We do not need a full "migration": we kick all imported users and invite the existing Matrix users from our homeserver.
Two groups already imported the history and switched to Matrix, one more is in queue and probably more to come.
This is a really, really exciting development, and the context for which Sven is expecting to use it is BIG, I can't wait til we can share more about it!
The Twitter DM bridge I announced last week mostly works now. It does text and reaction bridging in both directions, twitter->matrix media bridging, end-to-bridge encryption and backfilling. I also added support for it in mautrix-manager for web-based login.
If it mostly works, I guess it's time to mostly start trying it out!
Fluffy 0.16.0 has been released! It is already available on F-Droid, Google Play and IOS Testflight will follow. You can also try it out in the webbrowser. Visit https://fluffychat.im
Features
Implement web notifications
Implement a connection status header
Changes
Switch out database engine for faster performance
Greatly improve startup time
Added languages: Galician, Croatian, Japanese, Russian, Ukrainian - Thanks a lot to all the weblate users!
Only show the microg toast once, if you have play services disabled
Homeserver URL input now strips trailing whitespace and slash - Thanks @Katerina
Also use prev_content to determine profile of a user: This allows the username and avatar of people who left a group to still be displayed
Fixes:
Fix not being able to initiate key verification properly
Fix message sending being weird on slow networks
Fix a few HTML rendering bugs
Various other fixes
Fix the 12h clock showing 00:15am, instead of 12:15am - Thanks @not_chicken
Fix an issue with replies and invalid HTML
Fix messages getting lost when retrieving chat history
Fix a bug where an incorrect string encoding from the server is assumed
Fix a bug where people couldn't log in if they had email notifications enabled
Last week, we forgot to announce that we renamed the Riot-iOS app to Element but this is not a surprise anymore. The app version is now 1.0.0. This change came with a lot of UI tweaks like new icons and new colors.
Since then, we made bug fixes we will release soon. This week, we also worked on PIN protection for the app, including support of Touch ID and Face ID.
Quotient 0.6 released! The release notes are somewhat long, since it's been 4 months since the last stable version update, and more than a year since the 0.5 release - thanking two heroes of this release, and giving a nod to the original Quaternion author who happened to contribute using an inverted time machine. Read here: https://github.com/quotient-im/libQuotient/releases/tag/0.6.0
Big news - first release in a year. Do take a look at the full notes, they're very readable. In particular, they call out contributions from Black Hat, Alexey Andreyev and the original project creator, Felix Rohrbach aka @fxrh.
Dept of SDKs and Frameworks π§°
ruma
Ruma is a Rust project to create a comprehensive set of APIs for Matrix. Previously there was a Ruma homeserver project.
We weren't in TWIM for a while, but that doesn't mean no progress! Apart from Devin's constant work on ruma-events, there was also some movement in ruma-identifiers and ruma-client-api, with the former seeing a new release, 0.17.0.
We're planning to do more releases next week, and hopefully a 0.1 release of the ruma crate that provides a simpler entry point by re-exporting everything else, in one of the weeks after that. Stay tuned!
Dept of Ops π
matrix-docker-ansible-deploy
This Ansible playbook is meant to easily let you run your own Matrix homeserver.
It's been a while since it's come up, but matrix-wug is a bot capable of transcribing characters writable via normal keyboards to scripts from other languages/notation systems
It supports: x-sampa, z-sampa, proto-indo-european, Inuktitut, and IΓ±upiatun.
Now it also supports hiragana! The romanization system is something like WΔpuro rΕmaji, but sticks to Nihon-shiki when in doubt.
I want this transcription to be forgiving, so if you find it not transcribing something in a way you'd expect it to, feel free to DM me!
To use it use the hi key with a delimiter like /x/ or []
hi/konnichiwa maatorikusu!/
vΓΈgg is also behind pantalaimon now so it now works in encrypted rooms π
If you need to convert swiggles into a different type of swiggle, dandellion has you covered here.
This bot is not about adapting the current jitsi integration provided by Element IM as widget.
If you have a configured jitsi server to be authenticated with jwt tokens as in https://github.com/jitsi/lib-jitsi-meet/blob/master/doc/tokens.md , this bot will assist you when claiming for a jwt instead of going to jwt.io each time.
You'll need to create a user and invite you in each room where you want to create a jitsi room url respecting the matrix power levels in the room.
When the service is running invite the bot and send message !jitsi-jwt
If you are a moderator in the room (alias you have enough power levels to redact messages), then you will get a direct message from bot with the url to jitsi
room with the jwt get parameter.
New cody release. @cody:bordum.dk is a chat bot that works as a REPL for your matrix rooms. This week I worked on metrics. I host a Grafana instance with anonymous access allowed, so codys charts are now embedded the #cody:bordum.dk chat room.
I am proud to announce the very first release of sMythbot, the Matrix chatbot designed to control your Myth Tv DVR remotely. This release should be considered a tech preview. I welcome feedback and Bug reports. More information on installation and setup is available in the project wiki.
It currently supports the following commands
!smythbot help: Display this message
!smythbot set mythbackend address: Sets the Myth Tv backend address to use for this room.
!smythbot set mythbacked port: Sets the Myth Tv backend port to use for this room.
!smythbot view mythbackend address: Allows you to view the Myth Tv backend address set for this room
!smythbot view mythbackend port: Allows you to view the Myth Tv backend port set for this room
!smythbot view mythbackend info: Allows you to view various pieces of information for the Myth Tv backend connected to this room. It will not work if the address and port are not set.
!smythbot display upcoming recordings: Displays the upcoming recordings on your Myth Tv Backend.
!smythbot display recorded programs: Displays the recordings from the default recording group that are stored on your Myth Tv Backend.
The team behind Noteworthy (Matrix over WireGuard overlay networks) has started work on bringing better mobile web support for Element (riot-web).
Noteworthy Elements is a lightweight shim powered by the Ionic Framework thats goal is to bring first-class support for Element running on mobile devices.
What we have so far
Usable version of Element wrapped in native iOS / Android app
Ability to run multiple instances of Element in a native iOS / Android app (ie connect to multiple home servers simultaneously)
Our initial experimentation has been positive and our goal is to make Element the best mobile client for Matrix with minimal fuss. With minimal changes to Element's codebase our goal is to land (significantly better) support for mobile web in upstream Element. Join us over at #noteworthy:tincan.community to get involved!
Trust-based Moderation Using Distributed Chat Systems for Transitive Trust Propagation
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
309
2
bardiharborow.com
545
3
nicoll.xyz
647.5
4
grant.org
667.5
5
elsmussols.net
694
6
heitkoetter.net
871.5
7
ragon.xyz
876
8
acmelabs.space
906.5
9
opensuse.org
915.5
10
matrix.vgorcum.com
1017
That's all I know π
See you next week, and be sure to stop by #twim:matrix.org with your updates!
Let's hear from Christian about working on his dream projects, his thoughts on bridging, hosting, and the importance and nature of chatbots and assistants.
Dept of Status of Matrix π‘οΈ
"Element"
This week was the announcement of the much-awaited rebrand: Riot is now Element. In fact, three brands are coalescing into one: Riot and New Vector will be referred to as Element, while the SaaS platform known as Modular.im is now Element Matrix Services.
Note that Matrix is not involved in this change. Matrix is still Matrix, don't worry about that!
CommCon Virtual 2020, with added Matrix
CommCon is an event dedicated to Real-Time Communications. In 2020 they made the difficult decision to go online-only, but had a fear of missing out on the "hallway-track" that is so important to industry events. Their solution was to include a live chat to run alongside their streamed talks!
Matrix was a natural choice for the crowd, but they wanted a way to encourage viewers to join the correct room from their own Matrix clients. To do this, they used the GSOC project from arnav-t - an HTML Embedded client - to present a live scrolling-view of the chat. You can see the result at https://2020.commcon.xyz/live/.
This week, the Spec Core Team will be focusing on MSC2610 (Removing m.login.oauth2 from User-Interactive Authentication), MSC2611 (Removing m.login.token from User-Interactive Authentication), MSC2663 (Errors for dealing with non-existent push rules), MSC2674 (Event Relationships), and MSC2689 (Fix E2EE for guests).
Dept of GSoC ποΈ
Ruma/Matrix GSoC update
Ruma is a Rust project to create a comprehensive set of APIs for Matrix. Previously there was a Ruma homeserver project.
This week in the ruma/matrix Google Summer of Code project, I worked on refactoring both ruma-api and ruma-events. After moving some of the larger chunks of the ruma_api_macro::api::Api::to_tokens method to helper functions, I spent time removing repetition from the Request/Response code generated by the ruma_api! macro. For ruma-events, the input parsing was changed to only allow valid names for the Any*Event enums. Altering the input parsing had the added benefit of replacing all of the string comparison and manipulation with strongly typed comparison and manipulation.
The final few issues to be resolved before the next crates.io release for ruma-events can happen are related to redacted events. Support for redacted events was added to the Any*Event enums, they now have redacted variants of each event kind. A few follow-up PR's have been merged to fully integrate redacted events into ruma-events, fixing specific event deserialization issues and splitting the UnsignedData struct into Unsigned and RedactedUnsigned.
I also investigated why so many sytests fail and created this issue: https://github.com/matrix-org/sytest/issues/913
Apparently Sytest did not expect a server to optimize their /sync responses as much as Conduit does :P.
Hot on the heels of shipping shardable federation readers last week, this week we shipped shardable federation senders. There is still plenty of work to do, but together these changes has made a massive difference to federation lag overall and hopefully those of you not on matrix.org are noticing the difference when you talk to matrix.org users.
This graph shows the impact to outbound federation lag.
Aside from that we also shipped shardable push and frontend proxy workers as both were starting to max out on CPU as well as a shardable client reader, allowing us to shard registration which was especially important this week :)
Finally we moved typing notifications from the master process and optimised incoming replication queuing to buy us a little more head room.
Next steps are to revisit where all the remaining cycles are going on the master process. To help us profile we are migrating to async/await semantics and Patrick produced this natty graph to track progress.
Outside of performance we shipped a bug fix to prevent large initial syncs taking out the synchrotrons. The admin api sprouted an end point to list room members (thanks awesome-michaeland the ability to reactivate previously deactivated users.
Coming up weβll dust off the notifications project which has been put on hold while Riot transmogrified into Element and weβll continue with chipping away at the master process.
And another bump of the K8s-optimized Synapse images, this time to 1.17.0
Synapse adoption graphs
We only featured this a month ago, but I want to call attention again to this awesome Synapse version adoption tracking project from Chris . I wanted to know how quickly Synapse 1.17.0 would be the most deployed version (~36 hours), and the answer is right there!
I started working on a Twitter DM bridge that uses the internal API instead of the complicated official one. It should be easier to set up than bridges using the official API, since there won't be a need to get API keys and forward webhooks. The main risk is that Twitter doesn't like people using the internal API and starts blocking users like Facebook does, but hopefully that doesn't happen.
PlayStore users: Element should come as a regular upgrade of the application Riot-Android, and the upgrade will update your previous account and data, without the need to log in again.
F-Droid users: Element is a new app, you have to install it and log in again.
RiotX: RiotX will disappear from the PlayStore (it was only a beta application). We will provide a very last update to inform users to install Element Android
Please report any issues at https://github.com/vector-im/riotX-android (which will probably be renamed soon), because Element Android is actually RiotX code!
Thanks for all the contributors of RiotX, we still have lots to do to make the app even better and full featured.
After seeing all the Element room avatars, I thought to myself, "you know what, #radical-webext:matrix.org needs a new icon"β¦ so I sat down and combined a couple of icons. The result:
Radical also quickly (as always) got updates when Element 1.7.0 and 1.7.1 were released. Huge thank you to stoic for making Radical in the first place.
I updated my F-Droid repos which are containing the dev builds to reflect the latest naming change to Element.
The people who formerly used my repos for getting the dev repo of Riot-Android should update to the new repo. It wont be updated to get Element
As always you can grab the F-Droid or GPlay flavor and you can pick the repo which reflects your flavor on https://fdroid.krombel.de
Note: As "the new repo" is internally the same repo as the one of RiotX (and Riot.imX) the people who already used that don't need to update their packet source. They will get the updates to Element via the old repo urls.
As promised last week, maubot now supports end-to-end encryption. It's a bit bare at the moment, so you need to manually insert the device ID into the database for it to start working, but other than that it works. Plugins don't need to be changed at all, the framework will handle everything.
While I was adding e2ee to maubot, I also improved mautrix-python's crypto stuff so that it's easier to use it directly as a client library with e2ee. Some day I might even add docs :D
Related to my previous update here, I've just published an initial version of a Matrix Client-Server client library for the Crystal programming language: https://github.com/cvincent/matrix-client-cr
Is this the first time we've seen tooling for Crystal?
Dept of Ops π
matrix-docker-ansible-deploy
This Ansible playbook is meant to easily let you run your own Matrix homeserver.
We have a few ways to handle the migration depending on how much change and breakage you're willing to tolerate. See our Migrating to Element documentation page.
Matrix-Alertmanager bot has a new release of v0.3.0. Highlights are compatibility with AWS Lambda, better error handling if message fails to send and the ability to do a @room mention on firing alerts. Find it here.
This week, we got support for javascript (nodejs) with !js. The code
complexity was considerably reduced, which should make adding new languages
much easier in the future. All Python sub-dependencies are now pinned, making
Noteworthy team (patrick and myself) have open sourced both components (spoke & hub) of Noteworthy (Matrix over Wireguard overlay networks -- https://github.com/decentralabs/noteworthy) we are actively welcoming testers/contributors and working with a handful of projects on incorporating our deployment model over in #noteworthy:tincan.community -- it is also the fastest way (less than a minute) to deploy your own home server! Also, working on incorporating Noteworthy into the popular ansible deployment repo to enable users who don't have access to a publicly accessible to deploy their own home servers.
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
390
2
exp.farm
555.5
3
matrix.vgorcum.com
768
4
tchncs.de
810.5
5
settgast.org
1026
6
moritzdietz.com
1046
7
ragon.xyz
1288
8
aragon.sh
1383
9
elcyb.org
1755.5
10
kapsi.fi
2034
That's all I know π
See you next week, and be sure to stop by #twim:matrix.org with your updates!
Ania M. Piotrowska (@aniampiotrowska), known for her work on Nym, Loopix, and at UCL presented "Building private future for the internet with the Nym mixnet".
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.
Note that a majority of those new MSCs are split out from MSC1849 (the aggregations MSC) to make it easier to review π
Spec Core Team
In terms of Spec Core Team MSC focus for this week, we're sticking to implementation work. anoa did have some time this week to make the graphs more useful though:
work is still being done on the bot's functionality to test different crypto functionalities of other Matrix clients when thrown in a room with them
slight improvements to mautrix-go (sql store can now store multiple Olm accounts and their sessions, key rotation params taken from encryption event, other minor things)
add some simple instructions to the readme for enabling e2ee for neb as well as integrate these mautrix changes (PR #330)
room_key_requests will probably be the next thing to be developed for mautrix-go
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
Over the last couple of weeks I have been working on the next P2P demo, using Yggdrasil as the transport instead of libp2p. Although libp2p is arguably more featureful in many ways, Yggdrasil does have one major benefit in that it provides full overlay routing. Participants in the network can carry traffic on behalf of other participants, resulting in something much closer to a true mesh network.
The mad science doesn't end there however. I've also built a custom Riot iOS build that includes the full Dendrite P2P demo (yes, that's a homeserver running locally on your phone). If you have an iPhone or iPad, it's available in public TestFlight right now and you can play with it!
The demo still is very experimental and has a number of bugs still (including but not limited to messages occasionally taking a while to deliver, the app crashing when going into the background sometimes etc.) but we'll be improving it further in the coming weeks and it's quite fun to play with, particularly if you can do so with other people nearby.
Thanks to the same technology that powers AirDrop, the demo will automatically find and connect to other nearby devices running the demo and build up a network automatically - even if you are not on the same Wi-Fi network (or indeed connected to Wi-Fi at all)! If you don't have any other nearby peers to test with then fear not - you can still configure a public static peer in the app settings and join the wider network that way.
With any luck the room directory will even work too, showing published rooms from other nearby devices. If not, try joining #beachparty:b5ae50589e50991dd9dd7d59c5c5f7a4521e8da5b603b7f57076272abc58b374 from within the app.
Questions, comments or feedback? Join us in #p2p:matrix.org!
Many of you know that I work on a Go homeserver called Dendrite, and so I've had to get familiar with SyTest: a black-box homeserver integration testing project. Unfortunately SyTest has a number of problems: from the dialect of perl, lack of documentation for federation bits, the inability to run a single test, and so on. Having a solid black-box integration testing project is crucial for the ecosystem to ensure spec compliance (and hence compatibility between server implementations) and for making all servers more stable and reliable.
As a side project I've been working on a modern Go rewrite called Complement which is now ready for a bit more exposure. It currently only has a handful of SyTests converted but I hope to rapidly expand the number in the coming weeks. Complement makes heavy use of Docker to agnostically run homeservers, and already includes a Dockerfile for configuring a Dendrite instance. To try it out, clone the repo and run:
(cd dockerfiles && docker build -t complement-dendrite -f Dendrite.Dockerfile .)
COMPLEMENT_BASE_IMAGE=complement-dendrite:latest go test -v ./tests
If you're interested in learning more and maybe adding some tests check out ONBOARDING.md.
My overall hope is that Complement will lower the barrier to entry when adding tests by so much that it encourages any bugfix/feature in any homeserver implementation to result in a new test. This will benefit everyone and create a feedback loop which will make Matrix even more reliable.
Asked about Sytest and SyTS, Kegan added:
Complement currently implements the same tests as sytest, so tests which pass sytest will pass complement (though that will diverge as complement will guard against more race conditions by default). There's about 9 different kinds of tests currently testing CS-API and Federation (outbound to a dummy server and inbound via a federation client)
The problem with SyTS was that the test tooling around it ultimately wasn't expressive enough. I was using Jest and kept finding myself fighting it by bumping up against issues like https://github.com/facebook/jest/pull/8751 and the multi-process parallelisation stuff was too opaque. The assertion helper functions also lacked context because they rely on behavioural testing names like describe("foo") { it("should say bar") { ... } etc so when your assertion fails (eg wrong value for a JSON key using assert equals) it just says unhelpfully "foo != bar" where what I really want is to know what it actually does say then, and other contextual info around the object (maybe the key name was typod). When I realised that the assertion lib didn't have this and I'd need to add it, coupled with parallelisation concerns and head-desking against Jest, I found myself wishing I just used something else. I stuck with it though and then realised that all the federation stuff (signature checking, canonical JSON, etc) would need to re-implemented when I knew I had working code in Go. Both of these things combined and I thought "you know what, I'm just going to do this in Go" but you'll note that the architecture is identical, so SyTS lives on as an early prototype for Complement ;)
Hi everyone, here are some things we worked on this week:
Work on to-device sending improvements
Work on room tags (thanks to @gnieto)
Merged /logout/all endpoint (thanks to @CapsizeGlimmer)
Work on /joined_members (thanks to @CapsizeGlimmer)
Last week we had a list of major features still missing. Here's a list of what already works:
Registering, logging in, creating rooms, room visibility, join rules, basic permission management, public room list, inviting, creating DMs, e2e encryption, key backups, device verification, cross signing, notifications, uploading media/files (also user/room avatars), lower-resolution media thumbnails, voip calls and a few other thing's I'm forgetting right now.
So it's useable for non-federating chats already.
Thanks to everyone who supports me on Liberapay or Bitcoin!
In Synapse land this week, we shipped 1.16.0 and err 1.16.1.
Lifting from the blog post, the highlights are:-
An important performance fix to improve room state resolution.
An option to enable e2e by default for new rooms.
Ability to run multiple media repo workers side by side.
Ability to mark specific content as being safe from quarantine.
Bug fixes to make migrating from SQLite to Postgres more reliable - if you are running sqlite for anything other than evaluation purposes then please migrate!
Continuing our matrix.org performance theme, having now got the CS API largely into a good state of responsiveness, we are looking at federation lag. Today we shipped a sharded Federation Reader to matrix.org which has reduced the average lag from seconds to milliseconds. We are just running two currently and are still tuning as we figure out how to get the best from it. Initial impressions seem promising. Watch this space.
We also have a PR out for review to shard the Federation Sender, which will have much the same effect in the other direction.
Once we have sending messages via the Client-Server API, much reduced federation lag and a sharded Pusher weβll take a look at room joins.
Hi everyone, my friend Patrick and I have been working on making Matrix more accessible in the context of personal overlay networks powered by WireGuard. Weβve built a 1-click deployment solution for Synapse & Riot based on docker. The interesting part is that it gives you public addressability via a distributed proxy service that we have been developing. We are free and open source and welcoming contributors and testers ASAP! We are imagining an ecosystem for building collaborative intranets and see them as foundational to a freer, more equitable internet. Please join us at #noteworthy:tincan.community See https://www.patrickdlg.com/personal-messaging/ and https://noteworthy.tech/start/
I fixed some bugs in matrix-sms-bridge and added a feature that allows delayed sending of sms messages with the sms send command. It runs very fast and stable in my production environment.
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
Not much to talk about currently, since I'm breaking my Nheko to replace the entire event store at this moment, but I have some heads up on an annoying bug that I fixed on my branch:
Sometimes we had a weird issue, where Nheko wouldn't load the language the user set on their system. This was especially annoying when I wanted to test a specific language, like Japanese, and I couldn't figure out the right LANG* variables to set the language to Japanese in Nheko. Turns out, this was a bug in Nheko and you wouldn't have guessed so, when looking at the examples in the Qt documentation. Anyway, KDAB wrote a nice blogpost explaining this issue: https://www.kdab.com/fixing-a-common-antipattern-when-loading-translations-in-qt/
If you are a Qt developer, you may want to check your applications, if you are also affected.
We will release a beta (0.91.5) of Riot-Android this evening, including all the recent changes and lots of fixes. We are still working to prepare the great release!
When I initially implemented end-to-bridge encryption in mautrix-python, I used matrix-nio in a slightly hacky way to get it done quickly. It worked fine in some cases, but also caused some undecryptable messages. I tried switching to using matrix-nio's crypto module directly, but the sans-I/O design made that difficult: there were too many parts that needed to be hooked up to the actual I/O and I wasn't able to find them all. In the end, I just decided to implement the basic e2ee stuff directly in mautrix-python the same way it's implemented in mautrix-go.
All my bridges based on mautrix-python (Telegram, Facebook and Hangouts) have been switched to use the new crypto stuff. After a few initial bugs that are already fixed, it seems to work better than the old system. I'll probably add native e2ee to maubot soon too, which is my last main project that's still missing e2ee.
Version 0.3 brings the ability to use room aliases instead of internal room ids.
Furthermore, you can configure it to accept invites and follow room upgrades.
Due to utter negligence and malpractice by myself, we missed the update for this project last week. Of course, 0.2 is now superseded by 0.3, but here is the 0.2 update anyway:
I wrote a pretty simple Matrix bot in Rust which is loosely based on Cat Disruptor 6000. It will react with ποΈ to any message containing the string "cat" *. Since it is a small project, I hope it can be used as an example for other people interested in writing Matrix bots in Rust. It implements several important features (crypto/device store, auto-accepting invites, crafting custom events, etc.) You can host it yourself, or you can try it out by inviting the user "@catdisruptor:m.scd31.com" to your room! https://git.scd31.com/stephen/cat-disruptor-7000
* Cat Disruptor 6000 does not do this (it is used for disrupting monologues with cat pictures). However, many instances of Cat Disruptor 6000 also include a separate bot, which is what Cat Disruptor 7000 is mimicking.
Heya, we (famedly) are looking for about 2-3 more flutter developers. We are a german startup which works on revolutionizing communication in the medical area. We build on top of matrix, so having some matrix-knowledge would be very beneficial.
While we are based in Berlin we do allow remote work, and communication in english is fine, too.
If you are interested or have more questions, please message Niklas Zender.
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
334
2
matrix.vgorcum.com
637.5
3
lossy.network
657
4
asra.gr
795
5
swag.industries
1407.5
6
lo.hn
1481
7
finallycoffee.eu
1804
8
nzbr.de
1885.5
9
halogen.city
2275
10
utzutzutz.net
2462.5
That's all I know π
See you next week, and be sure to stop by #twim:matrix.org with your updates!
Ania M. Piotrowska (@aniampiotrowska), known for her work on Nym, Loopix, and at UCL will present "Building private future for the internet with the Nym mixnet".
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.
e2ee merged and some bugs fixed (pr #324)! You should be able to use neb normally in an encrypted room now, if that's not the case please let us know!
Added integration tests for both encrypted and unencrypted rooms to neb in order to catch things that might break some core functionality in a subtle way (issue #326)
Similarly, created a PR for mautrix-go for testing the Olm and Megolm session establishment and message encryption / decryption (pr #12)
Next up, working on a service for neb for testing the crypto functionality of other clients: neb will send messages to a room, rotate keys etc. and your client is supposed to respond!
Dept of Servers π’
Dendrite / gomatrixserverlib
Dendrite is a next-generation homeserver written in Go
This week has seen some new architectural changes and a number of bugs fixed:
A new Current State Server component has been added, which tracks room state
The Public Rooms API has been deprecated in favour of the Current State Server
Event size limits are now honoured with the correct return code
Invites have seen some refactoring and retiring invites should work better now
The federation sender now persists unsent PDUs to the database and will automatically retry when Dendrite is restarted, making resend behaviour much more reliable (particularly in the P2P demos)
Some room checks in /state and /state_ids have been fixed
Some additional restrictions have been added to /send and we now return the correct error codes
A bug where current state was incorrectly used when getting missing/backfill events has been fixed
A bug where you couldn't rejoin a room that you created after wiping your database has been fixed
Synapse 1.15.2 shipped this week with some important security fixes - if you haven't already upgraded, please do asap! Meanwhile, we're also preparing a 1.16 release with the normal round of bugfixes and incremental improvements.
The big focus in the Synapse team continues to be on performance for larger Synapse instances, which is reflected in the support in 1.16 for running multiple media worker processes. We're working on giving other worker processes the same treatment, so expect more of the same in the weeks to come!
The avhost image including coturn, jemalloc, and mjolnir for synapse 1.15.2 was released at avhost/docker-matrix:v1.15.2, while the RCs images were released on my personal repo; mvgorcum/docker-matrix:v1.16.0rc1 and mvgorcum/docker-matrix:v1.16.0rc2
I wrote a very simple Twilio & Maubot based SMS bridge recently which I've been running for long enough with no delivery errors that I'd consider it stable. It's oriented towards bridging many individuals to single rooms via SMS. You'll need to have a Maubot instance in order to run it.
There has been a lot of under the hood work that users wonβt notice and which we wonβt delve into. In addition to them, we have a few nice things:
Matrix API tokens are redacted in logs for better privacy when submitting bug reports.
A send button was added next the message entry. This is especially relevant for touch screens.
We are less noisy with typing notifications that we send out.
We support SOCKS proxies.
Notifications for non text messages have been tweaked.
We gained support for edited message display. They are replaced with the newer content and a little icon is shown next to them. Editing messages is not supported yet though.
Fixed a ton of reliability bugs in the 7 bridges we support (changelog)
We are hiring (full-time or part-time) remote React developers to work on our (source available, still TBD on final license) Riot fork Send me a DM if interested.
RiotX is now published in the beta channel of the Riot-Android app: https://play.google.com/store/apps/details?id=im.vector.app. You can get the last beta version by becoming a tester if you want to. There will be no more update of RiotX on the PlayStore. Current RiotX users should signout from RiotX and signin again on Riot-Android. Riot-Android users do not have to do that. The changelog can be read here https://github.com/vector-im/riotX-android/releases/tag/v0.91.3-beta. And this week we are working on implementing what's remain on our list, and we are fixing as many bugs as we can before the great release.
Hello, I am announcing my first matrix bot - cody - that will evaluate code snippets in your Matrix rooms and return the result. Here is an example interaction:
This initial release only supports Python, but the plan is to add support for more languages in the next few weeks. The repo might also be of interest to some of you as it has CI, CD to DockerHub, complete dev environment with cody, pantalaimon, synapse and riot using docker-compose, simple metrics and Grafana-dashboards-as-code.
New version of logootish-js with a completely new algorithm
In particular, I should note that this new algorithm is tested extensively, so I think the bugs should be out
Corresponding updates to internal event structure
Fixed UI & CSS bugs
Improved UX for room title editor
Currently, conflicting text will be displayed, but conflicts will not be indicated in any way
I almost forgot to mention: The room list is now filtered using the typed rooms MSC (event ID org.matrix.msc1840). #test-document0:kb1rd.net is a room with that state event set.
I also made a flame graph of the internal algorithm and I'm surprised by some of the results. The good thing is that I think there's quite a few ways to speed up the algorithm. Here it is:
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.
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.
In terms of Spec Core Team MSC focus for this week, unfortunately our three MSCs from last week ( MSC2366 (verification flows), MSC2403 (knocking), and MSC2630 (SAS security)) are still pre-FCP. Most of the team has been quite busy with implementation for the past few weeks. Instead of advertising those 3 MSCs again, we're going to switch the focus to "implementation" for a bit until we're freed up again.
So the focus for this week is: MSC implementation work. However, this should not discourage any MSC authors from responding to MSC feedback in the meantime π
This week in the ruma/matrix Google Summer of Code project, ruma-events was made ready for use! After adding stripped and sync event generation to the event_enum! macro there were only a few small tweaks needed to try it out in some dependent rust crates. I spent a few days converting matrix-rust-sdk to use the ruma-monorepo. Since ruma is used on both client and server-side, I also opened a PR to update Conduit, a homeserver implementation written in Rust. To test that everything worked together, I updated rumatui, my command-line client written in rust.
Then I could test that Conduit sent, and matrix-rust-sdk received the new ruma events successfully. While updating, I felt the pain of not having accessor methods for the Any*Event enums to get at the event fields held within. I have opened a pull request to add the generation of these methods to the event_enums! macro. Hopefully, the Conduit and matrix-sdk PR's will be merged and the ruma monorepo can be tested in the wild!
Moved matrix protocol, irc protocol, and bridge module to futures 0.3. Converted some utility functions to new futures, and updated the http implementation to use the standardized Hyper library instead of using a custom http implementation.
Created PR for enabling e2ee across all services! This required a few changes to how the bot client is initialised, as well as changes to all services to use the new functionality instead of directly sending messages to a room. https://github.com/matrix-org/go-neb/pull/324
Added code from another of tulir's projects to Mautrix to allow storing the crypto material (olm / megolm sessions, accounts etc.) in a SQL database, adding a second way besides using Gob storage. https://github.com/tulir/mautrix-go/pull/10
Future plans are to work on the library itself to add any features that might be missing.
Using the same design as Riot. However, I am just using flexbox and text instead of drawing on an HTML5 canvas. The HSL color is generated by hashing the user ID.
Quoting and replying
Added on-hover buttons and reply popup above message composer similar to Riot web. Quoting prepends the message (quoted) to the message composer similar to Riot web and replying would also work similar to Riot web. It will be fully functional once markdown parsing is added.
Guest access
The client now supports guest access. If no access token or user ID is provided in the configuration file, the client attempts to register a guest account on the home server. Room contents are viewed using peekInRoom.
If the guest attempts to send a message, only then joinRoom is called to avoid spam (each page load would lead to a guest joining the room).
This week has been mainly about testing to ensure that all the progress over the past few months is kept up-to-date and correct. We've also added a few features in order to get certain sytests working. To that end:
Invites can now be declined over federation and they will be reflected in /sync responses.
Errors encountered when joining a room over federation are now sent back to the client.
Errors encountered when accepting an invite over federation are now sent back to the client.
Dendrite will now check server names meet the server name grammar in the specification.
A bug which caused client-api-proxy to not actually proxy correctly has been fixed, thanks @fantashley !
/send now abides by the limits in the specification: 50 PDUs / 100 EDUs.
The docker-compose scripts now include appservice_api, thanks @fantashley !
Sending invites over federation will now fall back to v1 if v2 fails with a 404.
Dendrite now implements room.timeline.limit completely (in both in-line and stored filter formats).
Dendrite now sets the limited flag on /sync responses correctly.
In addition, we now have support for collecting code coverage output from SyTest. This indicates we are testing roughly 70% of the Dendrite codebase. The remaining 30% are hard to reach via integration tests (e.g database failures, communication problems between internal APIs).
Spec compliance:
Client-Server APIs: 45%, up from 40% last week
Server-Server APIs: 50%, up from 38% last week
In total, we've made an additional 45 sytests pass this week.
This week weβve been working on further improvements to event persistence and ironed out a nasty bug where an unusually long state resolution could block the reactor overall and impact send times. We seem to have got to the bottom of this and m.org has improved a lot as of today.
More generally weβve been trying to characterise matrix.org performance so that we can continue to improve over the coming months.
We are going to focus on:-
Client send event
Outbound Federation Latency
Inbound Federation Latency
Room joins
As well as tracking the CS API generally.
We are using apdex with a satisfied limit of 250 ms and a tolerating limit of 1000 ms. By the end of the Summer we will aim to hit an apdex score of 0.9 for each area.
For instance here is Federation Send Event Apdex graphed overtime. You can see that we are averaging about ~0.8 currently, so plenty to keeping us busy!
Next up will be to work on Outbound Federation Latency
Aside from that weβve been working hard on the upcoming Notifications improvements. Mapping the push rules to the demands of the UI has been challenging and weβve been through several iterations. If youβd like to learn more take a look at Michael and Richβs explanation in this weekβs Matrix Live. Richβs presentation has Sheltie pictures #justsayinβ
The Telegram bridge now supports logging in by scanning a QR code, although it requires using the master branch of Telethon instead of a release. I also fixed bridging captions in file messages, so they're now bridged as separate messages like with images
Hey all, I've got several releases to talk about this week!
First, matrix-appservice-slack has been updated to 1.4.0 with several quality of life changes such as automatically setting the bot profile on startup, supporting logging out of slack accounts and adding a health checkpoint. There are also quite a few bugfixes so make sure you update.
matrix-appservice-irc was also bumped to 0.18.0 with the headline features being Node 14.x support.
We've also shipped 0.19.0-rc1 which has stopped support for Node 10.x. Why? Because we're adding worker support to the bridge! This release starts to make use of the new(ish) worker_threads feature so that we can dish out processing to separate threads (running their own UV event loops, for node enthusiasts). The first thing to be workerized is metrics, so that metrics may still be reported should the bridge become saturated, but we plan to split out more work as things progress.
Finally matrix-appservice-bridge got a few fixes to support our new worker land, as well as being updated to support matrix-js-sdk 6.0.0. You can checkout the changes for 1.13.1 here.
Fluffychat Version 0.15.0 is released, and should be available in the Play Store, on F-Droid and in IOS Testflight soon! This makes Fluffychat the first non-Riot matrix client that supports Cross-Signing.
Features:
New room list app bar design
Chat app bar transparent
Implement web file picker
Minor design and UX improvements
Implement Cross Signing
Restore keys from online key backup
Added translations: Czech, Spanish, Slovakian
Changes:
Show presences of users sharing a direct chat
Big refactoring
Fixes:
Various fixes, including e2ee fixes and olm session recovery
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
Most of our time this week was spent trying out device verification with Chethan. It's fun and I could finally file bugs in Nheko against someone else!
We fixed some issues that should hopefully make text in the timeline less blurry again.
Fixed a bug which cause some clients like fluffychat to break in E2EE rooms (we accidentally sent a null relation when not replying...)
Fixed an issue, where Nheko didn't verify the format of html formatted messages correctly, causing it to render messages in a way which wasn't compliant to the spec.
Thanks to the work of a Pirate and his friends, current versions of Nheko should be available in backports for Debian Buster once again!
Riot Chat for Nextcloud 0.5.0 The new version updated the Riot.im version to 1.6.6 and added the ability for admins to set their own custom config for Riot rather then using the settings interface in addition to a few bug fixes.
Riot Chat for Nextcloud allows individuals and organizations with a Nextcloud instance to easily set up and configure their own Riot instance with just a few clicks on a web interface without the need to write a config file.
This week, we completed UX for cross-signing and secure backup. We made associated settings but we still need to polish them.
Sygnal and the new push extension have been updated to match Apple requirement and our privacy concerns. Events content are no more sent anymore.
We started to implement the new room notifications settings UI.
We will publish at the beginning of next week a beta version of the migration to RiotX codebase on the beta channel of the PlayStore, to be able to ensure the migration works fine, before release it to production.
joepie91 discovered this project, presented yesterday at Conference in the Cloud:
Net::Matrix::Webhook implements a webhook, so you can easily post messages to your matrix chat rooms via HTTP requests. It uses IO::Async to start a web server and connect as a client to matrix. It will then forward your messages.
Soru wrote a quick program that scrapes riot-web, riot-x and riot-ios for translations of the emoji names for emoji verification and combines them all into an easily-readable json file, so that other client developers can use it. Since all three riot versions have a different set of translations, it might also be helpful for them. You can find the source code along with the outputted json files here.
Like the other bots, you can self-host it, use my instance (@satw:maunium.net) in your own room or simply join #satwcomic:maunium.net to automatically get the latest comics in Matrix.
A bot that will allow to room administrators and moderators to generate room custom commands (in a similar way how telegram commands are thought).
When they are invoked it will post the message event object data and a predefined context object along with a token to a custom url. More information in: https://gitlab.com/communia/matrix-webhooker
Drupal module to receive links shared from a matrix room. Get links provided by a matrix bot in a room.
With this module one can get media from a matrix own bot to any drupal site. Once installed and bot is created through matrix-webhooker bot.
A blog entry about it (in spanish) in https://planet.communia.org/content/enlaces-desde-matrix
Dept of Interesting Projects π°
Pollvis - new poll visualiser project
We have a couple of conferences coming up who are planning to use Matrix as part of their offering, much as we do with Open Tech Will Save Us. To help add some more features, I created an MVP "poll visualiser", which watches a room and works in tandem with the poll-bot from Brendan Abolivier . This project is still at the beginning, but might be interesting to some! Find the code at https://github.com/benparsons/pollvis.
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
331
2
services.pyrahex.com
537
3
heitkoetter.net
604
4
nitro.chat
646.5
5
mchus.pro
660
6
privacytools.io
671
7
matrix.vgorcum.com
727.5
8
eiselecloud.de
740
9
aruiz.io
855
10
neko.dev
923.5
That's all I know π
See you next week, and be sure to stop by #twim:matrix.org with your updates!
Are you emerging from lockdown? Dazed and wondering what to wear? Need some apparel which says "I'm cool and I have great taste in decentralised communications protocols"? Then you should visit The Matrix Merch Store!
T-Shirts, Hoodies, Zipped Hoodies and Stickers available now!
Matrix Decomposition: Analysis of an Access Control Approach on Transaction-based DAGs without Finality
We published another scientific paper on Matrix, this time it is called Matrix Decomposition: Analysis of an Access Control Approach on Transaction-based DAGs without Finality!
Its main topic is the question of how access control can work based on a structure that only provides a partial order on events and no consensus on the current state, i.e. the Matrix Event Graph. We found some concrete, non-critical security issues related to both incorrect specification as well as divergent homeserver behaviour. While the last remaining mitigations found their way into Synapse 1.14.0, we provide ideas on structural solutions to avoid both problem classes in the future using formal verification.
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.
In terms of Spec Core Team MSC focus for this week, the team has been spread a bit thin with other work. As such, we're still on the same three MSCs: MSC2366 (verification flows), MSC2403 (knocking), and MSC2630 (SAS security). We're hoping this week will be more productive in terms of spec.
Dept of Servers π’
Dendrite / gomatrixserverlib
Dendrite is a next-generation homeserver written in Go
This week has seen a lot of work put into fixing broken tests and refactoring parts of the codebase.
The media API has had quite a bit of attention this week and now media over federation works properly, as well as much better filename handling
A new user API component is now responsible for user accounts, devices, access tokens and account data
The server key API has been updated with more reliable validity checking and new tests
Logging into Dendrite using Riot iOS is now supported thanks to some minor tweaks/fixes
URL handling for version 3 rooms has been improved
A bug in the format of /v1/send_join has been fixed
The /joined_members response has now been fixed
In addition to that, we've made good progress on embedding the Dendrite-powered Yggdrasil demo into Riot iOS, which we'll hopefully be demoing in a couple of weeks!
We released 1.15.1, this is a bug fix release, sorry if you were bitten.
Changelog in full
Bugfixes
Fix a bug introduced in v1.15.0 that would crash Synapse on start when using certain password auth providers.
Fix a bug introduced in v1.15.0 which meant that some 3PID management endpoints were not accessible on the correct URL.
Outside of that
Implemented unread message counts (MSC 2625) - This is part of the a more general notifications improvement project in conjunction with the Riot teams. The aim being to make Notifications easier to configure. Weβve also been working on push rule definitions for the default behaviour. More on that next week.
Have the ability to shard the media repository worker. This means we can now run an arbitrary number in parallel, thereby improving upload reliability and performance, we are running this on Matrix.org.
Re-enabled Jaeger on matrix.org - previously we needed to switch it off due to the performance overhead, we needed a few tweaks but now it is working well and helping us to determine the cause of slow requests. It seems like the HTTP requests between the event creator and event persister workers can sometimes be slow - we are not sure of the cause yet, we are working on it but it will mean further performance improvements to message sending.
Next up performance wise is working on sharding the federation sender to improve federation lag. Weβll also try replacing simplejson with stdlib json which seems to be much faster at dumps nowadays.
Finally, weβve fixed a bug that meant that quarantining media would from time to time include quarantining sticker packs
Other interesting bugs
We fixed a spec compliance bug in fetching remote media raised by our pals in Dendrite-land. We fixed a bug causing federation .well-known requests to fail due to not including the user-agent header. We removed references to six (thanks @ilmari) and finally, fixed a bug that caused stream id to go backwards on the replication stream.
Wondering how quick this weeks synapse release was adopted by homeserver admins? Head over to https://graph.settgast.org/ and see yourself that it only took a little over 2 days for 1.15.1 to become the most used synapse version. I plot hourly distribution of synapse versions there. (Disclaimer: Only collects stats for homeservers that my homeserver sees in any of its rooms, which are around 2000 at the moment)
This is super cool! I love that this has been created, and also how well it reflects on homeserver admins! /me scurries to update to 1.15.1...
This week I worked on server-side key backups and cross-signing - the second most requested features (federation being the first one). Key backups are already working! Take a look:
Cross-signing should be working, but there is a bug where emoji verification gets stuck. I hope we can find the mistakes and finish the PR next week.
Thanks to everyone who supports me on Liberapay or (new!) Bitcoin!
To make the bridge info state events a bit more useful, all my bridges now include the room name and avatar URL in them. The events are also updated whenever the name or avatar changes, and there's a new option to re-send the event to all existing portals so old portals would get it too.
RiotX: Version 0.22.0 has been released on Tuesday, it includes integration manager support, sending stickers, modifying power levels, and lots of other things! See https://github.com/vector-im/riotX-android/releases/tag/v0.22.0 for a complete list of the changes.
This week we've been working on audio and video calls (The PR is in review). We are also trying to improve the performance of the application. We are adding room settings, and we have started to work on the migration Riot-Android -> RiotX.
PS check out Valere trying the new features:
Arch Linux (AUR) package for Revolution - a Riot fork by ponies.im
After some slow progress, rumatui, the rust command line chat client, is usable by anyone. You no longer need an account or have previously joined rooms. Registration and room search have been implemented! Using left/right arrow keys from the login screen will toggle to registration. Once registered hitting the left arrow will bring up the room search window. After typing your search term hit Enter and select the room to join by pressing Ctrl-d.
For the brave who would like to give it a trycargo install --git <https://github.com/DevinR528/rumatui> --branch room-search.
Added since last update
Room search is now available
Public rooms can be joined from the room search window
A user can register from the new register window
This features complete User Interactive Authentication by opening a web browser
Message edits are shown
When markdown is part of the message they are properly formatted
Reactions display under the respective message
Redaction events are handled for reactions (emoji) and messages
"Basically usable" is a standard we can all aspire to for our projects and endeavours.
This week, we worked on the new UX for cross-signing and secure backup. In parallel, we continued to improve the new push implementation. We are very closed to complete the two features.
This week we had an off-cycle 1.6.5 release to fix registration on some homeservers when email validation is required. After that, we've made a 1.6.6 RC including:
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
We released 0.7.2, which was a bit more messy than we would have liked...
As with every release we are currently working through the new bug reports. :D
I started working on SSSS and online key backup support. For this I wrote my own base64 and base58 encoders. As a result of this we dropped libsodium as a dependency, which should make Nheko a bit easier to package or build. It's also fun to write base conversions, although 58 is a horrible base!
From the changelog:
Reactions
React to a message with an emoji! π
Reactions are shown below a message in a small bubble with a counter.
By clicking on that, others can add to the reaction count.
It may help you celebrating a new Nheko Release or react with a π to a failed build to express your frustration.
This uses a new emoji picker. The picker will be improved in the near future (better scrolling, sections, favorites, recently used or similar) and then probably replace the current picker.
Support for tagging rooms [tag]
Assign custom tags to rooms from the context menu in the room list.
This allows filtering rooms via the group list. This puts you in a focus mode showing only the selected tags.
You can assign multiple tags to group rooms however you like.
SSO Login
With this you can now login on servers, that only provide SSO.
Just enter any mxid on the server. Nheko will figure out that you need to use SSO and redirect your browser to the login page.
Complete the login in your browser and Nheko should automatically log you in.
Presence
Shows online status of the people you are talking to.
You can define a custom status message to tell others what you are currently up to.
The status message appears next to the usernames in the timeline.
Your server needs to have presence enabled for this to work.
after a couple of setbacks that didn't let us to make the releases earlier, the Quotient project has finally made two new releases:
GTAD (the piece of code magically producing readable C++ code from a Swagger API description) has achieved version 0.7 (https://github.com/KitsuneRal/gtad/releases/tag/v0.7.0) adding a few tricks in order to make...
...libQuotient 0.6 beta2 (https://github.com/quotient-im/libQuotient/releases/tag/0.6-beta2) rely entirely on the upstream matrix-doc specification, rather than a soft fork closely following the main sources! From now on it's "upstream first", in a sense that the original matrix-doc will be used to build Quotient codebase. Let's see how often it breaks ;)
In other news from the last few weeks:
some housekeeping and deprecation work in the API has been done in preparation to getting User Interactive Authentication along the next (post-0.6) release cycle of libQuotient.
also thanks to the updated code generator, the CS API code has been optimised, consolidating more code in the header files and making data deserialisation lazy; this helped significantly reduce compilation times, and runtime performance also improved a bit.
the number of configurations tested by CI has been extended, allowing to chase down a few more bugs that managed to go under the radar before.
when used with new enough Qt, CBOR is used to cache data locally - entirely transparently for clients.
Expect more news in the coming weeks, including continued work on matrix: URI proposal and its implementation in Quotient.
This week in ruma-events' Google Summer of Code project, after trying out the new Any*Event enums matrix-rust-sdk, we found a few big flaws. There was no easy way to go from StateEvent<AnyStateEventContent> to StateEvent<SpecificEventContent>, the other issue was one could create a StateEvent with differing content and prev_content fields using the AnyStateEventContent enum. The 0.22 ruma-events will be similar to the existing API; each event type has a corresponding event enum variant.
There were a few minor fixes during the week also. Unknown field deserialization is fixed, allowing deserialization of a JSON blob that has extra fields which are ignored. Custom events are now present in the Any*EventContent enums, although now they have to be moved up to be included in Any*Event enums. Benchmarks for deserialization have been added and used to increase performance.
Polyjuice Client, a Matrix library for Elixir, had a new release. This release fixes syncs, which apparently were completely broken in the last release (whoops). The wizarding community also welcomes a new contributor, Pierre de Lacroix.
I heard that you people like IoT?! With the Mozilla WebThings Matrix Adapter your Raspberry Pi sends you messages about your home. Want a log of when the front door has been opened? Need a low battery alert for your IoT devices? With the Mozilla IoT gateway and this adapter, you can send these events to a Matrix room of your choice!
Ever since m.room.aliases was replaced with alt_aliases, there hasn't really been any way to find aliases on other servers, since most room admins don't bother finding and publishing alternate aliases. To help solve that problem, I made a maubot plugin to let users publish alternate aliases in rooms: https://github.com/maubot/altalias
By default it lets users publish aliases with the same localpart as any already published alias. If that behavior is sufficient, you can simply invite it to a room and give it permissions to send m.room.canonical_alias events. Alternatively, it can be configured to allow aliases that match specific regexes.
Once it's set up, users can create a local alias and use !altalias publish <their alias> to publish it. The bot will make sure the alias points to the right room, check that the localpart is allowed and then add it to alt_aliases.
I have it running at @alias:maunium.net and I've added it to all my rooms already. Other rooms are also free to use that instance.
As of https://github.com/NixOS/nixpkgs/pull/89327 a go-neb module was added to nixos and will soon be available on nixos-unstable and in the 20.09 release. You can use it to declaratively install and configure go-neb matrix bots on nixos. I use it for prometheus alertmanager alerts and it works really cool! Thx to hexa- who did most of the work on it.
opsdroid 0.19 has been released, not many matrix specific features in this release, just making it slightly easier to get a connector or database instance by name. However, this release paves the way for the merge of the pull request transitioning opsdroid to use the matrix-nio Python library, so the next release should be packed full of matrix stuff π
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
384.5
2
maescool.be
390
3
gottliebtfreitag.de
453
4
construct.grin.hu
610
5
aragon.sh
639.5
6
privacytools.io
670
7
matrix.vgorcum.com
734
8
envs.net
756
9
settgast.org
865
10
intothecyber.space
1005
That's all I know π
Thanks to Alexander and Nico for their help editing this edition.
See you next week, and be sure to stop by #twim:matrix.org with your updates!
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.
In terms of Spec Core Team MSC focus for this week, we're sticking with the same three from last week: MSC2366 (verification flows), MSC2403 (knocking), and MSC2630 (SAS security).
In possibly more exciting news, the Spec Core Team has decided to start separating the scattered casual implementation tips and notes in the spec out and putting them in a series of implementation guides! These will take the form of gitbook-style things, and will initially feature front-to-back implementation guides for a generic Matrix client and homeserver. For more details to provide feedback, check out the associated MSC2618!
Dept of GSoC π
This is the second week of the coding phase of GSoC 2020. Find updates from the students below:
The port from matrix-python-sdk to matrix-nio is almost completed. Sending and receiving most events works properly. Changes are expected be merged in a few days. This PR itself doesn't implement E2EE, that will be a different PR
Alongside that I've been working on implementing E2EE with nio which is partially done, sending and receiving messages works so far. some changes to the MatrixStore interaction and testing is left.
Implementing end-to-end encryption for go-neb turns out to be a lot easier than expected thanks to the https://github.com/tulir/mautrix library, which contains out of the box e2ee support!
The first week of GSoC was spent switching go-neb's usage of gomatrix for mautrix, which was easy as the latter is a fork of the former. This caused a pretty big PR that touched most of go-neb's files, although the changes were simple and easy to review. The PR was merged shortly after into go-neb.
During the second week, it was time to add some basic e2ee support to go-neb. This was complicated slightly due to the bot's ability to create multiple clients and its treatment of /sync responses, however in the end e2ee is now working.
The code is still of course a mess and session keys are often lost in the void. The code will be cleaned up and tested further next week, bugs will be (hopefully) fixed and another PR will be submitted to go-neb then to officially add e2ee support!
Matrix has enormous potential to be used in many different use cases be it embedded chat rooms, comments section, chat boxes, etc. This project aims to fill that niche by providing an easy to use and easy to deploy client for users to embed on their webpages.
The client would mesh well wherever it is embedded by providing a postMessage interface to allow the parent webpage to interact with the client and dynamically modify it whenever needed (For example:- A comments section that is always the same theme as its parent webpage).
Features
As of now, the following features have been added (with more on the way)
List of joined rooms that can be selected
Live room timeline events
Support for image-based messages
Message composer and ability to send messages to a room
Dark and light themes for the client
Changeable highlight colors
Toggleable room header, room timeline, and message composer components
postMessage interface for sending commands from the parent window
Currently, I'm working on adding more options to the postMessage interface as well as adding more interactivity to the client itself.
This week in ruma-events' Google Summer of Code project, I was able to finish the macros needed to generate the event content enums and trait implementations required for events. I started by defining the generic event structs (state, message, etc.) and manually writing the Serialize and Deserialize implementations. Over the next few days, this was moved into a custom derive macro called Event. The derive now implements all necessary traits with appropriate bounds, so a StateEvent<C> can not contain any ephemeral event content and so forth. I have removed the raw mod and related FromRaw and TryFromRaw traits, moving the validation into the deserialization and constructor for the few types that needed it. On the event content side of things, a function like procedural macro was used to allow declaring the enum using Matrix event type identifiers.
Much of this week's work has been maintenance-related with refactoring, cleaning up etc.
Key fetching/expiry behaviour has been fixed, improving the reliability of federation.
The monolith and component setup has now been refactored.
A number of unused internal APIs have now been removed.
Other internal roomserver APIs have been streamlined.
We have also started building an Yggdrasil-powered P2P demo (as opposed to the previous demos built using libp2p) and even includes support for embedding Riot Web in the single binary. It's not very stable/usable yet but there will be more news on that to follow within the next couple of weeks.
We have also started building and releasing Docker images for Dendrite on Docker Hub for those who want to use Docker to test Dendrite deployment.
Welcome back! This week I focused my efforts on better error handling. My goal was that every problem would be forwarded to the client (e.g. InternalServerError response) and also be logged. Yesterday I merged the giant PR this resulted in. Hopefully this will make Conduit easier to debug in the future.
Here are some other things I finished this week:
User-interactive authentication (e.g. you need to type your password again if you want to delete devices)
Config option to disable registration
I also found the problem with Riot not showing notifications for new messages and created a bug report. With a few tweaks, I managed to solve this on my account and now mentions, DMs and more play the notification sound (it also works on Riot X!).
@gnieto fixed a bug that prevented Riot from loading history when you join a room and @PublicByte implemented the /whoami endpoint.
This week we shipped 1.15.0, edited highlights include:
Features
Add admin APIs to allow server admins to manage users' devices. Contributed by @dklimpel. (#7481)
Add an option to disable autojoining rooms for guest accounts. (#6637)
For SAML authentication, add the ability to pass email addresses to be added to new users' accounts via SAML attributes. Contributed by Christopher Cooper. (#7385)
Add support for generating thumbnails for WebP images. Previously, users would see an empty box instead of preview image. Contributed by @WGH-. (#7586)
Support the standardized m.login.sso user-interactive authentication flow. (#7630)
Bugfixes
Allow new users to be registered via the admin API even if the monthly active user limit has been reached. Contributed by @dklimpel. (#7263)
Fix a bug in automatic user creation during first time login with m.login.jwt. Regression in v1.6.0. Contributed by @olof. (#7585)
Fix a bug causing the cross-signing keys to be ignored when resyncing a device list. (#7594)
Fix bug where returning rooms for a group would fail if it included a room that the server was not in. (#7599)
Fix duplicate key violation when persisting read markers. (#7607)
Prevent an entire iteration of the device list resync loop from failing if one server responds with a malformed result. (#7609)
Pass device information through to the login endpoint when using the login fallback. (#7629)
Advertise the m.login.token login flow when OpenID Connect is enabled. (#7631)
Fix bug in account data replication stream. (#7656)
Internal Changes
Improve query performance for fetching state from a PostgreSQL database. Contributed by @ilmari. (#7567)
Speed up processing of federation stream RDATA rows. (#7584)
Refactor Ratelimiter to limit the amount of expensive config value accesses. (#7595)
Clean up exception handling in SAML2ResponseResource. (#7614)
Check if the localpart of a Matrix ID is reserved for guest users earlier in the registration flow, as well as when responding to requests to /register/available. (#7625)
Aside from that we continue out push towards improving performance both in terms of sharding workers but also improving tools to manage disk space usage. Specifically this week and next we are looking at db tuning and sharding the media repo worker. We are also noticing that the typing handler is chewing more CPU than would be expected. It could be a good candidate for moving away from the master process.
More broadly we are changing the defaults for notifications and making changes to support a more general overhaul of notifications.
Finally we are looking at how to not only delete messages after a certain time period, but also how to delete the associated media (which becomes difficult when considering e2e content along side long lived content such as avatars and sticker packs).
For more detail on what is coming next, take a look at our public task board.
The WhatsApp bridge can now bridge location messages from WhatsApp to m.location on Matrix and contact messages as vCard files (until Matrix gets a native contact message type).
It also now encrypts media properly when bridging messages in encrypted rooms. I had apparently missed that when adding end-to-bridge encryption earlier.
mautrix-facebook got a few improvements and bugfixes:
Added timestamp massaging
Added support for bridging video and file messages to Matrix
Fixed backfilling with SQLite (it didn't work due to the python timezone mess, fix contributed by erdnaxeli)
Improved options for automatic reconnecting. The bridge should now work fairly reliably when using all the auto-reconnect options and backfilling, it only breaks if facebook decides you've been hacked
Since MSC2190 and the related Synapse PR aren't moving much, all my bridges now generate appservice registration files with the workaround. The workaround is needed to avoid patching synapse or using other hacks, and I decided to enable it by default as many people had problems related to having to apply it manually.
The WhatsApp, Facebook and Hangouts bridges now have an option to use double puppeting to disable notifications when backfilling. It can be useful if you want to copy chat history to Matrix, but don't want to be spammed with hundreds of notifications while it's happening.
To get things ready for NovaChat launch, we added a bunch of new features to a fork of the mx-puppet-slack client that Sorunome created. You can try it out here. We'll be pushing our changes upstream soon.
New features:
message backfilling at room creation and reconnect
syncs read status to/from Slack.com
adds all users to bridged room during initial creation
automatically bridges all channels and DMs that you are part of during initial setup, so you don't have to wait for a message to arrive for it to appear in Matrix
My matrix-sms-bridge got an large update, which introduced an automated way to create and write messages to telephone numbers via commands in a bot room. See the docs for more information, how to use it.
a set of Matrix bridges configured to run on a private server called a bridgebox
Matrix bridges are awesome but generally require you to run own homeserver. NovaChat removes that restriction, without sacrificing security and privacy. Your remote chat network credentials never leave your bridgebox, and messages are encrypted* on the bridgebox before being sent to the NovaChat homeserver.
*Encryption is currently enabled on Telegram/FB/Hangouts/Whatsapp bridges, mx-puppet-bridges coming shortly)
Fancy new UI, heavily inspired by Telegram. See photo below or see it in action
Easy graphical bridge set up (no more fiddling with config files)
Reliable bridging, with delivery confirmations and bridge disconnect warnings
Includes 8 pre-configured bridges: Facebook/Whatsapp/Hangouts/Telegram/Slack/Instagram/Twitter/Skype. Planning to add more soon, or submit a PR!
Works on Mac OS, Linux and Windows
You don't need to be technical to use NovaChat, it's designed to Just WorkTM. If you need help setting up a bridgebox, we are offering hosting and maintenance for USD $5 per month.
The vast majority of this software has been created by the talented tulir and dm0141. I personally am a terrible coder (you can tell which parts I did), but I do have experience building products and teams, and I'm excited to begin working in the Matrix universe. I wrote recently about how I believe Matrix is the Universal Communication Bus! Thanks goes to Sorunome for creating the mx-puppet-bridges!
We're developing the whole project in the open (though not all components are open source), check the issue backlog :)
Want to help? We're hiring Matrix developer to work on the project with us. Send me a message if you're interested! Particularly looking for a React dev to help with frontend on nova-web.
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
nheko 0.7.2 is ready for release. Here's the summary of changes:
Highlights
Reactions
React to a message with an emoji! π
Reactions are shown below a message in a small bubble with a counter.
By clicking on that, others can add to the reaction count.
It may help you celebrating a new Nheko Release or react with a π to a failed build to express your frustration.
This uses a new emoji picker. The picker will be improved in the near future (better scrolling, sections, favorites, recently used or similar) and then probably replace the current picker.
Support for tagging rooms [tag]
Assign custom tags to rooms from the context menu in the room list.
This allows filtering rooms via the group list. This puts you in a focus mode showing only the selected tags.
You can assign multiple tags to group rooms however you like.
SSO Login
With this you can now login on servers, that only provide SSO.
Just enter any mxid on the server. Nheko will figure out that you need to use SSO and redirect your browser to the login page.
Complete the login in your browser and Nheko should automatically log you in.
Features
Support for showing users presence and status message as well as setting your own status message"
Respect exif rotation of images
An italian translation (contributed by Lorenzo Ancora)
Optional alerts in your taskbar (contributed by z33ky)
Optional bigger emoji only messages in the timeline (contributed by lkito)
Optional hover feedback on messages (contributed by lkito)
/roomnick to change your displayname in a single room.
Preliminary support for showing inline images.
Warn about unencrypted messages in encrypted rooms.
Improvements
perf: Use less CPU to sort the room list.
Limit size of replies. This currently looks a bit rough, but should improve in the future with a gradient or at some other transition.
perf: Only clean out old messages from the database every 500 syncs. (There is usually more than one sync every second)
Improve the login and register masks a bit with hints and validation.
Descriptions for settings (contributed by lkito)
A visual indicator, that nheko is fetching messages and improved scrolling (contributed by Lasath Fernando)
Bugfixes
Fix not being able to join rooms
Fix scale factor setting
Buildfixes against gcc10 and Qt5.15 (missing includes)
Settings now apply immediately again after changing them (only exception should be the scale factor)
Join messages should never have empty texts now
Timeline should now fail to render less often on platforms with native sibling windows.
Don't rescale images on every frame on highdpi screens.
This week, we continued to iterate on the implementation of the new push notification service thanks to user feedbacks. Those feedbacks also show that the app uses less battery.
On login, this is now possible to recover your cross-signing and your key backup from your recovery passphrase or key.
libolm 3.1.5 has been released. It mainly collects the various build system and documentation fixes that have accumulated since the last release. It also includes a new wasm build target (which apparently is used for running matrix-rust-sdk in the browser), as well as TypeScript definitions for the JavaScript bindings.
Ruma
Ruma is a Rust project to create a comprehensive set of APIs for Matrix. Previously there was a Ruma homeserver project.
Most of the work this past week was on ruma-events, for more on that see the GSoC section! Devin got far enough with that so we now know it all works out and can replace the previous ruma-events API. When that was clear, ruma-events was also merged into our new monorepo; now the only remaining crate to be merged is ruma-client (where I'm also waiting for some pending changes).
Dept of Ops π
Matrix Helm chart
Kubernetes Helm chart for easily deploying a Matrix homeserver stack
Version 2 of my Matrix Helm chart is out! It now allows for running a federating homeserver without needing an external load balancer for the federation service, potentially lowering costs (depending on your cloud provider), and definitely reducing the headache of managing TLS certificates!
dacruz21/matrix-chart is a Kubernetes Helm chart for easily deploying a Matrix homeserver stack, complete with Synapse, Riot, VoIP calls, bridges, and other backing services. It's ideal for anyone looking to run a large homeserver, or for corporate environments where security is paramount!
Anyone running a federating instance of Synapse will likely have seen this: Synapse is database-hungry. It tends to take a lot of space. In this post, I'm documenting how I shrunk my homeserver database from 100GB to a little under 8GB, during a long maintenance cleanup. https://levans.fr/shrink-synapse-database.html
Very pleased to see this, I have a feeling I'm going to be running it in the near future...
There's a new room "Matrix Outreach" #matrix-outreach:matrix.org for folks interested in "Helping each other explain and promote Matrix to the public: creating slogans, introduction leaflets, info-graphics, elevator pitch, Wikipedia articles, and so on."
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
391
2
envs.net
443.5
3
maunium.net
506
4
tum.de
603.5
5
neko.dev
822
6
maclemon.at
887
7
cyllos.me
916
8
shortestpath.dev
1072.5
9
settgast.org
1079
10
maescool.be
1324
That's all I know π
See you next week, and be sure to stop by #twim:matrix.org with your updates!
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.
In terms of Spec Core Team MSC focus for this week, we've still got MSC2366 (verification flows) on our plate, but we're removing MSC2399 (UISI messaging) as it just needs one more final tick. We're adding MSC2403 (knocking) in its place.
Mascarene is a quite new homeserver implementation project started a few months ago. Now it's time to introduce it.
Mascarene is written in Scala, runs on JVM and relies on Akka actor model. Out of the box it provides features like efficient streaming I/O, clustering and live data distribution. Data are backed in a PostgreSQL database.
The project is in early stage but already provides a few endpoints which make Mascarene able to talk to Riot.
You can test it at https://snapshot.mascarene.org. You should be able to register, login, create a room and talk to yourself.
Current work is focused on client API implementation; federation or e2ee will come later.
Welcome back! This week I went through the whole Client-Server API and wrote down everything that is still missing from Conduit. You can find issues for all of them in the milestone for Conduit 1.0. This should make it more easy for contributors to find something to work on and gives a lot more structure to the repo (maybe I also did it, because it's so satisfying to close issues and see the milestone percentage go up π).
Some of the issues I could already close this week include:
Implement redaction
Implement loading the message someone replied to (/context)
Fix bugs with notifications
Don't send typing events when nothing happened
Bundle typing events into one EDU
Don't send notification counts every /sync
Implement heroes
As you can tell, a lot of work is starting to go into smaller improvements, which is a good thing, because it means most of the core work is already done!
Thanks to my supporters on Liberapay (Take a look, I improved it π).
This week in Synapse land we have been focusing on bug fixes especially SSO and soft logout.
We also spent some time thinking about how to further improve performance for large scale deployments (like matrix.org). In short this will mean sharding contested workers such as the media repo worker, the federation sender and the federation reader. We also want to remove some more functionality from the master process because it is still sitting at about 80% and weβd like some more head room. We'd also like to fix up the state compressor so it can easily be run as a background progress to save on disk space, this will benefit all installations big and small. Finally we want to speed up joins over federation. Exciting times.
Next week, more of the same and we should start on some of the perf items. Also look out for changes to notification defaults.
Dendrite / gomatrixserverlib
Dendrite is a next-generation homeserver written in Go
Server signing keys which have passed their validity period are now re-requested and updated properly, increasing reliability of federation substantially
Federated room joins have been significantly sped up by requesting missing auth events inline when verifying room state, rather than repeating the entire verification for each missing event
Local send-to-device support has been added (federated send-to-device coming soon)
A lot of code clean-up has taken place (with more to come), including cleaning up the internal APIs and the component bases
Decoding of room version 3 event IDs in request URLs has been improved
Inbound federation requests now interrupt backoff intervals on outbound sends
A new internal API exists now for interrupting backoff intervals on the federation sender
The federated /devices endpoint now returns in the correct format
Public rooms are now sorted by their member count
Only our own aliases are stored in the public rooms directory now
gomatrixserverlib is now responsible for marking room versions as supported/stable
Spec-compliant transactions are now sent to the appservice component
File URIs for SQLite databases are now set up using common functions
Handling registration for a user that already exists has been fixed (thanks S7evinK!)
Dendrite can now be configured to use a HTTP proxy server for outbound HTTP (thanks dr-bonez!)
Sytest compliance:
Client-server APIs: 36%
Server-server APIs: 35%
In other news, Kegan wrote a post on how p2p.riot.im works, including Dendrite's journey to SQLite and WebAssembly!
Additionally! You may have already read about v0.1.1 of the P2P Matrix demo - this is a big update, with local storage, room alias handling, federation improvements and more!
mautrix-facebook got support for backfilling history when creating portals and backfilling missed messages when connecting. There's also an option to periodically reconnect to potentially fix the bug where Facebook decides that you don't get messages anymore, but doesn't actually disconnect you.
I had apparently forgotten to implement bridge information in the whatsapp bridge when I implemented it in my other bridges, but that mistake is now corrected. I also fixed a bug with encryption where it would generate too many one-time keys and cause messages to be undecryptable. Finally, mautrix-whatsapp had its first release this week since it's working reasonably well now.
Eager to test the keytar feature (pickle key stored in OS secret storage) with Riot Web? Support landed in radical-native v0.1beta13, which uses Rust keytar bindings under the hood. Testing requires the latest and greatest of Riot Web, so riot.im/develop might be the place to see it in action
RiotX v0.21.0 has been released on May 28th. It adds support to identity server configuration and e-mail/phone binding and unbinding. It's also now possible to switch between languages inside the app and to display the list of attachments (media and file) of a room. A new setting has been also added to hide redacted (deleted) events in the timeline. As Riot-Android SAS v2 is also included in this release. Also formatted_body for m.notice and m.emote are now taken into account.
This week we were still working on implementing VoIP (audio and video call). Support for integration manager, widgets and sending stickers has been merged to develop.
Many new features are coming soon, stay tuned!
Riot-Android: Version 0.9.12 has been released on May 20th. I forgot to mention it the TWIM of last week. It contains a fix for favorite rooms vanishing and also the SAS v2 implementation (new key agreement method).
This week, we finalised our work around the iOS13 SDK. The coming public TestFlight (0.12.2) is the result of this work. It comes with a lot of changes including a full rewrite of the push handling codebase, trying to find solutions to make matrix e2ee compatible with iOS Notification Service Extension. Most of these changes are unfortunately invisible for end users. Please report any issues. Note this is safe to switch between this TF and 0.11.5.
In parallel, we started to implement the cross-signing bootstrap and the recovery management. The UX of this is going to be refined on Riot-Web and RiotX-Android. Riot-iOS will implement the refined UX directly.
Riot Web
A glossy Matrix collaboration client for the web. https://riot.im
For context, Safe Support Chat is an embeddable chatbox built on Matrix with cool features such as end-to-end encryption support to enable individuals to seek support with organisations that provide it. It was initially built for the OCRCC (Ontario Coalition of Rape Crisis Centres) in order to allow survivors of sexual violence to communicate and seek help safely with OCRCC facilitators.
A new version of the terminal-based federation tester has been released. The current version 1.11 should now cover the entire server discovery process including scenarios with a .well-known configuration without a port, but with a DNS SRV entry.
The script relies on bash, curl, jq and openssl. It has been tested on linux but should also work on *bsd and macos.
Hi, I've build FLAP to help other self-host multiple free software. FLAP can currently help you to easily setup Synapse, Riot, Nextcloud, SOGo and Jitsi all with SSO and low maintenance needs. Feel free to give it a try !
an imperial <--> metric unit converter for common conversational units
a configurable search and link for issues/pulls that responds to any message containing something in the format of jf#123 or jf #1234
a configurable general purpose URL linker that responds to messages containing things such as docs@hwa or link @troubleshooting (both sides of the @ are configurable)
There are plans to enable group pings, get a help command that can be limited to function only in a specific room, and more in the works so be sure to check back soon!
matrix-reminder-bot bot to remind you about things. Supports reminding an individual in a room or the whole room itself. Also supports setting alarms, which will continue to sound periodically until silenced.
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.
This week I've been chatting with conference organisers making really
interesting virtual event plans, and I'm bursting to share some of the Matrix
integration plans, hopefully more details coming soon.
For those who Hubzilla or Zap or ActivityPub or Friendica or Diaspora, there is now a Hubzilla forum for all things Matrix: https://elsmussols.net/channel/matrix
That's all I know π
See you next week, and be sure to stop by #twim:matrix.org with your updates!
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.
In terms of Spec Core Team MSC focus for this week, we've still got MSC2366 (verification flows) and MSC2399 (UISI messaging), however they are now joined by a third, secret MSC that we'll be working on internally for now :)
Spec releases: Room Version 6, Client-Server r0.6.1, and Federation r0.1.4
Says TravisR:
It's been a little while since we've done a round of spec releases, so we have a bunch of spec releases to share. If you're implementing something from the spec, please have a look at the news: https://matrix.org/blog/2020/05/27/room-version-6-client-server-r-0-6-1-and-federation-r-0-1-4-spec-releases/
As always, any questions about the spec itself can be answered in #matrix-spec:matrix.org, #matrix-dev:matrix.org, or in the various area-specific rooms floating around the federation.
Hello again! This week I worked on access control, which means that private rooms are private and invite-only rooms are invite-only. The public room directory only shows rooms marked as such now.
I also made a milestone to track progress on Conduit 1.0. This release marks the point where Conduit is fully usable as a non-federating homeserver. All features of the client server specification should be implemented, unless they can be seen as optional extensions (e.g. alternative registrations methods like email). Conduit should also be free of all known bugs with those features.
Adding federation on top of the 1.0 release will very likely require breaking changes. This means that the release which brings federation will be 2.0 or later and will require a partial or full database deletion.
The monolith now has a "hybrid" mode that uses the full HTTP APIs instead of short-circuiting
A number of the internal HTTP APIs are now tested fully and have been fixed as a result, which will also improve running a full polylith component deployment
Server keys are now managed by a separate server key API component
Batched sends in the federation sender are now working properly, improving send performance significantly
Error handling in the federation /send endpoint has been tweaked
/get_missing_events now returns events that don't fail signature checks
Federated room joins by room alias now attempt the server specified in the alias much more reliably
The correct room ID is now returned from the PerformJoin API
Much of the room server storage code has been deduplicated
Fixed some bugs in the device database storage code
Sync streams are now managed per-user-per-device, rather than just per-user
We no longer incorrectly default to federated joins in response to local invites
Spec compliance:
Client-Server APIs: 34% (228/672 tests)
Federation APIs: 34% (35/103 tests)
Synapse
Says Neil:
The main news this week is that we switched event persistence away from the matrix.org master process which has made a big difference to overall performance. The impact is best demonstrated by graphing message send times.
We also shipped 1.14.0 which includes OpenId Connect support and improved cache control granularity. It also contains rooms v6.
Next week will be having a think about what to do next for matrix.org performance. Watch this space.
TARDIS (Time Agnostic Room DAG Inspection Service)
I made a TARDIS (Time Agnostic Room DAG Inspection Service) - a simple time-travelling debugger for Room DAGs which plugs into Dendrite's internal APIs to visualise room DAGs. The intention is to provide it as a widget which Riot can use to visualise DAGs for debugging, particularly for P2P Matrix. The time-travel bit is simply that it could let you filter out the newer events to show how the DAG has evolved over time, although that isn't hooked up yet. https://github.com/matrix-org/tardis
With the release of synapse 1.14.0 the avhost image, including jemalloc, mjolnir and coturn has been updated as well, avhost/docker-matrix:v1.14.0, as always the release candidates were uploaded at mvgorcum/docker-matrix:v1.14.0rc1 and rc2
ruma-serde 0.2.2 (an internal dependency) fixed an incomplete part of querystring deserialization, so Conduit (and other future homeservers building on ruma-*-api) can properly handle querystrings in which parameters are repeated (like the server_name in /join/{roomIdOrAlias})
Option to only get notifications on finished builds was added.
buildbot-matrix is a small plugin for the Buildbot CI framework which sends notifications to matrix rooms.
It's available an GitHub and PyPi, take a look at https://github.com/HayWo/buildbot-matrix for more information.
I, Half-Shot, changed the status of the IRC Bridge on https://matrix.org/docs/projects/bridge/matrix-org-irc-bridge from "Early beta" to "Stable". This does not mean it's feature complete, or even all the way there, but it sure doesn't crash nearly as often as it did when I started, so that's good enough for me.
Hey folks, we've released the first RC for 1.4.0 of the slack bridge. This change includes a number of bug fixes around puppeting, but includes a few nice to haves like a /ready endpoint for kube/docker deployments and setting profile information on startup. Please test, and feedback in #matrix_appservice_slack:cadair.com :)
I've been working on improving the reliability of my bridges, primarily by making sure that the user knows if something went wrong. All my bridges now support delivery receipts (implemented as bridge bot read receipts) and can send delivery error messages if there was an error bridging a message. The Facebook and Hangouts bridges also now send connection status messages to a bridge notice room like WhatsApp already did before.
Minetrix
Certainly not from this week, but we haven't featured it before: Minetrix allows you to bridge a Minecraft server with a Matrix room.
A Matrix webclient written in (mostly) Rust using the official Matrix-Rust-SDK and Rusts WASM Support.
Daydream is the Idea of a Rust Matrix Client. It is still in a very early state and at the time of writing this supports basic displaying of text, image and bot messages as well as sending plain text and markdown.
Thanks devinr528 for sharing this
WIP Command line Matrix client using matrix-rust-sdk:
Display read receipts for the last few messages
Display membership status when updated
Join a room you have been invited to
Client sends read receipts to server
Display when messages have been read
Leave a room by pressing Delete key (this should probably be a Ctrl-some key deal...)
Specify homeserver to join on start up (before the login screen)
Simply run rumatui [HOMESERVER], defaults to "http://matrix.org"
Displays errors, albeit not very helpful or specific
Receive and display messages
formatted messages display as rendered markdown
Send messages
local echo is removed
Send textbox grows as more lines of text are added
Selectable rooms list
change rooms using the arrow keys, making this clickable may be difficult
Login widget is click/arrow key navigable
hides password
A new notification bar under the message window displays notifications such as membership changes, typing, and read notices.
I am hoping to have an actual release on crates.io by the end of the day. If you have any thoughts join #rumatui:matrix.org or check it out on github.
starting work on shifting the UX for the encryption upgrade towards using recovery keys in favor of passphrases.
starting early work on a redesigned matrix.to website
starting looking to integrate riot desktop with the native password manager of your platform of choice through keytar
fixing some issues with the (still experimental) IRC layout
iterating on the (also still experimental) new room list
looking into some issues that arose from the cross-signing release
Riot-iOS
Says Manu:
Riot-iOS (and MatrixSDK and MatrixKit) is now fully compatible with iOS13 SDK. A TestFlight 0.12.0 will be available soon.
The work is still on its branches (xcode11). It comes with the new notification service mechanism and we want to run a lot of tests next week before going to production.
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
After explaining cross signing to others multiple times in the past and seeing the question again on mastodon, I decided to write a short blog post on the topic, explaining how the keys interact with each other and how Alice's devices then end up trusting Bob's devices. You can read it over on https://jcg.re/blog/quick-overview-matrix-cross-signing/
Cross-signing implementors guide
This one isn't quite merged yet as we're going to give a thorough review, but big thank you to sorunome for taking the time to put this together:
While implementing cross-signing for fluffychat soru decided to write a guide that would help other client developers to implement that, too. So far it is still WIP and doesn't cover too much, yet, but soru might have typed up more once this TWIM goes live. The PR (and thus the markdown of the guide) can be found here: https://github.com/matrix-org/matrix.org/pull/740
It's a bunch of people who are passively learning design for their matrix projects. You might pick up a few things if you join :p
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.