Matrix Live

Dept of Status of Matrix 🌡️

Dandellion announces

Back in July I started a discussion on wikidata for adding a matrix space property, after much discussion in the wikidata community (lead mostly by tgr) we instead landed on a Matrix room property. This now enables slightly more accurate semantics when describing matrix rooms belonging to organizations, projects, and people on wikidata.

Wikidata is a knowledge base available under a free license and using standard machine-parsable data to add information to what is known as the "semantic web", this allows querying for information like for example: Organizations with matrix rooms

As the rest of wikimedia's projects it's open for contributions!

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

MSC Status

New MSCs:

MSCs in Final Comment Period:

  • No MSCs are in FCP.

Merged MSCs:

Closed MSCs:

Spec Updates

As you can tell from the above MSC list, Extensible Events continues to charge forwards, with Travis working busily away at replicating all of the existing event functionality (plus new functionality - image albums anyone?) in a world containing Extensible Events. As always, take a look at the core MSC (MSC1767) for a background on what Extensible Events is, and why it's so exciting.

This week has also seen room version 10 become the default recommended room version in the spec! As a reminder, v10 brings the ability to have a room that's both knockable and restricted at once, as well as more strictly enforces the types of power level values.

Otherwise we've seen lots of movement in other areas of the spec. Expect to see some work done around push rules (which have historically been rather complicated and fiddly...) and notifications in the days to come.

Random MSC of the Week

The random MSC of the week is... MSC3779: "Owned" State Events!

I remember this MSC fondly. It was originally born out of MSC3489's need to allow any user in the room to send m.beacon_info state events. This can easily be achieved today by lowering the required power level of m.beacon_info to the default user level. However, you then run into the issue of any user being able to edit any other user's m.beacon_info event!

Thus this MSC attempts to modify the state events permission model so that users can "own" certain state events that they send. We already somewhat have this functionality - if you put your Matrix ID as the state ID for any state event, only you or users with a power level higher than you can edit it.

Sadly this little trick (which we use for m.room.member events) doesn't work in the case of live location sharing, as the feature demands the ability to share location from multiple devices at once. Hence, trying to send two m.beacon_info events with the same state key would overwrite each other.

This MSC attempts to expand the functionality by modifying the definition so that a user "owns" a state event if the state key starts with their Matrix ID. Problem solved... for the most part!

Do check out the MSC if you have some use cases in mind that would benefit from something like this.

Dept of Servers 🏢

Synapse (website)

Synapse is a Matrix homeserver implementation developed by the matrix.org core team

Shay says

A new year, more improvements to Synapse! We are back at work and have released Synapse v1.75.0rc2, with a host of features, bugfixes and internal changes to make Synapse faster and more stable. Some notable changes are:

  • Experimental support for MSC3391 (removing account data)
  • Support RFC7636 Proof Key for Code Exchange for OAuth single sign-on
  • Fixed a bug introduced in Synapse 1.70.0 which could cause spurious UNIQUE constraint failed errors in the rotate_notifs background job
  • Removed the unspecced device field from /pushrules responses
  • Declared support for Python 3.11

And much more! If you'd like to learn more, head on over to https://github.com/matrix-org/synapse/releases and take a look.

Dept of Bridges 🌉

matrix-hookshot (website)

A multi purpose multi platform bridge, formerly known as matrix-github

Half-Shot says

Hookshot 2.6.0

Evenings greetings! It's been a while since we've done a Hookshot release, so this one is pretty large. We've got two major features this time around, Encrypted Room Support and Service Bots. The former now allows you to invite the hookshot bot to encrypted rooms and issue commands to it as normal, it should work entirely transparently. It currently requires a homeserver with MSC3202 support, such as Synapse. One final note is that it's extremely experimental and beta-y, so please do not run this on your production instances or it might format your cats. However, plaese do report all your findings to us. We love fan mail 📧

Service bots is another great feature that now allows you to split hookshot into several different bots, so you can have a GitHub bot, a GitLab bot, a JIRA bot and so on. It's extremely flexible, so please have a go and let us know what you think.

You can find this release at https://github.com/matrix-org/matrix-hookshot/releases/tag/2.6.0, or by doing docker pull halfshot/matrix-hookshot:2.6.0.

