Synapse 1.31 can now restrict OpenID Connect logins based on userinfo attributes (Thanks, HubbeKing!).
This release fixes a rare infinite loop when fetching cross-signing keys or handling device list updates, and furtherimproves the speed of federation catchup. It also makes Admin APIs around user reactivation behave correctly when account passwords are disabled.
This is the last release of Synapse to support Python 3.5 or PostgreSQL 9.5, and the last release of official packages for Debian 9 (Stretch) and Ubuntu 16.04 LTS (Xenial).
Future releases of Synapse will follow upstream end-of-life dates for Python and Postgres.
Accordingly, we anticipate ending support for Python 3.6 and PostgreSQL 9.6 in December of this year. We will also cease producing packages for Ubuntu 18.04 LTS (Bionic) at that time.
MSC3079: Low bandwidth CS API is now up, feedback is welcome! Low bandwidth will increase mobile battery life, allow Matrix to be used over low bitrate links (1-5Kbps) and even allow push notifications to be done natively over Matrix (as /sync is now efficient)! We'll be experimenting with this some more and hopefully even enable it on some servers like dendrite.matrix.org in the near future.
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.
The Spec Core Team had another retro this week. We're happy with the increased amount of MSCs flowing through the pipeline, but there's still a huge amount of work to get through, mainly revolving around prioritisation.
Don't let that keep you from sending in your well-formed MSCs however - the more the merrier!
New Spec Platform
The unstable version of the spec now lives entirely on https://spec.matrix.org! Redirects have been put in place from the old spec to the new for unstable. Stable versions will be moved over in time (and the redirects will hopefully better preserve url paths!).
We're also planning to unfreeze the spec shortly so that spec PRs can start flowing again. We now just need to clear up the old buildtools from the matrix-doc.
πͺKnock, knock? MSC2403: Add "knock" feature was merged! Now we have a stable target to aim at for implementing knocking support in Synapse. Knocking is part of (well, the entirety of) the forthcoming room version 7.
Not much else to report this week -- it's been a short week, and much of the team is heads down figuring out goals for Q2. With the start of the new quarter, a few Element employees are rotating their responsibilities: richvdh has wrapped up his work on social login and will be focusing more on core platform, with clokep shifting to focus on Spaces. Meanwhile, babolivier will come back into Synapse / Sygnal / Sydent land.
From all of us the Synapse team, we hope you have a great weekend and we'll see you next week!
Big announcement day! It's been a long time cooking in secret, but today Nheko finally got legs!
We are happy to announce, that Nheko got aquired by Google and will now be shipping on Android!
Google already contributed a few important improvements. All your messages are now sent in rainbow colors, because inclusivity is very important and we feel like no color should get excluded in a message. We also merged some crypto code to make indexing messages easier and help governments to protect our users.
With great new things sometimes also come sad things. As such we sadly have to announce, that Windows, macOS and Linux will now be degraded to secondary platforms. Primary development target will just be Android and Haiku. The former is the most widely used operating system nowadays and Haiku is the only actual desktop operating system. We are sure this won't lead to such a degraded experience on those platform, just because they are now effectively unmaintained.
We hope you love this day as much as we do and if you are not reading this at the day of publication, we ask you to please check the date and mark it in your calendar, so that we can celebrate next year!
If you are reading this at a later day, please consider the following changes canonical:
LordMZTE contributed the /rainbow command, which makes Nheko finally a client, that can be taken seriously.
LorenDB has been having some fun building Nheko for Android. This may actually become supported in the future, but so far they are just experiments.
red_sky fixed the certificate errors on macOS.
You can now leave rooms by using the /part or /leave command.
salahmak made the upload widget close, when you press the escape button
Weβve been iterating on our initial implementation of private spaces, including getting the first parts of restricting room membership to space membership in Synapse
Weβre also breaking out larger MSCs into smaller ones, like this draft on space membership.
Web
1.7.24 released on Monday
Additional VoIP call connection reliability improvements
Two weeks ago, we held elections in the Netherlands and I went around the bigger political parties to ask them what concrete goals/ideas/plans they had to fight big tech companies.
And the best concrete solution I've heard, I'm not kidding, was that they're happy with the GDPR and that they want to keep that.
Knowledge of the internet is pretty dire in the EU, and I wanted to educate people a little. So I made a video explaining what a decentralized open communication network is: https://youtu.be/v5Y8zCwIxjI
Additionally, I wrote an article for people and politicians to read through, where I share my opinion on how and why the EU should encourage companies to allow for interoperability: https://noordstar.me/b/decentralize.md
However, also note what's written at the end of the page:
Canβt find the right role? Feel free to reach out to Mischa (@mischawalmsley:matrix.org) via https://app.element.io or email your resume to [email protected] to be considered for new positions in the future.
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.
Synapse 1.30.1 is now available. This release is identical to Synapse 1.30.0, with the exception of explicitly setting a minimum version of the Python Cryptography library to ensure that users of Synapse are protected from yesterday's OpenSSL security advisories, especially CVE-2021-3449.
Note that Cryptography defaults to bundling its own statically linked copy of OpenSSL, which means that you may not be protected by your operating system's security updates.
It's also worth noting that Cryptography no longer supports Python 3.5, so admins deploying to older environments like Debian 9 (Stretch) or Ubuntu 16.04 (Xenial) may not be protected against this or future vulnerabilities.
The next release of Synapse will be the last to support Python 3.5.
Ben is away this week for some well-deserved holidays (don't worry, he'll be back next week), so I'm filling in for him so you don't miss out on your weekly dose of Matrix-related news, let's do this!
Matrix Live π
It's demos week this week! Enjoy a selection of demos featuring: Spaces, low-bandwidth Matrix, Hydrogen notifications and bridging DMs between Gitter and Matrix!
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.
Lots of MSCs moving through the pipeline last week and this week!
Spec Core Team
We're still working on improving our process for day-to-day MSC work, but small individual improvements seem to be adding up! Otherwise some members of the team came together and summarised the team's thoughts on MSC2190.
Unfreezing the spec
Still shifting internal infrastructure to allow redirecting from the old spec to the new where necessary.
The 1.30 release focused on improving our resilience to interruptions in federation, both being smarter about what work we do, as well as improving the CPU and DB performance of the state_ids endpoint by at least an order of magnitude. Check the release post for full details.
...but also check out this graph (of that endpoint only) from an EMS host after deploying 1.30.0:
That ain't gonna bother us no more.
In other news, we've decided to try out GitHub Actions for automated testing of Synapse and will report back in a few weeks. Our hope is that this makes our CI more amenable to iterative improvement and outside contributions.
It's also worth flagging that the next release of Synapse, due in early April, will be the last to support Python 3.5.
See y'all next week!
matrix-media-repo
matrix-media-repo is a highly customizable multi-domain media repository for Matrix
v1.2.6 is out now with a guest account patch and some added libraries to the Docker image. It's a small one, but worth the upgrade when there's a few spare cycles to use :)
As always, if you run into problems or have questions, visit #media-repo:t2bot.io
Finally did what I've been talking about for a while, and got the Synapse chart I'm doing upgraded to the point where it won't require my own image any more, Version 2.0.0. (In fact, the chart will now deploy the upstream matrixdotorg/synapse image by default)
I also went through and fixed a bunch of things, refactored the worker config some to get it closer to the generic_worker setup, added configuration to include arbitrary values in .well-known (for Jitsi and the like), etc.
They've also added:
And just updated my Kubernetes image and Helm Chart for Synapse to the new 1.30.0 version - note that the image has been deprecated by now though, the chart is the new go-to way to get Synapse on Kubernetes.
And then, following today's 1.30.1 Synapse update:
I've pushed Helm Chart updates for Synapse 1.30.1 and Matrix Media Repo 1.2.6
matrix-docker-ansible-deploy
This Ansible playbook is meant to easily let you run your own Matrix homeserver.
We're working on bridging DM conversations between Matrix and Gitter. For our first iteration, you will be able to start a DM conversation with a Gitter user from Matrix. In the next iteration, we will allow Gitter users to start a DM conversation with a Matrix user.
The following is a small taste of what it will look like and will also be included in the upcoming Matrix live demo day.
Dept of Clients π±
Hydrogen
A minimal Matrix chat client, focused on performance, offline functionality, and broad browser support. https://github.com/vector-im/hydrogen-web/
Hydrogen 0.1.40 got released this week with support for push notifications (look to enable it from the settings) and some other smaller fixes.
(Note that because of a sygnal bug, push messages are sometimes failing to be delivered to mobile. This will be fixed in the coming days without any action needed if you already enable it before.)
If you want to know more about Hydrogen's new shiny notifications, check out this week's Matrix live (at the top of this post)!
Element Clients
Updates from the teams:
Delight
Spaces are now testable on develop.element.io & matrix.org! Buyer beware: Theyβre in early beta, using unstable prefixes, so may break at any time. But you can test by enabling the Spaces labs flag while connecting to matrix.org or a Synapse development build
If youβd also like access to a test build for Android, weβre working out a better way to deliver test builds, but in the meanwhile let us know in the new spaces feedback room
Thereβs lots of rough edges, but weβre first focusing on polishing public spaces, and feedback is welcome in the spaces feedback room, or via GitHub issues
If you run an online community (using any platform), weβd love to talk to learn more about your general pains too, in you guessed it: the spaces feedback room
Watch this week's Matrix Live for a demo of the above!
VoIP
Not too much news this week, but look out for another connectivity fix in next weekβs element web release.
Web
Element Web 1.7.24-rc.1 on staging, including:
Additional VoIP call connection reliability improvements
Added invite option to room tile context menu
Improved cross-signing login flow
On develop / nightly:
Improved invite error handling
Search indexing errors now properly state the error, instead of asking you to use desktop (when you already are)
iOS
Element-iOS 1.2.7 is already available from TestFlight and will be available on the App Store on Monday.
Just pushed version 2.3.0 of the Matrix Ruby SDK, headline features include; Ruby 3.0 support (though might still be a few niggles in there, expect a 2.3.1 once it's been more tested), a complete redesign of the room data cache to improve memory usage and code quality, and general request additions that people were interested in.
I've written a simple little script that connects to CalDav servers and sends me a summary of the events for the day over Matrix. https://gitlab.com/uhoreg/matrix_daily_calendar I find it useful as I don't have enough meetings that I'm constantly checking my calendar, so having a message at the beginning of the day helps me remember the meetings that I do have.
krazykirby99999 shared with us their guide for creating simple Matrix bots in Python: https://www.reddit.com/r/matrixdotorg/comments/mdqitp/how_to_create_a_matrix_bot/
Hey everyone π One year ago I started to explore combining CRDTs with end-to-end encryption (Matrix's Olm/Megolm) to allow people to collaborate on the same documents/data. Couple months back I got a first prototype working and then evolved to a production ready app. Think of a simple Google Docs, but end-to-end encrypted and offline-first (iOS & Android for now).
Feedback, ideas and question are very welcome!
Website: https://www.serenity.re/en/notes
The app/client source is available here: https://github.com/SerenityNotes/serenity-notes-clients
This is not a project built directly on Matrix, but I thought it was a very cool use of Matrix's end-to-end encryption library, olm!
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.
That last one turns out to be a pretty big deal: we've seen an order of magnitude improvement in both the CPU and DB cost of the state_ids endpoint. For example, the average CPU usage by that endpoint on matrix.org dropped from few seconds to well under 100ms:
As a reminder, the next release of Synapse (1.31, scheduled for April 5th) will be the last to support Python 3.5 or PostgreSQL 9.5, both of which have reached their upstream end of life.
We will also cease building packages for Ubuntu 16.04 (Xenial) and Debian 9 (Stretch) at the same time.
Application Service Registration Changes
Note that Application Services must provide a type parameter with the value "m.login.application_service" when calling POST /_matrix/client/r0/register. Synapse currently allows registration without an explicit type, but this divergence from the spec will be resolved in a future release.
Thanks
Synapse is a Free and Open Source Software project, and we'd like to extend our thanks to everyone who contributed to this release, including dklimpel, ShadowJonathan, and tlvb.
Hello everyone! I'm excited to announce that Conduit has been accepted by Prototype Fund and will be funded by the Federal Ministry of Education and Research over the next 6 months: https://prototypefund.de/project/conduit/
The focus lies on federation support and overall improvement and stability, maybe we will even land version 1.0 at the end.
I am surprised how Conduit went from a small hobby project to a very promising Matrix server in just a year. Thank you all for accompanying me on this journey, I really appreciate it.
Now what did we actually do in the last two weeks?
Query signing keys through other servers
Many state resolution updates
Implement /get_missing_events
Implement /state_ids
Many bugfixes
Push notifications on mobile
Fix joining via alias with appservices
Enable zstd for database compression (3.3GB -> 1.6GB on old db!)
Rework state storage to be much more optimized (store a few bytes instead of long strings)
Send proper HOST headers in federation requests (thanks Gabriel!)
Conduit is beginning to run fairly well on the state resolution branch, we will probably merge it after fixing the last few bugs.
This is really excellent news! Congratulations to Timo on this achievement!
The Linux Foundation wants to use BigBlueButton and Matrix for the Linux Plumbers Conference in 2021 and is looking for developers to implement various improvements to BBB and to integrate Matrix as the in-meeting chat.
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.
We're still working to unfreeze the spec, but in the meantime have been working on MSC2516 (voice messages) and MSC1772 (spaces) plus the merged and in FCP MSCs you see above. β¬οΈ
Dept of Servers π’
matrix-media-repo
matrix-media-repo is a highly customizable multi-domain media repository for Matrix
v1.2.5 is out now with several bug fixes and other improvements. The most notable things being:
Optional support for Sentry (error reporting). This is the same error reporting structure that Synapse uses, so it should fit right in π
Several oEmbed URL previews have been fixed, making them useful again. Rejoice once again with a preview of Tweets, Giphys, and other rich content.
Fixed a bug where after uploading media to a datastore the media repo would then download it again before returning it. This made remote media downloads inefficient (it'd download from the remote server, upload to S3, then download from S3, then return it to the user), sorry.
Sometimes a wobbly database could cause some issues with future requests. While I recommend a not-wobbly database, the media repo should be more resilient to this sort of problem now.
As always, if you have bugs or encounter problems with setup then please pop by #media-repo:t2bot.io
As I mentioned last week, we've been focusing on nailing down some inefficiencies in federation performance. Well, Synapse 1.30.0rc1 is out, and I'm very excited to share one result of that work:
If you look closely, you'll note an order of magnitude improvement in our handling of the /_matrix/federation/v1/state_ids/{roomId} endpoint. On matrix.org, we've seen that endpoint go from averaging a few seconds of CPU time to well under 100ms. Database usage is similarly reduced.
This improvement by @clokep builds on the chain cover index that @erikjohnston implemented in Synapse 1.26.0 to speed up the calculation of auth chain differences during state resolution.
Synapse 1.30 will be released early next week.
We also shipped Sygnal 0.9.0 today, which has a few minor bug fixes as well an initial prototype of Web Push support, per the Hydrogen update in last week's TWiM.
matrix-puppeteer-line: A bridge for LINE messenger based on running LINE's Chrome extension in Puppeteer.
Updates:
New name! (Previously named matrix-appservice-line)
New home: https://src.miscworks.net/fair/matrix-puppeteer-line
Group chat support
Syncing of own messages sent from another client (must enable bridge.invite_own_puppet_to_pm)
TODOs:
User/chat avatars
Emoji/sticker support (barring copyright issues??)
LINE->Matrix read receipts
Not requiring the Puppeteer-controlled browser to be visible in order to run (Puppeteer requires it when loading extensions, but will look for a workaround)
I ported the native https://nio.chat iPhone client to macOS Big Sur, and call that "Mio". Nio and Mio share the same SwiftUI code base, with the Mio changes being merged into the Nio upstream repository. Like Nio, Mio is still in very early stages but looks quite nice already.
A preliminary build can be downloaded over here: https://zeezide.de/download/Mio.app-0.2.0-2.zip, and I posted a screenshot in the Nio channel: https://matrix-client.matrix.org/_matrix/media/r0/download/matrix.org/RpPiQFJytjXboshcUnqnGwrd.
Some time ago we featured Nio running on an M1 Mac via Catalyst, this is being compiled natively for Mac.
Nheko
Nheko is a desktop client using Qt, Boost.Asio and C++17. It supports E2EE and intends to be full featured and nice to look at
Thanks to LorenDB, notifications now omit the reply fallback and show that that message is a reply instead. They also should not break on encrypted rooms anymore (they show that the message was encrypted for now, but they will be decrypted in the future, if that is enabled in the settings). Emotes should now also show up in them properly and if someone sends an unencrypted image, this should show up with a preview in the notification as well.
Jedi18 ported the room switcher, which can be accessed with Ctrl+K to Qml, which fixes a lot of readability issues and should improve how the rooms get filtered.
Jedi18 also fixed a few issues with playing video on Windows. Salahmak made sending media easier by allowing you to send the image by just pressing enter.
Nheko now also stores images outside of the database, which should decrease database size in the future and make it easier to clean out that part of the cache. We also now use native menus where possible and fixed a few crypto and sync issues as well as formatting of mentions sent by Nheko. Nheko should now not randomely fail to /sync anymore, if your network connection dropped out in between. Also the flatpak should now be able to use your webcam in more cases, but this means we also use less sandboxing now. If you don't like that, you can disable access to all devices, but that sadly also includes the webcam.
Yet another beta-approximation of Quaternion at version 0.0.95 arrived, with the main change being fonts finally unified throughout the application. Translators are still very much welcome (French is almost there to be marked as "sufficiently complete", e.g.). Expect 0.0.95 release in the nearest weeks.
Hydrogen
A minimal Matrix chat client, focused on performance, offline functionality, and broad browser support. https://github.com/vector-im/hydrogen-web/
Polyjuice Client 0.4.0 has been released. This release features support for more endpoints, mostly contributed by two new contributors, multi prise and Arjan Sherpenisse. This release also has some backward-incompatible changes. See the changelog for more information.
Aligned with the Quaternion beta, stability-focused libQuotient 0.6.6 has been released - packagers already using libQuotient 0.6.x branch are strongly encouraged to update to this version.
Dept of Ops π
matrix-docker-ansible-deploy
This Ansible playbook is meant to easily let you run your own Matrix homeserver.
Did you get involved with FOSDEM this year? If you hung out on Matrix that weekend and had a great time, then maybe you bought a t-shirt? Oleg did, and he shared this photo!
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.
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.
Random fact: as of last week, we've now hit 400+ MSCs in total! That's a lot of words!
Spec Core Team
Now that the new spec platform is out, we're looking to unfreeze the spec so that spec PRs can once again start landing. That process has been written up in an issue. Once again thanks to everyone that's given https://spec.matrix.org a try and reported their feedback. π
Matrix has been accepted, once again, as a GSOC mentoring organisation! See us on Google's page, check out the list of project ideas (more to come!) and join GSOC Matrix to chat.
(π If this gets published every Friday evening, shouldn't it be Last Week in Matrix?)
On Monday we released Synapse 1.29.0! The most visible highlights are new configuration settings which can limit disclosure of user profile information and optionally rank local users higher when searching the user directory. However, we've also made quite a few tweaks under the hood, including some initial improvements to presence performance and allowing the media repository to regenerate missing thumbnails on demand.
The next release of Synapse will focus on mitigating several known inefficiencies and problematic behaviors around federation performance; I look forward to telling you more about that when it reaches release.
We're also excited to announce that we've secured funding to participate in the next round of Outreachy internships. Outreachy encourages people from underrepresented or nontraditional backgrounds to participate in F/OSS. We have funding for one intern and are proposing two possible projects focused on either modernizing Sygnal/Sydent, or extending Complement so it can replace more of SyTest.
While applications for this round have closed, we also expect to also participate in the end-of-year internship round, applications for which will open in September.
Homeserver Deployment π₯οΈ
Kubernetes
matrix-media-repo is a highly customizable multi-domain media repository for Matrix
More updates for the chart gods! I've pushed new versions of my element-web, matrix-synapse, and matrix-media-repo charts. And a new image tag (1.29.0) for the matrix-synapse image I'm still building, still haven't quite found the time to move everything over from it and into the chart proper.
The charts are still available at https://gitlab.com/ananace/charts, and the #matrix-on-kubernetes:fiksel.info room is still a great place to drop in for questions or general thoughts/comments.
On Web, weβve merged in a bunch of WIP work on develop.element.io
New concept of suggested rooms to help new users in a space discover important rooms - requires compatible homeserver
New experience for previewing spaces before you join them
Warning: The feature is in alpha, any spaces created at this time will need to be re-created later
On Synapse, weβve started implementing the Space summary API which is teasing out various details in various MSCs
On Android, weβre:
Space first cut on a branch behind lab flag; create Space / switch Space / join by link
In flight | basic hierarchy support in SDK
iOS started SDK foundation work for Spaces
SDK: Support room type (MSC1840)
In flight | Space creation SDK
Web
Issue labels renamed to align with new Synapse style
Element Web 1.7.23-rc.1 on staging
Refreshed UI for file uploads and sent messages
Improved VoIP call connection reliability
Added Edge to the set of supported browsers
Added send message button to the composer
1.7.23 will be released next Monday (Mar 15)
iOS
We released 1.2.6 yesterday. The app is currently in review for the App Store and TestFlight. This release contains a new display for the progress of sending a message or media, a better UX for managing retry and bug fixes.
Android
We are working to improve the performance of the application. We are making progress on the local echo display, the initial sync time, the timeline display and scroll, etc. We have prepared a release candidate 1.1.1, but only 1.1.2 will be pushed to production.
Hydrogen
A minimal Matrix chat client, focused on performance, offline functionality, and broad browser support. https://github.com/vector-im/hydrogen-web/
This was the week of internal changes. If you are building from source, the following changes may affect you:
After some distros now ship a newer fork of lmdbxx under the lmdbxx package name, we migrated to that version. While we wanted to do that for some time, if you have been using your distro package and builds now fail for you, you may want to use the bundled version of lmdbxx. Similarly, if there are new database issues, that you experience, please report them!
Similarly, we dropped our dependency on tweeny, since we only used that in one location and the same thing can be done natively, so you can remove that from your package builds.
Furthermore we are now stricter with how we validate tls certificates and bumped the minimum version to tls 1.2. If that causes issues for you, please report them as well. There is a known issue, that if you are using the bundled OpenSSL, it may not load your system certificate chain, so you will get TLS errors. We are still trying to find a proper solution for that.
We also disabled the epoll backend on all ARM builds instead of just our flatpak, since that one just crashes on ARM and until that is fixed in the library we are using, this would lead to a much worse experience on those platforms (and we didn't notice that before, because we disabled it a long time ago in our flatpak while debugging a related issue).
Apart from that, we did also have some cool stuff happening. One thing I want to especially highlight is the push work from tilde. It is one direction that I never thought of Nheko moving in and I think UnifiedPush is a really cool project!
We also switched from inline buttons to a hover overlay for message actions. Please try it out and give us feedback, if that is an improvement or makes the experience worse! It does at least make it clearer, which button belongs to which message, make the interface less messy and scrolling faster.
We also try to suppress the notifications caused by @β room mentions, when you reply to such a mention now by inserting a zero width joiner. This seems to work fine for all clients and servers but Element Web... So at least for everyone not using Element Web, if someone replies to an @β room as a mod on Nheko, they should not get a notification anymore. (Full disclosure, that was an idea from the FluffyChat team!)
See more about Unified Push below.
Dept of SDKs and Frameworks π§°
libkazv (and the Kazv Project)
libkazv is a sans-io C++ (gnu++17) client library built upon lager. Along with it there is kazv, a kirigami/qml client, and a forward bot between matrix and tencent qq. Talk to us on #kazv:tusooa.xyz
UnifiedPush is an interface that apps can use to receive push notifications without caring about which service transported those push notifications to the device, and it's an interface that you can implement to deliver push notifications to people's apps, if you've come up with a great new way to transport push notifications from the internet to a device (did someone say push over Matrix?).
UnifiedPush has been specified for Android with some apps implementing it for a few months now, but now I've been working on specifying and implementing it for D-Bus platforms. (This is mostly intended for mobile Linux OSes such as postmarketOS, but any platform with D-Bus will work!) This means I've implemented a Gotify-based distributor that runs on Linux, and also implemented UnifiedPush in nheko to give it the capability to receive push notifications. I've yet to iron out all the details, so push in nheko isn't exactly ready to be released yet, but I can demonstrate with a video!
To you, Matrix client developers who desperately want to receive push notifications and get your app woken up while it is not running (on Linux or Android), this means that you should simply implement UnifiedPush in your app to receive pushes from the user's choice of distributor. (note: D-Bus API is not yet in the spec, but under discussion) How? See https://unifiedpush.org and join #unifiedpush:matrix.org to discuss it further!
The keyoxide project added support for matrix: https://yarmo.eu/post/keyoxide-project-update-3#proving-matrix-identity-with%E2%80%A6
Dept of Guides π§
Discord bridging guide
Cos shared a nice guide to configuring mx-puppet-discord: https://boilingsteam.com/how-to-bridge-discord-in-matrix/.
Soru, the author of mx-puppet-discord, wanted to add some clarifications for the article:
The section on having to set up your .well-known is slightly incorrect: mx-puppet-discord does normal C-S API discovery, so if your C-S API is not on any subdomain it will already just work, .well-known is just needed in case that differs. Additionally, you can set up a manual mapping in your config.yaml (also helpful if you need http for e.g. local development). This is totally unrelated to setmatrixtoken.
While the guide mentions bridges, it does not mention setispublic <puppetId> 1/0 to make the bridge public / private. If you want your relay to just be usable by anyone, you should do setispublic <puppetId> 1, as then the rooms it creates aren't invite-only.
Brendan Abolivier shared this weeks ago, and we missed it. But, it's really nice content that doesn't go stale.
I did a talk at FOSDEM 2021 two weeks ago titled "Mental health and free software" in which I talk about my experience dealing with mental health issues while working as a full-time Matrix developer and give leads to address some of these issues. I've uploaded the recording of the talk at https://tube.abolivier.bzh/videos/watch/c28a3957-25cb-4519-ad3d-9f8812f88ee2 π
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.
This release includes several useful new configuration options for administrators of federated home servers. In all cases, the defaults match Synapse's prior behavior.
AndrewFerr implementedinclude_profile_data_on_invite and allow_profile_lookup_over_federation which can limit disclosure of your users' profile information. These both default to True.
We've also implementeduser_directory.prefer_local_users which weights users on the same homeserver higher in directory searches. This defaults to False.
Synapse is now easier to run in proxied environments, with tzyl implementing support for the NO_PROXY environment variable, as well as recognizing lowercase variants of that and related proxy variables.
Under the hood, we've been steadily improving our type hints, especially in light of the recent release of Twisted 21.2.0 which includes its own type annotations. We've also landed some improvements which reduce the amount of work Synapse does when presence is enabled and you join a room for the first time. Oh, and the media repository now regenerates missing thumbnails on demand.
Lastly, if you deploy Synapse behind a reverse proxy, Synapse now expects to receive an X-Forwarded-Proto header on incoming requests and will log a warning if it is missing. See the upgrade notes for more information. The full changelog has more information on what's in this release.
Synapse is a Free and Open Source Software project, and we'd like to extend our thanks to everyone who contributed to this release, including aaronraimist, AndrewFerr, dklimpel, ShadowJonathan, and tzyl.
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.
This week the Spec Core Team worked on MSC2858 (sso ID providers), MSC2403 (knocking) and MSC2746 (voip signalling), as well as held another retrospective of the past month. Discussion mainly focused on process and the new spec redesign. Speaking of which...
New Spec Platform
The new spec has launched! π Check it out at https://spec.matrix.org/unstable! Release versions will be landing sometime soon. Bear with us as we finalise the new release process.
Huge thanks to wbamberg for working hard on bringing the idea to a reality. The Matrix.org foundation will continue maintenance of the platform and continue to make it even better for developers in the coming months.
We've already got a number of bug reports that need fixing. If you find anything that's a bit off with the redesign, please file an issue at https://github.com/matrix-org/matrix-doc. Thanks!
Dept of Servers π’
Conduit
Conduit is a Matrix homeserver written in Rust https://conduit.rs
v1.2.3 is out now with a highish priority fix if you have audio thumbnails enabled. Other goodies include an X-Robots-Tag header and some artifact repairs on gif and apng thumbnails. See https://github.com/turt2live/matrix-media-repo/releases/tag/v1.2.3 for the full changelog.
Dendrite / gomatrixserverlib
Dendrite is a next-generation homeserver written in Go
Earlier this week we released Dendrite 0.3.11, and since then we have merged a significant number of appservice fixes to master which will go into the next release. With these, bridges should stand a much better chance of working with Dendrite.
Changes include:
Events are now properly sent to interested appservices
Appservice namespace exclusivity is now respected properly
Users starting with _ can now be registered by appservices correctly
Room alias queries for appservices have been improved and should work now
We've heard some feedback that Synapse's release cadenceβan RC every other week, with releases in betweenβcan feel a bit overwhelming. In response, I'm going to try to write a little less about each RC and instead simply refer to the 1.29.0rc1 Release Notes from yesterday.
We'll shout a bit more when that matures into a formal release early next week. π
On non-release weeks I'll try to spend a little more time focusing on the behind-the-scenes aspects of developing Synapse in our TWiM updates. If there's anything in particular you'd like hear about, let me know!
Speaking of, we're experimenting with using GitHub Discussions for... discussions.
We don't want to go full-on mailing list, but it might be nice to have a place to for slower, asynchronous conversations that don't quite fit into the more rapid pace of a typical Matrix room.
I'm working on a GroupMe bridge I made based on tulir's mautrix-whatsapp and mautrix-go.
I aim to add features like double puppeting, end to bridge encryption, etc over time, but an alpha release is available now. I would love to get bug reports and testing info to fix them.
A PSA this time around. Please test this release and update as soon as you can when we go to release on Monday next week. We've included a change to correct how users are registered against the homeserver to comply with the spec (Synapse accepts a /register call without a type=m.login.application, and versions 2.5.0 and below of the matrix-appservice-bridge sent these invalid requests). I'm hoping to eventually retire this behaviour from Synapse, so the more people that upgrade the better!
Also this PR is the Synapse-side change to remove this behaviour. If your appservice implementation uses this behaviour, please chime in.
Hey folks, this release contains a bunch of tiny-but-useful bugfixes that you'd hate to miss out on. The full release comes next week but if you want to help us test early, come and get it while it's hot! This release includes the all important fixes from matrix-appservice-bridge v2.6.0-rc1 which fix a spec compliance issue.
Dept of Clients π±
Hydrogen
A minimal Matrix chat client, focused on performance, offline functionality, and broad browser support. https://github.com/vector-im/hydrogen-web/
I mentioned a while back that I've put Element Web on IPFS.
Since then, I unfortunately had to change its DNSLink domain, so I decided to post about it again, with the new addresses and some minor updates. Here are the former:
ipns://k2k4r8mx8muu913j5oy3e4zvt77xtks8xgxuamlv0ltzwx95lcgk2glw (IPNS hash which the above address points to)
ipfs://bafybeievxs6qzzbfbn6xcbz3xwxhjzxkffjbpwbcc3gikrac6ytqkkutva (IPFS hash of the current snapshot of the above)
In other news, I've updated Element on IPFS to v1.7.22 and made a tiny script to easily update it in future. In case it's of use to anyone, it's right here:
#!/bin/bash
if [ "$#" -ne 2 ]; then
echo -e "Invalid number of arguments (got $# but 2 required)!\nUsage: $0 <element web folder> <release tag to download>" >&2
exit 1
fi
wget -c "https://github.com/vector-im/element-web/releases/download/$2/element-$2.tar.gz" -O - | tar --overwrite --strip-components=1 -xzv -C $1 element-$2
ipfs add -r -p $1
echo "Now use: 'ipfs name publish -key=<publish key> <folder ID>' to publish on IPFS"
We are currently refactoring the NeoChat room page. Nothing merged yet but scrolling is now smoother, we added swipe gestures to reply on mobile, and more importantly chat bubbles are coming :) Here is a small video of the new timeline, feedback very much welcome.
Mirage
A fancy, customizable, keyboard-operable Matrix chat client for encrypted and decentralized communication. Written in Qt/QML and Python, currently in alpha. https://github.com/mirukana/mirage
Together with Anthony Rhode from Element we have published the room #matrix-admins-edu-german:matrix.org for Matrix Admins at German-speaking educational institutions. Here we want to discuss topics about Matrix in an academic context. The room is open to the public and everyone is very welcome.
How is it not #matrix-admins-edu-deutsche:matrix.org!? This is a welcome public room for the growing number of Matrix Admins in Germany!
I am very excited to launch Cactus Comments (https://cactus.chat) today together with @asbjorn:olli.ng!
Cactus Comments is a federated, web-embeddable comment system. And of course, we federate by building on Matrix!
On the frontend - your website - we embed a Matrix client written in Elm that renders Matrix rooms as comment sections. The client is designed to be especially easy to embed on static sites. Once you log in to the client, it will only communicate directly with your Matrix server of choice.
On the backend, an application service is used to create rooms on-demand and help with moderation. It is built with Python and is completely stateless. It does this by modelling all state in native Matrix objects without any custom events!
The entire thing is free and open source software and we would love it if you were to contribute. We really hope some of you will give it a try!
With things on the Internet vanishing, I've been wanting to start saving copies of interesting web pages and videos to my server-at-home.
This really doesn't involve much more than just running youtube-dl or archivebox on the relevant URLs, but I needed a better way than having to e-mail myself reminders to download thingsβ¦
You can run it occasionally (or set it up to run in a cron job!) and it will then read all outstanding messages and feed the text to a given command, such as youtube-dl.
You can choose for it to delete processed messages, or tick them off (β ). If the command wasn't successful, it will instead reply with the exit code.
It's not particularly sophisticated but it might at least be a small starting point for anyone who wanted to make something similar, and it is end-to-end encryption capable because it uses the Python matrix-nio SDK.
See this example of use with youtube-dl; it fails on the second message because it's not a video page URL:
I like this a lot - there are so many uses for this project.
In layman's terms, we showed that the Event Graph provides a strong form of eventual consistency even when new events are applied in arbitrary order. In addition, this consistency guarantee can still be provided even if all other servers in a room are malicious, which is unexpected compared to the honest majority required for the usual Distributed Ledger Technology. We also looked at the problem of βIf servers randomly select at which parents at the bottom of the Event Graph they append new events, and the number of parents for an event is limited, how can you be sure that the Event Graph does not grow arbitrarily wide?β, which is something that puzzled me since the beginning of my Ph.D. two years ago. It is easy simulate a given setup and see that the width shrinks really fast, but it is also easy to see that arbitrary growth has a likelihood larger than zero. As this was astonishingly hard to grasp mathematically, we were very happy that we could recruit Prof. Dr. Norbert Henze from the Institute of Stochastics as co-author to provide evidence that you can expect the Event Graph to shrink to a normal width quite quickly.
Let me quote parts of the abstract for some more technical details:
[β¦] By comparison with traditional decentralized communication systems, Matrix replaces pure message passing with a replicated data structure. This data structure, which we extract and call the Matrix Event Graph (MEG), depicts the causal history of messages. We show that this MEG represents an interesting and important replicated data type for decentralized applications that are based on causal histories of publish-subscribe events: First, we prove that the MEG is a Conflict-Free Replicated Data Type for causal histories and, thus, provides Strong Eventual Consistency (SEC). With SEC being among the best known achievable trade-offs in the scope of the well-known CAP theorem, the MEG provides a powerful consistency guarantee while being available during network partition. Second, we discuss the implications of byzantine attackers on the data typeβs properties. We note that the MEG, as it does not strive for consensus or strong consistency, can cope with n > f environments with n participants, of which f are byzantine. Furthermore, we analyze scalability: Using Markov chains, we study the number of forward extremities of the MEG over time and observe an almost optimal evolution. [β¦] With the properties shown, a MEG represents a promising element in the set of data structures for decentralized applications, but with distinct trade-offs compared to traditional blockchains and distributed ledger technologies.
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, there's been activity from the core team on MSC2516 (voice messages), MSC2312 (matrix URI scheme) and MSC3026/MSC3032 (presence improvements).
New Spec Platform
PR updates on matrix-doc has been refactored and straightened out, and is up for review. We're reviewing changes to our infrastructure on matrix.org in parallel which should result on spec.matrix.org hosting the unstable spec sometime early next week!
Dept of Servers π’
Synapse
Synapse is a popular homeserver written in Python.
We released Synapse 1.28 yesterday, with the bulk of effort going into stability improvements and bug fixes, and an emphasis on further improving social login.
We're also working to more clearly communicate our prioritization of issues, starting with documenting our triage and labeling process for the core Synapse repository on GitHub.
(Still very much a work in progress, but starting to shape up nicely.)
We're also on track to maintain our fortnightly cadence of Release Candidates, with 1.29.0rc1 due out in just a few days. I look forward to telling you all about it next week!
Another week, another bump of the Kubernetes chart and image of Synapse (to 1.28.0), still haven't had time to fix it to be image agnostic - the Synapse team is just developing far too fast.
We've added a "Chat via Matrix" button next to the join button in a Gitter room so you can jump straight into Matrix and start chatting that way. We've also added a Matrix.to link in the chat header so you can switch off to your favorite Matrix client at any time.
matrix-appservice-line: A bridge for LINE messenger based on running LINE's Chrome extension in Puppeteer. Based on tulir 's mautrix-amp, as per Eric Migicovsky's suggestion π
Currently very rough around the edges, but message sending & receiving in 1:1 chats works, as does conversation syncing & backfilling.
We released NeoChat 1.1 containing 2 months of new features and bugfixes. Most notably message editing, sticker events support, rewritten login screen, SSO support and more commands. Check it out at https://carlschwan.eu/2021/02/23/neochat-1.1/
In addition to the 1.1 release from earlier, aa13q added support for fancy animation for the π, π and π¨οΈ emojis. This feature can be disabled.
As seen from the image, you can now share your screen. This currently only works on X11, since there are no cross platform APIs for that, so look out for that, if you run into issues.
Jedi18 also polished the UX a bit more and fixed bugs, so registration should now work properly again and leaving or joining rooms should place you in the right rooms after that. We also fixed some inconsistencies, where text could be misaligned, when writing long messages.
Version 0.0.95 beta4 is out, with significantly better Markdown support (code fences work now, and the overall formatting is better), further improvements to the shuttle dial and other smaller fixes. The release notes and some packages are at their usual place at GitHub; the Flatpak is also coming real-soon-now.
No (or almost no) changes in strings are expected before 0.0.95 from now, so translation contributions are very welcome at Lokalise. German, Polish and Spanish translations are quite advanced but need just a few more entries; the French translation is just about half-way; and there are many prominent languages not even started. You can help!
Element Clients
Updates from the team:
Delight
Social Login
After shipping Social Login on matrix.org, weβre working on general stability to harden the feature, and get better visibility on stability.
Spaces
On Android, weβre making good progress on creating and managing spaces, first focusing on public space use cases. Otherwise, weβre also polishing implementations on web & iOS.
Web
1.7.22 RC on staging, includes
Improved Jitsi conference names
Disabled chat effects when reduced motion preferred
1.7.22 planned for release on Monday (1 Mar)
iOS
1.2.2 RC currently available in TestFlight
1.2.3 RC is coming
Will be released on Monday:
Mainly bug fixes around e2ee and VoIP
Android
1.1.0 released with a huge update on VoIP
Initial sync is now more reliable for big accounts, consuming less RAM
Hey TWIM. I'd like to present Watch The Matrix, a matrix client for watchOS that I've been working on over the last few weeks. Currently can view rooms, receive new messages and react to them:
Find the code: https://github.com/pixlwave/Watch-The-Matrix
libQuotient 0.6.5 is out, featuring fixes in rich replies handling and the updated Matrix URIs support, as per the latest iteration of MSC2312, enabling shorter, nicer Reddit-style URIs such as matrix:r/thisweekinmatrix:matrix.org.
opsdroid is an easy to use chatops framework with excellent matrix support.
0.21 Release
This week opsdroid 0.21 has been released, it's an incremental release but includes a couple of nice matrix related features and fixes. The highlights are:
Support authorization by access token in addition to user name and password for the matrix connector. #1707.
Fix parsing a sync response with more than one message in it. #1715.
Minor fixes to the matrix documentation. Thanks to @anoadragon453 @xDiesel76 for these.
For a full list of the other changes see the release notes.
Caridina, a Crystal library for Matrix, got some new releases, which bring it to v0.10.2. It now supports the last version of Crystal (0.36.1) and redacted events, which I discovered the hard way were making the lib crash. Internally a big part of the lib was rewritten using macros, which makes the code a lot clearer but the API doc too. Thanks to Ruma actually for giving me inspiration about implementing events using macros.
Again, if you like Crystal and want to write some matrix bot, this library might interest you. Feel free to open issues about bugs or feature requests! There is now a room #caridina:cervoi.se to talk about it.
So I had a minute to release my open q&a bot taavi.
I always wanted to write a chatbot that does cool things, so checkmark for that one on the list. In addition to that I recently failed a job interview. For their technical skill test (I did not fail this :P), I got a task for which I learned how to use puppeteer, then saw a post on reddit about Tuxi and together with my previous project that included Matrix (Audius), I knew what I had to do: create Taavi.
I have created this bot as a "weekend project", literally one day for the code and one day for documentation. Surely it's far from perfect but I don't have any big plans with it so far⦠If you think I should add some features, create an issue and let me know. I could imagine adding other websites / services to it like last.fm, do you have any ideas?
I gave my daughter the task to choose a name for a bot, that can answer any question in the world, and she came up with Taavi, nice!
I created an Ansible role for installing Maubot via Docker - https://git.feneas.org/jaywink/ansible-maubot . Currently it only supports an Sqlite database, but pull requests are welcome for more configuration. Supports a pre-created client account.
i've been getting some feedback from other matrix users on a blog post i wrote that outlined a few concerns I had about the Matrix ecosystem and steps for improvement. idk if it'd be relevant in TWIM, but I noticed that "Final Thoughts" sometimes linked blog posts so I thought I'd share: https://seirdy.one/2021/02/23/keeping-platforms-open.html
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
rollyourown.xyz
420
2
neko.dev
465.5
3
maunium.net
480
4
phys.ethz.ch
481
5
envs.net
492.5
6
mailstation.de
738
7
blackline.xyz
891
8
kif.rocks
902
9
casavant.org
932
10
aria-net.org
1028
That's all I know π
See you next week, and be sure to stop by #twim:matrix.org with your updates!