30 KiB
+++ 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 couldn’t tell, there’s 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 week’s 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:
- MSC4133: Extending User Profile API with Key:Value Pairs
- MSC4132: Deprecate Linking to an Event Against a Room Alias
- MSC4131: Handling
m.room.encryption
eventsMSCs in Final Comment Period:
Accepted MSCs:
- MSC2870: Protect server ACLs from redaction
- MSC2191: Markup for mathematical messages
- MSC1692: Terms of service at registration
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 pressC-g
to choose a different one with a key bound inement-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 inwhich-key
and similar. (Thanks to Phil Sainty.)- Option:
ement-room-use-variable-pitch
(previously namedement-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 theement-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 whenement-room-compose-buffer-window-auto-height
is enabled.- Option
ement-room-compose-buffer-window-auto-height-max
specifies the maximum window height whenement-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 chosenement-room-compose-method
. (Bound toRET
in room buffers.)- Command
ement-room-dispatch-new-message-alt
starts writing a new message using the alternative method. (Bound toM-RET
in room buffers.)- Command
ement-room-dispatch-edit-message
edits a message using your chosenement-room-compose-method
. (Bound to<insert>
in room buffers.)- Command
ement-room-dispatch-reply-to-message
replies to a message using your chosenement-room-compose-method
. (Bound toS-<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 toC-x C-s
in compose buffers.)- Command
ement-room-compose-abort
kills the compose buffer and delete its window. (Bound toC-c C-k
in compose buffers.)- Command
ement-room-compose-abort-no-history
does the same without adding toement-room-message-history
. (Equivalent toC-u C-c C-k
.)- Command
ement-room-compose-history-prev-message
cycles backwards throughement-room-message-history
. (Bound toM-p
in compose buffers.)- Command
ement-room-compose-history-next-message
cycles forwards throughement-room-message-history
. (Bound toM-n
in compose buffers.)- Command
ement-room-compose-history-isearch-backward
initiates an isearch throughement-room-message-history
. (Bound toM-r
in compose buffers; continue searching withC-r
orC-s
.)- Command
ement-room-compose-history-isearch-backward-regexp
initiates a regexp isearch throughement-room-message-history
. (Bound toC-M-r
in compose buffers; continue searching withC-r
orC-s
.)ement-room-self-insert-mode
- Option
ement-room-self-insert-commands
determines which commands will start a new message whenement-room-self-insert-mode
is enabled (defaulting toself-insert-command
andyank
).- Option
ement-room-self-insert-chars
determines which typed characters will start a new message whenement-room-self-insert-mode
is enabled (regardless of whether they are bound toself-insert-command
).- Option
ement-room-mode-map-prefix-key
defines a prefix key for accessing the fullement-room-mode-map
whenement-room-self-insert-mode
is enabled. (By default this key isDEL
.)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 you’re 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 (we’re 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 you’re 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 UITimeline
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
toHomeserverPRoviderService#GetAuthenticatedWithToken(homeserver, token, proxy? impersonatedMxid?, useGeneric?)
. This defaults tofalse
.Room#GetRelatedEventsAsync(eventid)
, returns all events that have a relation to another eventChanges
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
, andPolicyChangeNotification
.
- 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 theServerBanSynchronisationProtection
.- 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 contain160078
rooms.Stats timeline is available on MatrixRooms.info/stats
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!