Finally, the highlights are:

  • Add support for end-to-bridge encryption via MSC3202. (#299)

  • Add support for additional bot users called "service bots" which handle a particular connection type, so that different services can be used through different bot users. (#573)

  • Add new GitHubRepo connection config setting workflowRun.workflows to filter run reports by workflow name. (#588)

  • Parent projects are now taken into account when calculating a user's access level to a GitLab project. (#539)

  • Ensure bridge treats published and drafted GitHub releases as different events. (#582)

  • Remove support for Pantalaimon-based encryption. (#299)

  • Increase maximum size of incoming webhook payload from 100kb to 10mb. (#606)

Dept of Clients 📱

Nheko (website)

Desktop client for Matrix using Qt and C++17.

Nico says

You know the custom of having a cheesy goal for the next year? Well, I had Raclette for new years, so my only goal was to have at least one Nheko release! And for that reason and to get all the planned things out of the way for this year, it is my pleasure to announce Nheko 0.11.0!

It is packed with contributions and translations from way too many people for me to count on one hand! You can find it eventually in all the usual places, for example our releases list: https://github.com/Nheko-Reborn/nheko/releases/tag/v0.11.0

If you hate clicking links, here is a small spoiler of some of the ingredients (apart from the cheese):

Highlights

  • Search in your timeline 🔍
    • Works in encrypted rooms.
    • Search is entirely local.
    • It might be a bit slow on some systems, since it needs to paginate the room to search instead of relying on the server.
  • Pushrule support! 🫸🫷
    • Notifications should now be faster and not rely on the server.
    • Notifications should work properly in encrypted rooms.
    • MSC3664 is supported for pushrules for reply (needs server support).
    • Mentions get highlighted in the timeline.
    • Decrypting notifications can be disabled for improved privacy.
  • Threads 🧵
    • Threads are a simple way to structure large rooms.
    • Start a new thread from any event.
    • Focus on a specific thread by clicking on the colored thread button next to any event from this thread.
    • Replies automatically land inside the thread.

Features

  • Remember where you left off using the new unread indicator! ---
  • Navigate to space when selected in quick switcher or via link.
  • (Re-)Add an AppImage build. (Zhymabek Roman)
  • Render and send confetti! 🎉 (LorenDB)
  • Focus text field on most key presses.
  • Show link to next room for tombstone events.
  • macOS: Only play notification sound when pushrule says so.
  • macOS: Builds for Apple Silicon.
  • macOS: Allow quick replies from notifications.
  • Completer for /commands.
  • Allow opening room settings from room list. (LorenDB)
  • Allow setting the status message via the dbus API. (LorenDB)
    • Check out this for one possible usecase: https://schlomp.space/tastytea/dotfiles/src/commit/485aa7103c4f414ce0731804acf34a65a772fd28/.local/bin/mpd2nheko (Setting your currently playing song as your status)
  • Allow swapping Enter and Shift-Enter. (LordMZTE)
  • Preliminary support for VoIP v1. (Rohit)
  • Allow applying permission changes in spaces recursively.
  • Allow modifying permissions of users not in the room.

Improvements

  • Prompt before deleting the database when the error could be resolved by the user.
  • Improve logging in particular for sync or registration errors.
  • Speedup quick switcher.
  • Prune image cache in the background.
  • Store all secrets encrypted in the database (apart from the pickle).
  • Speedup fetching olm sessions from the database.
  • Increase database resiliency at the cost of a lot of performance.
  • Rename spaces to communities.
  • Handle some rate limiting better in some cases.
  • More fine grained control over logging. (Forest)

Element Web/Desktop (website)

Secure and independent communication, connected via Matrix. Come talk with us in #element-web:matrix.org!

kittykat reports

  • You can try out the upcoming release on staging.element.io! Threads is now on by default, so take it for a spin
  • Meanwhile, we’ve made some improvements to the polls dialog, including better scaling

In labs (you can enable labs features in settings on develop.element.io or on Nightly):

  • We’ve added more features to the rich text editor, including support for lists

Element iOS (website)

Secure and independent communication for iOS, connected via Matrix. Come talk with us in #element-ios:matrix.org!

Ștefan says

  • Welcome to 2023, a new year, a new you and a new version of Element for iOS! This upcoming release includes many small changes and bug fixes, the highlights of which are:
    • You can now create links and code blocks with the Rich Text Editor.
    • The final results of a Poll will be shown when it ends so you don’t need to scroll back to find them.
    • Both Threads and Voice Broadcasts have been improved and are more reliable.
  • Meanwhile ElementX is slowly making its way towards a public appearance:
    • We have improved how we handle multiple sliding sync windows and implicitly the room list
    • Better room message backpagination
    • Improved video playback and timeline media handling
    • And it’s all running on the latest version of the RustSDK which brings a slew of bug fixes too

Element Android (website)

Secure and independent communication for Android, connected via Matrix. Come talk with us in #element-android:matrix.org!

benoit announces

  • Element Android 1.5.18 is now full prod, and 1.5.20 should follow at the beginning of next week. Threads are now enabled by default. We are now working to be able to display all the polls of a room. Also the RichTextEditor is getting more and more features. Do not hesitate to give it a try after enabling it from the labs!
  • On ElementX, we are making progress to set up the global architecture of the project.

Dept of SDKs and Frameworks 🧰

matrix-rust-sdk (website)

Next-gen crypto-included SDK for developing Clients, Bots and Appservices; written in Rust with bindings for Node, Swift and WASM

ben reports

Even though the end of the year is usually a quiet time, big steps forward have been made in the last couple of weeks on many important areas of the rust SDK.

With Sliding Sync being tried out in Element-X a few more bugs and edge-case scenarios have been uncovered, where it doesn’t play well yet. For example resending the correct extension settings on session restart including to-device-tokens, invalidation indexes, or incorrectly skipping to-device processing and various other smaller fixes. The latter PR also contains a first set of integration-tests running testing the SDK against synapse and the sliding-sync-proxy. We intend to expand on that and include it in the CI as soon as github actions are unblocked for it.

Similar has been done on the Timeline feature, with a better more flexible timeline pagination implementation, a new virtual loading indicator item, improved logging and date dividers and read markers. All good stuff, making it easier to implement a useful chat UI on top of it.

On async UniFFI we see the same picture: with Swift, Kotlin and Python now executing rust futures as well as handling their error results properly. And time couldn’t be any better as we can hear the creaking of the blocking-runtime we currently have under the hood in Element-X and it is starting to show the limits of what we can implement in a useful manner. We are confident we can start experimenting with it in live apps fairly soon.

️👉 Wanna hack on matrix rust? Go check out our help wanted tagged issues and join our matrix channel at Matrix Rust SDK. join our matrix channel at Matrix Rust SDK.

libQuotient (website)

A Qt5 library to write cross-platform clients for Matrix

kitsune reports

It didn't take long for the first bugfix release in libQuotient 0.7.x to come out - meet libQuotient 0.7.1! Now the library actually compiles with E2EE on Windows, correctly exposes QtKeychain dependency to the clients, and can handle SSO even in the presence of proxies. Read all of it (delightfully short, after a long read of 0.7.0 release notes) at the usual place.

Dept of Ops 🛠

matrix-docker-ansible-deploy (website)

Matrix server setup using Ansible and Docker

Slavi announces

Thanks to Cody Neiman's efforts, matrix-docker-ansible-deploy now supports bridging to Slack via the mautrix-slack bridge. See our Setting up Mautrix Slack bridging documentation page for getting started.

The playbook still retains Slack bridging via matrix-appservice-slack and mx-puppet-slack. Playbook users are free to use the bridge that serves them better, or even all three of them (for different users and use-cases).

Slavi says

Thanks to @bertybuttface, matrix-docker-ansible-deploy can now help you set up matrix-chatgpt-bot - a bot through which you can talk to the ChatGPT model.

Dept of Events and Talks 🗣️

Matrix Salon Podcast (German)

jaller94 announces

Meet Kim (aka HarHarLinks) who learned about Matrix in 2017 while studying. He's now managing Matrix projects professionally and attends conferences about the protocol and other open source software.

Learn about him and how you could land a Matrix job. See you at #FOSDEM2023!

Episode link: https://anchor.fm/matrix-podcast0/episodes/Kim---Vor-der-FOSDEM-2023-e1teh6l Mastodon post: https://mastodontech.de/@jaller94/109682609755003775

Dept of Interesting Projects 🛰️

matrix-social

imbev reports

matrix-social is a social media client powered by Matrix.

  • Posts (messages) can be sent
  • Redaction of upvotes/downvotes is now possible
  • Several bugs are fixed
  • We're currently working on per-room views and sending replies

Preview matrix-social at https://imbev.codeberg.page/matrix-social/

All are welcome to join us at #matrix-social:matrix.org!

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.

#ping:maunium.net

Join #ping:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.

RankHostnameMedian MS
1beeper.com269
2nognu.de274
3plocki.org345.5
4dendrite.babel.sh434.5
5farafin.de450
6babel1.eu455
7trygve.me456
8alemann.dev516.5
9wcore.org569
10rom4nik.pl602

#ping-no-synapse:maunium.net

Join #ping-no-synapse:maunium.net to experience the fun live, and to find out how to add YOUR server to the game.

RankHostnameMedian MS
1babel.sh109
2rcp.tf205
3dendrite.babel.sh254
4dendrite.kootstra.frl275
5rustybever.be377.5
6dendrite.s3cr3t.me401.5
7cringe.chat990
8frai.se48769

That's all I know

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

The Foundation needs you

The Matrix.org Foundation is a non-profit and only relies on donations to operate. Its core mission is to maintain the Matrix Specification, but it does much more than that.

It maintains the matrix.org homeserver and hosts several bridges for free. It fights for our collective rights to digital privacy and dignity.

Support us