Dept of Spec 📜
Andrew Morgan (anoa) announces
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://spec.matrix.org/proposals.
MSCs in Final Comment Period:
- No MSCs are in FCP.
- MSC3746: Render image data in reactions
- An alternative proposal: MSC4027: Propose method of specifying custom images in reactions
Work to use Matrix as the standard for interoperable messaging at the IETF is continuing in full stride. At IETF 117 (July 22nd - 28th, 2023) we'll be talking about the precise requirements of an interoperable protocol, and encouraging Matrix be that protocol. Linearized Matrix is our proposal for the room model, with more updates expected in the coming days ahead of the submission deadline, meanwhile yours truly is working on using MSC1767 Extensible Events for a content format. Watch this space for updates leading up to IETF 117 🙂
We're also well on track to test interoperability of different Linearized Matrix implementations at the Hackathon - get in touch with us via the #sct-office:matrix.org if you're working on such an implementation so we can coordinate details. It's not too late to get started either; Linearized Matrix itself is relatively simple to implement compared to the full capability of Matrix, by design.
Random MSC of the Week
The random MSC of the week is... MSC3903: X25519 Elliptic-curve Diffie-Hellman ephemeral for establishing secure channel between two Matrix clients!
This MSC provides a means of establishing a trusted, secure communications channel across a potentially untrusted network. Subsequent MSCs could then use this channel to transfer details such as login tokens or key backup credentials in the context of setting up a new Matrix device. MSC3906 is one proposal that takes advantage of this.
This is just one piece of work building on the tree of MSCs supporting the shift of authentication in Matrix from home-brewed to OIDC. See https://areweoidcyet.com/ for more details on that effort.
Dept of Servers 🏢
Synapse is a Matrix homeserver implementation developed by the matrix.org core team
This week we released 1.87.0. As a reminder, please note that this will be the last release of Synapse that is compatible with Python 3.7 and earlier. Now on to the highlights:
/messagesresponse time by avoiding backfill when we already have messages to returns
- Fix a long-standing bug where media files were served in an unsafe manner
- Fix joining rooms through aliases where the alias server isn't a real homeserver
- Avoid invalidating a cache that was just prefilled
and much more. If you'd like to take a deep dive into the changes, you can find the release notes here and as always, if you encounter a bug feel free to report it at https://github.com/matrix-org/synapse/issues/new/choose.
Second generation Matrix homeserver
Devon Dmytro announces
This week we released v0.13.1. Here are a few of the highlights:
- A long-standing "off-by-one" error has been fixed, which could result in state resets
- Roomserver Prometheus Metrics are available again
Conduit is a simple, fast and reliable chat server powered by Matrix
Timo ⚡️ reports
It's happening! I finally managed to implement some highly requested features in Conduit like the hierarchy and relations endpoints to finally allow users to:
- Explore spaces locally and over federation
- Read and write thread messages
- View edit history
I also worked on some other improvements to make the overall experience smoother:
- Significant memory usage improvement, smaller instances can be at 150MB or lower, bigger instances around 1GB. Try it out on your own Conduit instance and join #conduit:fachschaften.org to tell us what you find.
- Fixed a state resolution bug. There should be fewer soft failing errors now.
- Randomize server join order
Last but not least, I started working on Element X support for Conduit by implementing sliding sync. This is a bigger task, but a very basic version is already working: https://mastodon.social/@timokoesters/110665620551657280
Element X developers should prepare for native sliding sync support in the not-too-distant future and should try to detect this functionality instead of requiring a client well known file.
You can support me on https://liberapay.com/timokoesters
PS: I'm also looking for jobs and other opportunities for when I finish university at the end of the year, contact me if you have ideas.
Dept of Bridges 🌉
Libera.Chat asked the Matrix.org Foundation to "deportal" the bridge, only leaving plumbed rooms active by July 31st. This means the bridge could stop working if your room is not "plumbed". Plumbed? Portalled? What are we even talking about?
I wrote a guide to help you make sure the rooms you maintain will keep bridging after July 1st, and you can find it here.
Dept of Clients 📱
Many bugs when joining and leaving rooms has been fixed in chooj. Furthermore, many bug fixes and improvements happened in the underlying UI library, KaiUIng. And finally, a small guide has been added to chooj which shows up for the first launch and explains the Matrix network and its capabilities. I am still looking for sponsors to financially help with the development of the project. I am also considering publishing chooj to KaiStore. Meanwhile, you can download chooj from the BananaHackers webstore and try sideloading it, given that your KaiOS feature phone supports that.
Desktop client for Matrix using Qt and C++17.
I've had a lot of people reach out the last few weeks, that they wanted to know who can see their messages and how to control that. As a result I finally got around to implementing a history visibility selector in Nheko: You can toggle between anybody being able to see your messages without joining the room you sent them in or restrict visibility to joined users only. In the latter case you can then select visibility of past messages for joined members between all the past messages, from the invite on or from their join going forward. These are the standard Matrix history visibility rules, but we try to represent them a bit differently to make it clearer, what they mean. I hope this makes them a bit easier to understand.
However there are ways around visibility rules. If a room selects to not allow users to see its messages, unless the user joins the room, a user could possibly use a bot to proxy the messages and make them either visible or possibly even searchable to users, that haven't joined the room. This sometimes happens on Mastodon and you basically have 2 options to prevent it: approve each user individually after verifying they are not a bot or delete your messages after some time to prevent how much can be read by a bot.
The former is already available in Nheko for quite some time. You can set any room to require knocking and a user will have to knock before being allowed to join the room and view messages. You can even combine that with restricted joins, that allow a user of some room to join another room without knocking, which significantly reduces the overhead.
However knocking isn't always a great solution, especially if you don't control the room or it really should be public. So we also implement an option for automatically expiring messages now. This is EXPERIMENTAL and might cause significant strain on your homeserver when first enabled (and possibly even after that), as such please be careful and apply good judgement. Originally we were waiting for this to be part of the Matrix specification eventually and have the server handle the deletion more efficiently and with less load. However the effort on multiple of those MSCs has stalled and as such we now have a client-side solution until we can rely on server support for this. You can now in the settings of each room select when your old messages should be deleted (after some time or by only keeping a specific total of messages). You then enable the background job in the general settings and Nheko will periodically check for messages to delete and then delete them. In theory you can enable this also globally for all rooms, however Nheko does not expose a button for that yet, as this again is still experimental and might come with performance issues or worse. You can however enable it manually if you write the configuration by hand.
Apart from that we are still stabilizing the qt6 port. LorenDB fixed the Recaptcha and also qmlified that dialog (finally). And Satellia fixed some minor issue, where the focus didn't return properly to the input bar after sending files.
I hope this update was interesting. It does tick of some items I was always to lazy to work on, so I guess that is nice to have it over with! Have a nice and enjoyable weekend!
Element X Android (website)
Android Matrix messenger application using the Matrix Rust Sdk and Jetpack Compose
This week on the Element X Android team we’ve been implementing improvements to the room list loading time, invites and many more. Other new updates include,
- Being able to swipe in order to start a reply to someone from the timeline
- Having message actions responsive to the type of event or message
Element Web/Desktop (website)
Secure and independent communication, connected via Matrix. Come talk with us in #element-web:matrix.org!
Our long-awaited improvements to the notifications settings screens are now available in labs! In the coming weeks we’ll be making the new view the default experience so let us know if you have feedback on it.
- Other work on notifications continues with our team heads down on fixing stuck notifications issues. We’ve started drafting a new MSC we hope will make improvements - watch this space for more news.
Along with this our other projects have been making great progress, for example our more strategic improvements to accessibility are starting to take shape and you’ll soon see the typeface and colours in Element reflect that.
Our integration with OIDC is making massive strides forwards. We’re currently testing the login flow and work on logout is well underway.
Element X iOS (website)
A total rewrite of Element-iOS using the Matrix Rust SDK underneath and targeting devices running iOS 16+.
While there’s a lot we’re still working on building, here’s my personal highlights:
- Location sharing: Being able to send your location and view others’ locations in the timeline, being able to send a pin location, along with viewing it all in dark mode!
- Notifications: We’re building out the settings screens, in app messages, push notifications etc. are all in the works and looking really great. You’ll be able to experience it soon. Remember; keep checking in for updates and keep sending over your feedback!
Dept of Non Chat Clients 🎛️
E2E encrypted social networking built on Matrix. Safe, private sharing for your friends, family, and community.
Circles is a secure social network app for friends and families, built on Matrix.
This week we released a new beta build (v1.0.12) for Android, including:
- Emoji picker now shows a quick list of the most recent or most common emojis
- Added the option to re-send invites
- New visual design for the timeline
- Quick gesture-based navigation on the timeline (single, long, double tap gestures)
- Added the ability to share rooms and profiles via deep links
- Added loading indicators
- Various bug fixes and performance optimization
In particular, scrolling the timeline is now much snappier, especially when new posts are coming in from the server.
Dept of VoIP 🤙
Element Call (website)
Native Decentralised End-to-end Encrypted Group Calls in Matrix, as a standalone web app
Jake B-B reports
The Element VoIP team are making a major update to Element Call with our release of a new version backed by the LiveKit SDK and SFU. This means that our SPA at call.element.io will now support much larger calls; 100 participants comfortably and potentially many more.
To support that, we have delivered new UI for large calls, with a scrolling grid that you can rearrange to your liking, dragging and dropping tiles and expanding them as you like.
It's worth noting that call.element.io will temporarily no longer be encrypted after this update, but we will be bringing back end to end encryption within the next few weeks.
This release requires running a LiveKit SFU and also a tiny service that will issue tokens for that SFU. Note that we don't currently offer a publicly available implementation of the latter. This means that if you currently run Element Call, it is probably advisable to remain on the 0.3.x releases rather than upgrade at this point.
Dept of SDKs and Frameworks 🧰
Next-gen crypto-included SDK for developing Clients, Bots and Appservices; written in Rust with bindings for Node, Swift and WASM
Jonas Platte announces
- Timeline: More thoroughly support MSC3488 (
- Timeline: Make pending local echoes stick to the bottom
- Timeline: Add
- Add notification settings
- Timeline: Keep loading indicator at the top when processing events (bugfix)
- Timeline: Replace loading indicator and timeline start virtual items
- Timeline: Spawn a background task for decryption retrying
- Immediately fail if a sliding sync request failed
- Crypto: Don't recreate the cross-process lock if it already existed
- Allow to filter events added to the Timeline
- Store the last timeline event in RoomInfo (WIP)
- Timeline: Add timestamp to reactions
A Qt5 library to write cross-platform clients for Matrix
Tobias Fella says
Just half a year after the last minor release, here's libQuotient 0.8!
Here's what this release brings to you, other than a quicker release cycle:
Dept of Bots 🤖
A Matrix bot for the Friendly Linux Players community.
The greeting feature of the bot has been improved to detect when a user is rejoining the room (as their previous membership event was to leave), and to provide a much shorter "welcome back" message in those cases.
On the community website side, events scheduled by the bot now have schema.org event markup. This allows for events to potentially have fancy UI in search engines!
Dept of Interesting Projects 🛰️
If anyone finds it interesting, some time ago I made "Yarrosco" : https://github.com/deavid/yarrosco A simple app to get chats from Matrix and Twitch into OBS when streaming made in Rust.
Dept of Ping
Join #ping:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.
Join #ping-no-synapse:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.
That's all I know
See you next week, and be sure to stop by #twim:matrix.org with your updates!