πMatrix Live S11E03 β Hookshot Modules
πDept of Status of Matrix π‘οΈ
Robin Riley (m.org) reports
This week we're thrilled to welcome Rocket.Chat as the newest Silver Member of the Foundation! We're grateful to say they are also sponsoring The Matrix Conference this year.
Does your organisation rely on Matrix? Please join Rocket.Chat and many others in providing financial support for the Foundation.
πDept of Spec π
TravisR announces
πMatrix 1.15 is here!
Matrix 1.15 is the latest release of the spec, bringing next-gen auth via OIDC, rich room topics, and room summaries to the ecosystem. All of these features have existed for quite a while in practice, but took a while to get through the final design and proposal stages. We're glad they're here though, and improving Matrix for everyone along the way.
Check out the blog post for more details.
πMSC highlight: Redact on ban
Typically when a user is banned for 'spam', a bot or human operator will go forth and redact pretty much everything that user has ever sent in the room, so why not make that happen automatically? MSC4293: Redact on ban does just that, and was put up for proposed final comment period (FCP) this week. At this stage in the process the Spec Core Team (SCT) will be giving it more thorough review with an aim of including it in a future version of the spec - if you haven't already reviewed it, now would be a great time π
Emma [it/its] says
no changes at all this week:
πMSC Status
New MSCs:
- There were no new MSCs this week.
MSCs in Final Comment Period:
- No MSCs are in FCP.
Accepted MSCs:
- No MSCs were accepted this week.
Closed MSCs:
- No MSCs were closed/rejected this week.
πDept of Servers π’
πcontinuwuity (website)
Continuwuity is a community-driven Matrix homeserver in Rust
nex (she/it) [Continuwuity] announces
Continuwuity 0.5.0-rc.6 release!
We're back! This time, with even more shiny things than last time. Jingle jingle.
A lot has happened between 0.5.0-rc.5 and 0.5.0-rc.6 (look at all those commits!), however, nobody wants a changelog in their newspaper. If you want to see a nice list of everything that changed, bob on over to the tagged release. Conveniently, binaries and deb packages are also there, baked specially for you! Because we're nice like that.
πA few things that might catch your eye
- π₯ Handling for the
knock_restricted
join rule has been drastically improved - joining these rooms after being invited is now fixed, and you will also automatically join a room when you meet the requirements, instead of having to knock.- π You can now use
CONTINUWUITY_
prefixed environment variables as well as the legacyCONDUWUIT_
andCONDUIT_
prefixes.- π The server-level ignore feature (defederations) has been split up into smaller options, giving you more granular control over how much ignoring you do.
- server-level ignores allow you to effectively defederate with other servers, as far as you can safely do on Matrix.
- Defederating a server no longer hides their messages from clients. This has been moved to a separate option. These events are still sent to appservices, though!
- An option to additionally send those events from defederated servers has been added (useful for moderation tooling like Draupnir). You still won't send outgoing events to these servers.
- πͺ If you use a client that lets you specify a reason when you leave a room, that reason is no longer silently dropped when federating the leave.
- π Added a shiny new welcome page at the index, replacing the previous "hewwo from conduwuit woof!" message with a warm, friendly looking, but most importantly, useful index page. You can see it in action here: https://matrix.continuwuity.org/
πWhat else?
That's all that I can reasonably fit in a list without your eyes wandering. Jingle jingle. We also squashed a host of bugs, found other ones, and gained some new proposals for our roadmap. Which, conveniently, is located on our forgejo.
In case you can't plug your cable into our forge, we've also got mirrors on Codeberg, and GitHub (please give us a β if you're liking the work!), along with other community mirrors. Speaking of community, you can reach us in #main:continuwuity.org, and find our other rooms (like our fairly active offtopic room) in #space:continuwuity.org. (P.S: If you joined the main room around the end of May, you may have been state reset due to a spam attack - consider leaving & rejoining), and our announcements room at #announcements:continuwuity.org.
We've got exciting new things coming, so be sure to stay tuned. I'll shout to the hilltops again next time we've got another release inbound, but until then, continuwu being awesome!
P.S. We're now listed on the matrix.org ecosystem page!
πDept of Clients π±
πFractal (website)
Matrix messaging app for GNOME written in Rust.
KΓ©vin Commaille reports
Hot! Hot! Hot! No, we are not talking about the summer weather in the northern hemisphere, but about the brand new release of Fractal 12.beta! Coming soon to your device:
- The safety setting to hide media previews in rooms is now synced between Matrix clients.
- We added another safety setting (which is also synced) to hide avatars in invites.
- A room can be marked as unread via the context menu in the sidebar.
- We changed the UX a little for tombstoned rooms. Instead of showing a banner at the top of the history, it now replaces the composer at the bottom of the history.
- You can now see if a section in the sidebar has any notifications or activity when it is collapsed.
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, there might be a slight risk of regressions, but it should be mostly stable. If all goes well the next step is the release candidate!
If you are wondering how to lower the temperature in your house, there is nothing cooler than fixing one of our newcomers issues!
πElement X Android (website)
Android Matrix messenger application using the Matrix Rust SDK and Jetpack Compose.
Jorge says
This week we published v25.06.3 as a stable version in the stores after a week of testing.
Some other stuff we worked on this week:
- Start working on supporting spaces βΌοΈ.
- Improving the Element Call integration with the Element X app βοΈ.
- Adding the zoom gesture to videos too in the media viewer πΌ.
- Simplifying the message composer layout, this should solve a few issues after the latest Compose version upgrade, but it may also introduce new regressions, we hope we caught most of them π€.
- Some more progress in making the app more accessible βΏοΈ.
And of course bug fixes and improvementsβ’.
πDept of Widgets π§©
π[matrix] element extension for starting BBB meetings (website)
Roland Alton announces
At this weeks #BigBlueButton world conference, educators and developers had shown approaches and tools for innovating online education with open source tools. BBB 3.0 got several improvements, e.g. a great whiteboard integration. fairkom is an active contributor and presented this year an extension for element web to launch a BBB meeting from a matrix room.
πmotivation
During the pandemic, many universities have built scalable video conferencing infrastructures with BBB or Jitsi. As matrix is gaining also attraction at those organisations, they are looking for ways how to combine both. BigBlueButton perfectly fits their needs when it comes to support education or integrate with LMS systems like Moodle. That said, many of those organisations are not ready yet to build another video conferencing infrastructure with Element Call and LiveKit.
πintegration variants
We have been testing several approaches, how to launch a BBB call from a matrix room, see our documentation here. As a PoC, we built a microservice, which you can run in a docker at the BBB server, that is handling the element extension. The roles of the participants are transferred from [matrix] to BBB. A deeper integration, that would offer to select at the video button other video conferencing services, turned out to be more complex and would require e.g. to adapt the format of the state key. So this is for future work - contributors or sponsors are welcome π.
πNeoBoard Widget (website)
Private and secure whiteboard for everyone
Mikhail Aheichyk announces
Hello TWIM! We are proud to announce exciting updates to our Matrix Widgets!
The NeoBoard Widget release v2.2.0 is ready. We were working on improving existing features but also implementing completely new ones!
πSticky notes
A new tool is now available to create sticky notes. Sticky notes behave like a regular rectangular shape but are adorned with a bottom drop shadow and a default size that is more adequate to taking notes and reminders.
πImproved UX for placing content
We have updated the behaviour around dragging and dropping and copying and pasting: your elements now appear centered at your cursor. In addition to our PDF import feature, which would replace all your slides with the PDF pages, we have now also extended the image uploading feature to also work with PDFs: use the upload button in the toolbar, drag and drop, or copy and paste your PDF on the canvas and start drawing!
πLines and arrows
Our arrows just got more flexible by added the ability to add arrow markers to both ends of your line, changing them, and flipping the arrow direction without having to redraw the line! In our last release, we announced the ability to connect shapes with lines and arrows, so that they would stay attached as shapes are moved. In this update we iterated on that, so it is not possible to easily connect lines to shapes from the start as you are creating the line. We have also made it easier to connect to connection points when there are several shapes close together or on top of each other. Finally, we squashed some bugs in relation to connection lines and copying elements, so your duplicated shapes stay attached to your copied lines!
Click this thumbnail to watch a screen recording of it in action in our release notes:
πWhat else?
This release includes also many other fixes and improvements, such as visual consistency of user avatar colors in different places and performance improvements for boards containing a lot of content! ποΈπ¨ The font selection introduced in the last update also introduced a bug in PDF export that was squished.
Read more and find all the details in our changelog over on GitHub!
πExperimental: MatrixRTC support
We are excited to announce a support for a new Realtime Communication (RTC) implementation:
MatrixRTC
that follows MSC4143 and uses LiveKit as the backend. ALiveKit
backend have to be configured in the homeserver.well-known/matrix/client
.If you are interested about in more details, please follow the ADR we wrote.
We are currently using
MatrixRTC
within our deployments and will continue to make the improvements. We would like you to try it and hear your feedback.πExperimental: Infinite canvas support
We worked hard during this release to add initial support for infinite canvas to the NeoBoard.
It is now possible to zoom in/out into the canvas using a separate tool bar, mouse wheel, touchpad gestures, CTRL+(plus or equal) / CTRL+minus shortcuts. Use mouse right click or trackpad to pan the whiteboard. The area viewport area is not limited to a small single slide anymore!
We have optimized some of the features on NeoBoard to work with infinite canvas: the upload drops images/pdfs to the cursor position on the viewport and positions the uploaded elements next to each other.
For infinite canvas, slides and presentation mode are explicitly disabled.
We would like you to try it out and hear your feedback. We will continue to improve this mode. We currently advise you to use this mode in a fresh room without existing whiteboard.
To enable experimental features please check the docs.
πNeoChoice Widget (website)
Conduct advanced polls in Matrix rooms.
Mikhail Aheichyk says
The NeoChoice release v1.5.2 is ready.
We have updated the dependencies in this technical release.
πNeoDateFix Widget (website)
A solution to organizing meetings in Matrix chat rooms and video conferences.
Mikhail Aheichyk reports
The NeoDateFix release v1.7.1 is ready.
The project has been upgraded to React 18, Vite and Vitest. This update brings a significant change in the development toolchain, moving away from Create React App (CRA) and Jest.
Additionally, a Software Bill of Materials (SBOM) report has been added to the project's widget, build, and release assets.
πNeoDateFix Bot (website)
Companion service to NeoDateFix Widget.
Mikhail Aheichyk announces
The NeoDateFix Bot release v2.8.3 is ready.
A Software Bill of Materials (SBOM) report has been added to the project's build, and release assets.
If you have any questions or feedback, please reach out to us using our public room ο»Ώ#nordeck:nordeck.io.
πDept of SDKs and Frameworks π§°
πRory&::LibMatrix (website)
.NET 9 matrix bot/client library/SDK
Emma [it/its] says
Good news everyone! Relatively small step in code, big step for the community
What's new/changed?
- LibMatrix now has experimental support for Federation through an extension SDK (LibMatrix.Federation)!
- Note: this does not (yet) include all the necessary tools to write a homeserver
- Support for fetching and verifying server keys has been introduced (we're passing federation tester!)
- Support for reading and writing federation authentication headers (confirmed working with synapse!)
Near term goals:
- Writing a simple proxy for the policy server endpoint to allow users to implement that without dealing with federation
- Writing an actual policy server later :)
And, as always:
- The code is available at cgit.rory.gay (or Github - read only, may be outdated)!
- 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 us know, we'd love to hear all about it!
πmatrix-rust-sdk (website)
Your all-in-one toolkit for creating Matrix clients with Rust, from simple bots to full-featured apps, with bindings to Swift, Kotlin, WebAssembly, Go and more
Ivan π¦ announces
Hello in the wonderful world of Matrix Rust SDK where multiple things are happening simultaneously. It's hard to keep track of everything. I've tried to summarise the recent contributions, please don't feel offended if your great and valuable work isn't listed hereinbelow.
πWebAssembly
The work around WebAssembly is twofold at the moment.
First off: the
EventCacheStore
trait. Right now, it is implemented inmatrix-sdk-sqlite
, it means there is an implementation of the Event Cache store for SQLite. However, the implementation for IndexedDB is missing, and under implementation. This is really important to use the Event Cache on a JavaScript host.
- #5226 All the data that enter or leave IndexedDB must be serialised. These patches contain all the logic to serialise and deserialise all the data that matter.
- #5274 Add the transaction functionality, which is the prerequisite to start querying this store. The next patches are likely to contain the real queries, exciting!
Second, the work of making
matrix-sdk-ffi
available on WebAssembly (strictly thewasm32-unknown-unknown
target) continues. There are multiple patches here and there, nonetheless all of them are important and every time a new step in the right direction. The most notable ones are:
- #5266 When initialising the platform, we now skip Tokio for WebAssembly, and errors are redirected to
console.log
for JavaScript.- #5248 The network configuration on the
ClientBuilder
has been removed, as the manipulated underlying types aren't present onwasm32-unknown-unknow
(they might be present onwasm32-wasi
but this target isn't a priority for the moment).- #5240 A conversion between a JavaScript number to another Rust integer types is now fixed.
- #5211 The
js
feature flag has been added. It's going to be even more useful in a close future where we are also introducing a newreact-native
feature flag.All the other contributions: #5270, #5265, #5264, #5263, #5262, #5256, #5249, #5242, #5231, #5217. The idea isn't to write a changelog but rather to give you an idea of all the subtle changes made here and there to provide you this really cool ability to run the
matrix-sdk-ffi
crate on WebAssembly!πTimeline and Event Cache
The Timeline is heavily relying on the Event Cache. We are all humans, and bugs happen. And sometimes new features too.
- #5271 The Timeline has a lazy-pagination. It means that if the Event Cache sends 100_000Β new events to the Timeline, the Timeline will only render 20Β of them at a time. Why? For performance reason. Each new Timeline item generates computations, and ultimately ends up sending a message onto an application, so it will, at some point, cross the FFI layer. Reducing the number of data crossing the FFI boundary is a good idea. That's why the Timeline has a lazy-pagination mechanism (see #4594) to learn more, it involves the
Skip
higher-order stream, it's pretty fun!). However, the Event Cache has also its own pagination mechanism, which includes its own pagination status. This pagination status was shared to the Timeline, without taking into account the lazy-pagination of the Timeline, resulting in wrong status and weird Timeline behaviours. This bug is now fixed, phew.- #5247 The Event Cache is cut into
RoomEventCache
s. As a user, it is possible to subscribe to each of them, and then start receivingRoomEventCacheUpdate
. It's super nice. However, what happens when one wants to subscribe to many rooms, only to get an idea of which room has been updated, regardless of the update details? It starts creating complications. It involves quite non-trivial async runtime optimisations to be efficient. That's why the newEventCache::subscribe_to_room_generic_update
will generateRoomEventCacheGenericUpdate
: subscribe once, get generic update for all rooms. This works was necessary for the newLatestEvents
API being shape.πWidget
The Widget API has been improved mostly for ElementΒ Call:
- #5286 The
m.room.name
state event is now fetched, allowing widget embedders to know the room name,- #5283 A widget can now receive a header configuration. Not to be confused with the HTTP header, this is purely an interface configuration.
πEncryption
Encryption is a serious topic. It receives its batches of novelties:
- #5116 A widget can be embedded in an encrypted room. When it happens, clearing the to-device traffic isn't allowed. The number of to-device events a widget can receive has also been adjusted.
- #5257 In the same vain of the previous item, a widget receives βshrunkβ to-device events with fewer information.
- #5276 The MSC4268 defines room key bundles. A new store has been created in
matrix-sdk-indexeddb
to store them.- #5288 In the same vain of the previous item, the
OlmMachine
's store provides a newhistoric_room_key_stream
method to get a stream of room key bundles.πRoom List
#4741 The Room List Service is using Sliding Sync to synchronize all the data. Sliding Sync is session-based, i.e. the first response receives from the server by the client contains a
pos
opaque value (for position). Each subsequent request must precise thispos
value, it's a way to tell the server eh, we already have this session opened! let's reuse this state. So far, thispos
wasn't persistent (well, actually, it was, but partially), i.e. when the Matrix Rust SDK was shutdown and restarted, the first sliding sync request made by the Room List Service wasn't containing apos
, and thus the server was restarting a new session. This is now a thing of the past. The impact is quite important. For large accounts, it means faster start up time, smaller network requests (notably saving the account data, fewer invites, faster encryption loop), and so on. On a very large account, it is approximately 20Β times faster! We are still measuring the impact on the server, but it should save quite a noticeable amount of resources as the server no longer need to throw away a session to start another one.πNotification
#5277 The notification client wasn't configuring the
m.room.join_rules
correctly, resulting in all rooms being displayed as public.πCode coverage
#5244 This one is important for the contributors. We have switched from
tarpaulin
tollvm-cov
. In order to measure the code coverage, the Matrix Rust SDK binary is instrumented to add βprobesβ. Withtarpaulin
, we were being hit by segmentation faults more and more frequently, until a point it was almost constant. We were sometimes forced to change our code just to avoid these segfaults introduced bytarpaulin
. Well, now we are usingllvm-cov
. It's also faster to run in the CI. One stone, two computers.Funnily, because the code coverage calculation for the instruction code coverage criteria is a bit different, we have a higher score! At the time of writing, we have crossed 90%!
That's all for today, happy coding!
πDept of Ops π
MTRNord (they/them) announces
πYet another federation tester - But different?
Hi everyone. I had some weekend time to finally dive into the federation tester. Since I can't really code go though, I decided to just redo it in rust but with some open issues and personal issues fixed in it. That leads (among other things) to some changes to the JSON schema (mainly well-known, being explicitly asked on all IPs and not just one)
While this might not be yet 100% bug compatible it seems to at least work with all the working servers just fine.
You can find it and more information at https://github.com/MTRNord/rust-federation-tester.
Of course, that lead me to the UI not working with this anymore. As a result, I also wrote a new UI for this.
The source is also available but at https://github.com/MTRNord/matrix-connection-tester-ui instead.
Finally, I host an instance at https://connectivity-tester.mtrnord.blog/
Please report any bugs you find via github :)
πDept of Bots π€
πflip-matrix-bot (website)
A Matrix bot for the Friendly Linux Players community.
HER0 reports
After a long break from big changes, the bot received the ability to join successor rooms at startup in the event of a room upgrade, and to look back at the predecessor room when new members join the room. This means that the greeting message will appropriately change to the shorter "welcome back" one, instead of the standard longer one after existing members join an upgraded room.
πDept of Events and Talks π£οΈ
πMatrix Conference (website)
HarHarLinks says
The Matrix Conference's Call for Proposals is open until the end of June. That's Monday, 23:59 CEST aka Europe/Paris time! We already have very strong proposals, but don't miss your chance to let the world know about your project!
The ticket (and merch!) store is open!
- ποΈ Tickets for in-person attendance can be bought here! Also get your conference-exclusive merch with your ticket!
- π₯° Foundation members get a free ticket (see details in the store to get your voucher)
- πͺ Join as a volunteer to get a free ticket and conference team zipper!
- π Businesses are expected to purchase a Business Ticket
- π Sponsors get free business tickets in their package!
πMatrix in the News π°
networkException reports
Following this TWIM post from last week with media covering a project to establish Matrix as a common basis for communication in Germany, the German IT Planning Council now decided on this project. It aims to replace a variety of existing inbox and communication solutions with this unified system based on Matrix and MLS! You can find the press release here.
You can read more about it in a follow up article on heise.de (in German and with a Paywall) as well as on the project overview page containing the architecture decision record for Matrix (also in German).
This might sound familiar if you watched the Matrix in the Public Sector talk at last year's Matrix Conference or saw this TWIM post in January, however these mainly concern a different project building an actual solution for the government to communicate with citizens, rather than than looking at the bigger picture. All details about that project, including documents for the open source tender can be found on the project's dedicated page (more German π).
For context, the German Federal IT Architecture Board (FIT-AB) together with various agencies is looking at the technology from different angles, with first project now decided on being the high level architecture and vision and the second project to evaluate various technical details as a prototype and getting this system in people's hands
πMatrix Federation Stats
Aine [away] says
πMatrix Federation Stats
collected by MatrixRooms.info - an MRS instance by etke.cc
As of today,
13083
Matrix federateable servers have been discovered by matrixrooms.info,3765
(28.8%
) of them are publishing their rooms directory over federation. The published directories contain18836
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 | tuwunel.love | 165.5 |
2 | continuwuity.codestorm.net | 188 |
3 | codestorm.net | 206 |
4 | continuwuity.org | 253 |
5 | haise.uk | 295 |
6 | synamat3041.hashc.io | 329 |
7 | nexy7574.co.uk | 360.5 |
8 | wolfspyre.io | 402 |
9 | nplusc.de | 429 |
10 | rom4nik.pl | 431 |
πThat's all I know
See you next week, and be sure to stop by #twim:matrix.org with your updates!
To learn more about how to prepare an entry for TWIM check out the TWIM guide.
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