matrix.org/content/blog/2024/04/2024-04-19-twim.md

30 KiB
Raw Permalink Blame History

+++ date = "2024-04-19T19:30:00Z" title = "This Week in Matrix 2024-04-19" path = "/blog/2024/04/19/this-week-in-matrix-2024-04-19" aliases = ["/blog/2024/04/19/this-week-in-matrix-2024-04-10"]

[taxonomies] author = ["Thib"] category = ["This Week in Matrix"] +++

Matrix Live

{{ youtube_player(video_id="MsJjRtgSYcU") }}

Dept of Status of Matrix 🌡️

Josh Simmons announces

WOW! What a week. Today I am thrilled to introduce not one or two, but eight new organisational members. We are extremely grateful to Futurewei Technologies for joining as our newest Gold Member more on that soon and to Verji Tech AS for joining as our newest Silver Member. Their support represents a big step toward financial sustainability for the Matrix.org Foundation.

Further, today we welcome Community Moderation Effort, Matrix Elm SDK, FluffyChat, Matrix Community Events, Polychat, and Rory&::LibMatrix as Ecosystem Members! If you couldnt tell, theres a lot going on in the Matrix ecosystem!

Does your community use Matrix? Does your project speak Matrix? Or does your business incorporate Matrix into your work? Show your support and become a member today.

Topping off this weeks excitement, our Governing Board nomination period is just about to start! Learn more about the elections, as well as who can nominate and how in our recent blog post.

Dept of Spec 📜

Andrew Morgan (anoa) reports

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.

MSC Status

New MSCs:

MSCs in Final Comment Period:

Accepted MSCs:

Closed MSCs:

  • No MSCs were closed/rejected this week.

Spec Updates

A quick call-out for a particular MSC. MSC4098: Use the SCIM protocol for provisioning is actively looking for feedback from the community. The proposal aims to work SCIM's standard endpoints into the Matrix spec. Doing so would allow industry standard tooling to be able to create/delete/modify/etc. Matrix users on a homeserver without needing to, for example, implement code specifically for Synapse's Admin API.

The impact would allow for greater interoperability between various existing services and Matrix homeservers - which seems like a no-brainer if you're aiming for wide adoption of a protocol!

If folks are interested, please leave your thoughts on the MSC linked above.

Dept of Servers 🏢

Synapse (website)

Synapse is a Matrix homeserver implementation developed by the Element

Olivier 'reivilibre' says

Hello! This week, we released Synapse 1.105.0, which has:

  • support for the stabilised MSC4010, which clarifies the interaction of push rules and account data;
  • support for the stabilised MSC3981 (/relations recursion);
  • the ability for operators of workerised Synapses to now move /pushrules off of the main process (though this will mostly be of interest to large deployments);
  • fixes for various long-standing bugs returning incorrect state in /sync; and
  • a good handful of other minor fixes and performance improvements.

Dept of Bridges 🌉

matrix-hookshot (website)

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

Half-Shot reports

Hookshot 5.3.0 becomes bigger and bolder

Hello! It's been a while since we've written an update post but I felt like this release (5.3.0) deserves one.

For those that don't know, Hookshot is the premier solution to bridging third party services like GitHub, RSS, Webhooks into Matrix. We place particular emphasis on scalability (it powers most of the Element Integrations Store apps), and in this release there is even a performance bump.

So what's in the new release? Well!

  • We've added ChallengeHound support. Challenge Hound is a paid service to collectively exercise towards a goal, and will keep track of your teams progress. Hookshot now allows you to bridge in these events. Effectively this obsoletes my old project, https://github.com/Half-Shot/matrix-challenger/.
  • The Rust porting continues. In this release we've moved encrypted storage handling into Rust. In the future we plan to phase out RSA keys with something stronger, and more suitable for our needs.
  • The documentation has been tidied up with more information on the permissions systems. We've also clearly separated the caching and queue systems in the config (previously muddled under the "Redis" banner), to hopefully make things clear.

As always, please let us know what you think in #hookshot:half-shot.uk. We've got an active support channel all feedback is good :)

Happy weekending!

Dept of Clients 📱

Fractal (website)

Matrix messaging app for GNOME written in Rust.

Kévin Commaille announces

📣 👀 Fractal 7.rc 🆕 🎉

  • Account recovery, introduced during this cycle, could lead to an unclear situation where it was still incomplete even after successfully going through the process. We added some explanations on how to solve this. Thanks to anyone who tried it in the beta and provided us with feedback!
  • After fixing a focus issue upstream in GtkListView, we got rid of more focus issues in our widgets. That should make the room history completely accessible with keyboard navigation.
  • Third party verification, that happens in a direct chat, was partly broken as the banner about an ongoing verification was not showing up anymore. The culprit was found and we took that opportunity to improve the security instructions. Along with this bugfix, a coat of polish has been applied.

As usual, this release includes other improvements, fixes and new translations thanks to all our contributors, and our upstream projects.

It is available to install via Flathub Beta, see the instructions in our README.

As the version implies, it should be mostly stable and we expect to only include minor improvements until the release of Fractal 7.

We always welcome any help we can get, come ask for guidance in our Matrix room.

Ement.el (website)

Matrix client for Emacs

alphapapa announces

Ement.el, a Matrix client for the GNU Emacs text editor and Lisp environment, has been released at version 0.15. Changes since the last release include:

Additions

  • Configurable emoji picker for sending reactions. (#199, #201. Thanks to Omar Antolín Camarena.):

    • Option ement-room-reaction-picker sets the default picker. Within that, the user may press C-g to choose a different one with a key bound in ement-room-reaction-map.
  • A variety of enhancements for using compose buffers. (#140. Thanks to Phil Sainty.): Chiefly, messages can now be composed in small windows below room windows, rather than in the minibuffer or a full-sized window. A variety of options and commands are available related to these features. See compose buffer enhancements.

  • Global minor mode ement-room-self-insert-mode enables "just typing" to start a message. (Thanks to Phil Sainty.): See ement-room-self-insert-mode section.

  • Options affecting how images are displayed in room buffers.: See image display section.

Changes

  • Improve prompt used when viewing a room that is not joined. (#241. Thanks to Phil Sainty.)
  • Format "was kicked and rejoined" membership event pairs.
  • Enclose reasons for membership events in quotes for clarity.
  • Improve default room list grouping.
  • When editing or replying to a message in a compose buffer, the related room event is highlighted persistently until the compose buffer is killed. (Thanks to Phil Sainty.)
  • In compose buffers dabbrev will prioritise firstly the associated room, and secondly all other rooms, before looking to other buffers for completions. (Thanks to Phil Sainty.)
  • Aborted messages are now added to ement-room-message-history rather than the kill-ring. (Thanks to Phil Sainty.)
  • Prefix bindings in ement-room-mode-map now have named labels in which-key and similar. (Thanks to Phil Sainty.)
  • Option: ement-room-use-variable-pitch (previously named ement-room-shr-use-fonts) enables variable-pitch fonts for all message types. (This option previously supported formatted messages, but now works for plain text messages as well.) Note: users who have customized the ement-room-message-text face to be variable-pitch should revert that change, as it causes problems for formatted messages, and is no longer necessary. (#174. Thanks to Phil Sainty.)

Fixes

  • Edits to previous edit events are correctly sent to the server as edits to the original message event. (#230. Thanks to Phil Sainty.)
  • Completion at point works more reliably in compose buffers. (Thanks to Phil Sainty.)
  • Toggling images to fill the window body no longer triggers unintended scrolling. (Thanks to Phil Sainty.)
  • Recognition of mentions after a newline. (#267. Thanks to Phil Sainty.)
  • Newlines in ement-room-message-format-spec are considered when calculating the wrap-prefix. (Thanks to Phil Sainty.)
  • Weight of face ement-room-list-direct (now correctly bold in room list heading).

Compose buffer enhancements

  • Option ement-room-compose-buffer-display-action declares how and where a new compose buffer window should be displayed. (By default, in a new window below the associated room buffer.)
  • Option ement-room-compose-buffer-window-dedicated determines whether compose buffers will have dedicated windows.
  • Option ement-room-compose-buffer-window-auto-height causes dynamic scaling of the compose buffer window height so that the full message is visible at all times.
  • Option ement-room-compose-buffer-window-auto-height-min specifies the minimum window height when ement-room-compose-buffer-window-auto-height is enabled.
  • Option ement-room-compose-buffer-window-auto-height-max specifies the maximum window height when ement-room-compose-buffer-window-auto-height is enabled.
  • Option ement-room-compose-method chooses between minibuffer-centric or compose-buffer-centric behaviour.
  • Command ement-room-dispatch-new-message starts writing a new message using your chosen ement-room-compose-method. (Bound to RET in room buffers.)
  • Command ement-room-dispatch-new-message-alt starts writing a new message using the alternative method. (Bound to M-RET in room buffers.)
  • Command ement-room-dispatch-edit-message edits a message using your chosen ement-room-compose-method. (Bound to <insert> in room buffers.)
  • Command ement-room-dispatch-reply-to-message replies to a message using your chosen ement-room-compose-method. (Bound to S-<return> in room buffers.)
  • Command ement-room-compose-edit edits a message using a compose buffer.
  • Command ement-room-compose-reply replies to a message using a compose buffer.
  • Command ement-room-compose-send-direct sends a message directly from a compose buffer (without the minibuffer). (Bound to C-x C-s in compose buffers.)
  • Command ement-room-compose-abort kills the compose buffer and delete its window. (Bound to C-c C-k in compose buffers.)
  • Command ement-room-compose-abort-no-history does the same without adding to ement-room-message-history. (Equivalent to C-u C-c C-k.)
  • Command ement-room-compose-history-prev-message cycles backwards through ement-room-message-history. (Bound to M-p in compose buffers.)
  • Command ement-room-compose-history-next-message cycles forwards through ement-room-message-history. (Bound to M-n in compose buffers.)
  • Command ement-room-compose-history-isearch-backward initiates an isearch through ement-room-message-history. (Bound to M-r in compose buffers; continue searching with C-r or C-s.)
  • Command ement-room-compose-history-isearch-backward-regexp initiates a regexp isearch through ement-room-message-history. (Bound to C-M-r in compose buffers; continue searching with C-r or C-s.)

ement-room-self-insert-mode

  • Option ement-room-self-insert-commands determines which commands will start a new message when ement-room-self-insert-mode is enabled (defaulting to self-insert-command and yank).
  • Option ement-room-self-insert-chars determines which typed characters will start a new message when ement-room-self-insert-mode is enabled (regardless of whether they are bound to self-insert-command).
  • Option ement-room-mode-map-prefix-key defines a prefix key for accessing the full ement-room-mode-map when ement-room-self-insert-mode is enabled. (By default this key is DEL.)

Image display

  • Option ement-room-image-margin is the number of pixels of margin around image thumbnails.
  • Option ement-room-image-relief is the number of pixels of shadow rectangle around image thumbnails.
  • Option ement-room-image-thumbnail-height is the window body height multiple to use when toggling full-sized images to thumbnails (by default, 0.2).
  • Option ement-room-image-thumbnail-height-min is the minimum pixel height for thumbnail images (by default, 30 pixels).

Feel free to join us in the chat room: #ement.el:matrix.org!

Element X iOS (website)

A total rewrite of Element-iOS using the Matrix Rust SDK underneath and targeting devices running iOS 16+.

Doug reports

  • We have a shiny new Join Room Screen to handle links to rooms that youre not part of.
  • 🔗 Navigating to Messages from links and replies is coming along nicely (with much assistance from Rust!).
  • 🔒 Some Rust-side fixes for Encryption have landed fixing a bad race condition between the App and Notifications.
  • 🤳 Work on implementing Login with QR Code continues to progress nicely (were so close to seeing this work for the first time).
  • ✏️ We have re-introduced a plain text field for the message composer when the Rich Text Editor is disabled. This will provide a fix for many annoying typing bugs with various languages, input methods etc.

{{ youtube_player(video_id="cxJPdr8JEaM") }}

Element X Android (website)

Android Matrix messenger application using the Matrix Rust Sdk and Jetpack Compose

benoit reports

  • Element X Android 0.4.10 has been released and will be available in production next week.
  • We have a shiny new Join Room Screen to handle links to rooms that youre not part of.
  • Navigating to Messages from links and replies is coming along nicely (with much assistance from Rust!).
  • Navigating to user permalink is also available on nightiles, for room member and any user
  • The invited room are now displayed in the room list with a new filter

Dept of SDKs and Frameworks 🧰

Matrix Rust SDK

bnjbvr reports

Two weeks of updates for the price of one, that's your lucky rusty day!

  • In the world of crypto-land, an important bugfix for multiple processes setups (as is the case for iOS applications handling notifications in a separate extension, wink wink ElementX iOS) has landed, which should result in fewer unable-to-decrypt (UTD) messages there.
  • It's now possible to get the preview of a room, using Client::get_room_preview(room_id). This uses the room state events at this point, but will soon support using the Room summary endpoint introduced in MSC3266 for this purpose. This is useful when displaying a screen for a room one hasn't joined, for instance.
  • A new Paginator API has been introduced as preliminary work to support deep links to events (aka "permalinks"), starting from a given event using a /context API request (for which support has been improved, by decrypting events, if needs be), followed by back-paginations and forward-paginations using the /messages API. Work is moving forward on having the UI Timeline natively support this too, introducing the new concept of a "detached" timeline mode that's centered around a single event.
  • The QR code login feature is moving along nicely, fully working end-to-end across two SDK toy programs.
  • And as usual, many new methods have been exposed to the FFI layer, bugs have been squashed (notably a few around sliding sync, notably one that caused missing chunks of messages in the ElementX apps), CI has been improved, and crabs have been revered.

Rory&::LibMatrix (.NET 8 matrix bot/client library/SDK)

Emma [it/its] reports

Not much to report on, been busy on BugMine :)

Additions

  • Starting steps of UIA
  • Ability to send HTTP requests without error handling (required for UIA)
  • Optional parameter useGeneric to HomeserverPRoviderService#GetAuthenticatedWithToken(homeserver, token, proxy? impersonatedMxid?, useGeneric?). This defaults to false.
  • Room#GetRelatedEventsAsync(eventid), returns all events that have a relation to another event

Changes

  • Room#GetEventAsync(eventid) no longer uses generic type, and returns StateEventResponse now.

And, as always:

  • The code is available at cgit.rory.gay!
    • All contributions are more than welcome, be it documentation, code, anything! Perhaps, example usecases, bots, ...?
  • Discussion, suggestions and ideas are welcome in #libmatrix:rory.gay (Space: #mru-space:rory.gay)
  • Got a cool project that you're working on and want to share, using LibMatrix? Be sure to let me know, I'd love to hear all about it!

Trixnity (website)

Multiplatform Kotlin SDK for developing Clients, Bots, Appservices and Servers

Benedict reports

Trixnity got a small bugfix release this week. It mainly fixes lazy key tracking, which is finally working and makes sync processing blazing fast again.

Matrix Dart SDK (website)

Matrix SDK written in pure Dart.

td reports

meep quick update, v0.26.0 and v0.27.0 released since the last post, here's a summary:

v0.27.0

  • Reworked how last event (used by clients for showing latest room events) is stored in the sdk. This will need a migration but should be handled automatically.
  • Switched suggested database to the new MatrixSdkDatabase.
  • Our auto generated matrix spec code (matrix_api_lite previously) now lives in the matrix dart sdk monorepo.

v0.26.0

This release adds a new state to the LoginState named softLoggedOut. Learn more about it here: https://spec.matrix.org/v1.9/client-server-api/#soft-logout

When a client is in a soft logout state, it is not yet cleared, but sync has stopped and it expects to perform a token refresh or a new login while providing the old device ID.

That's it, small note expect another breaking change soon our calls code will be merged in the near future :3 bye byee

libQuotient (website)

A Qt5 library to write cross-platform clients for Matrix

kitsune announces

Version 0.8.2 is out - the last significant 0.8.x update. Version 0.9 is already in the works, with a lot of material for it already in the pipeline, so expect the first alpha to come rather soon. From now on, Qt 5 will only be supported in 0.8.x branch - 0.9 will be Qt 6 only, and also require modern toolchains - with full-blown ranges support, elements of C++23 and all such.

Dept of Bots 🤖

Draupnir

Gnuxie 💜🐝 says

Draupnir dubiously released v2.0.0-beta.1 (proceed with caution).

Draupnir is a Matrix moderation bot and protection platform, with backwards compatibility with Mjolnir. If you are unfamiliar, you should checkout the latest stable release first.

The main change is a rewrite of the core to use MPS (the matrix-protection-suite, still pre-alpha). MPS's architectural differences should provide a noticeable improvement to Draupnir's responsiveness. A room state backing store has also been added to improve startup time for instances that run against slow servers or a large set of protected rooms, details are below.

What's Changed

  • Draupnir now uses MPS (matrix-protection-suite) to provide its core functionality.
  • Draupnir no longer requests components of room state when applying various actions, which should lead to a huge noticeable difference to Draupnir's responsiveness.
  • An optional RoomStateBackingStore has been added to improve startup time for instances that run against slow servers (e.g. matrix.org). Checkout the config description for it here.
  • New protections MemberBanSynchronisationProtection, ServerBanSynchronisationProtection, RedactionSynchronisationProtection, and PolicyChangeNotification.
    • These replace the core functionality for applying policies related to users, servers and redactions.
    • They will be enabled by default when you upgrade.
  • config.disableServerACL will disable the ServerBanSynchronisationProtection.
  • The joins, since, default, sync, protections status commands have all been removed for now.
  • The DetectFederationLag protection has been removed.
  • We have new contributing documentation.

Upgrade steps

There are no manual upgrade steps, the new protections are automatically enabled. The only thing you should note is that if you notice that Draupnir is slow to startup, then you should enable the room state backing store

⚠️ Some configuration options may no longer be functioning (alternatives are pending)

  • config.noop will do nothing.
  • config.protectedRooms will also do nothing, and protected rooms need to be configured using !draupnir rooms add/remove.

You can read the full set of changes here, and of course, you can find us in our support room #draupnir:matrix.org.

Dept of Interesting Projects 🛰️

BugMine

Emma [it/its] announces

Matrix-based issue/bug tracker, based on Rory&::LibMatrix

Existing issue trackers are closed-source, only work in combination with their own platform, or are complicated to set up. Let's fix all of those!

BugMine is a simple(ish) solution to that problem, by offering a simple to deploy solution that requires nothing but a matrix server (bring your own account), and a web server that can handle URI fallbacks for the web app (native clients are planned long-term). A CLI client is also planned long term, so you can do a similar level of integration to Github's CLI. There's also support planned for posting patches (commonly known as Pull Requests or Merge Requests). All functionality is provided in an easy to use SDK as well!

Keep in mind the project is still in a very early stage: we're still sketching out how we plan to handle issues/tickets! (And how to support any homeserver implementation besides Conduwuit...)

And, as with all of the other projects:

  • The code is available at cgit.rory.gay!
    • All contributions are more than welcome, be it documentation, code, anything! Perhaps, bots, custom front-ends, ...?
  • Discussion, suggestions and ideas are welcome in #bugmine:rory.gay

Matrix in the News 📰

HarHarLinks says

Fedora published a nice article about Matrix

https://fedoramagazine.org/fedora-chat-your-gateway-to-matrix/

Matrix Federation Stats

Aine announces

collected by MatrixRooms.info - an MRS instance by etke.cc

As of today, 9491 Matrix federateable servers have been discovered by matrixrooms.info, 2857 (30.1%) of them are publishing their rooms directory over federation. The published directories contain 160078 rooms.

Stats timeline is available on MatrixRooms.info/stats

How to add your server | How to remove your server

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.

Rank Hostname Median MS
1 doctoruwu.uk 262
2 spritsail.io 262
3 maunium.net 287
4 nerdhouse.io 300
5 girlboss.ceo 309
6 uwu.sulian.eu 318
7 catvibers.me 319
8 aguiarvieira.pt 424
9 rom4nik.pl 463
10 puppygock.gay 482

#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.

Rank Hostname Median MS
1 uwu.sulian.eu 117
2 doctoruwu.uk 119
3 girlboss.ceo 139.5
4 spritsail.io 163
5 aguiarvieira.pt 166
6 puppygock.gay 184.5
7 furry.lol 191
8 jpeg.city 207
9 nerdhouse.io 208.5
10 matrix.its-tps.fr 239

That's all I know ?~_~O~A

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