Hello, it's me! Nico!
You may have read the year-in review I collected in 2022 and you might have been wondering if there would be another one in 2023. Well, yes and no! I clearly promised to do one, but also 2023 was just waaaaay busier than 2022. And it wouldn't be Matrix if you didn't promise something and then deliver it late!
Anyway, here we are, a small collection of what happened in the Matrix community in 2023. This will be incomplete, since I didn't reach everyone and not everyone has time to write something about their project. So if you are impressed by these updates, then just imaginge how much more still happened, that we didn't cover! And if you still have something to add, don't hesitate to ping me directly in #year-in-2023:neko.dev and I will see if I can add it still.
But now I waffled on enough, let's hand it over to people who actually did stuff!
Every day you send events on matrix, thousands of them! But did you know there are events you can send yourself to? Crazy, right?
Those events are where stuff actually happens! They are the places you learn that people actually are not the 2d drawing they have as their avatar, but actually do breathe and sometimes even talk. It shows us that there is actually a world outside of Matrix and sometimes it even allows us to get things done, that we never would have managed to do online. Sometimes even Matrix related.
HarHarLinks is probably one of the people involved with most of the Matrix events and they gave us a summary of most of the events which happened last year. Let's listen to them and maybe you will even join us on any of these events next year?
Matrix has been present at multiple conferences already, FOSDEM being perhaps the most prominent one. There are also some community events happening regularly, such as the multi-year effort at FrOSCon or monthly meetups in Berlin which culminated in the 2022 Matrix Community Summit.
But enough about the distant past! The lifting of travel restrictions in 2023 allowed some events to resume their in-person operations and folks have been very enthusiastic about meeting up, so naturally there were a lot of events this year I want to tell you about so you don't miss them in 2024!
FOSDEM 2023 🇧🇪
I mentioned in the introduction already, you can safely bet Matrix will be represented at FOSDEM for multiple years now. After hosting it on a Matrix + Element platform during the pandemic, FOSDEM returned to Brussels 🇧🇪 in February 2023 with a booth on the floor and for the first time also its own "Developer Room" where The Matrix Foundation hosted talks from multiple community members about their projects, half of the day taking place in presence with live streaming and the other half purely remote, digitally, and online.
FOSDEM is perhaps the biggest Open Source Conference in Europe and the Matrix community has a large interest in it. Because it attracts so many people, it is common for several communities to organize their own events in Brussels 🇧🇪 during the days preceding or following FOSDEM itself. FOSDEM calls these "Fringe" events.
Inspired by the huge success of the Matrix Community Summit 2022, a group around the organization crew came together again in time to plan a Matrix Fringe event at FOSDEM, and so the Matrix Community Meetup was born on the Friday afternoon before FOSDEM. We were lucky to have found the local Hackerspace Brussels (HSBXL) very welcoming and are very grateful to them for providing the location as well as lots of other infrastructure to us.
The afternoon was organized using the BarCamp framework to collect topics and set up sessions - there were loads of discussions, old and online friends (re-)connecting and new friendships being forged.
Thanks to the generous sponsorship through Matrix companies Famedly and Nordeck we were even able to provide free-as-in-beer food 🍕 and drinks 🍻 to everyone at the event.
If you want to read more about it, find even more detailed coverage in the TWIM post about the event.
Also, please read on below to learn about FOSDEM 2024 and any Community Meetups potentially happening there!
GPN is short for Gulaschprogrammiernacht, which is a hacker meetup night grown into a conference, nowadays encompassing more than a whole weekend rivaling CCC's Congress, taking place in June and organized by the Entropia hackerspace in Karlsruhe 🇩🇪. While a Matrix community presence was - to my knowledge - not formally organized, there were multiple talks and workshops from community members M, weeman, anoa, and networkexception:
- Deutschland in der matrix - Digitale Souveränität durch dezentrale Kommunikation
- An Introduction to Matrix
- Solving the Historical State Problem
- Coached Hacking: Your First Matrix Bot
Video recordings are available through media.ccc.de.
Watch this space for any announcements about a potential more formal Matrix presence in 2024!
FrOSCon 2023 🇩🇪
FrOSCon in Sankt Augustin near Bonn 🇩🇪 has had a presence from the Matrix Community for several years now, driven by the continued efforts of Oleg. The effort took its next bigger step in August 2023 as more community members joined in to support Oleg and enabled the biggest Matrix presence there yet, with a booth on the floor to answer questions and distribute Matrix merch and the community devroom with enough program(ming) to fill both days despite a high level of spontaneity. On top, weeman even gave a talk on one of the main stages.
Thanks to the support from gnom with equipment from CCC FFM we were able to record the talks in the devroom and
are working to publish them soonthey are now published on the Matrix.org YouTube channel.
Read more about it in the TWIM post and see you there in 2024!
The Chaos Computer Club hosts the Chaos Communication Camp every four years. Special interest groups such as the Matrix community have the opportunity to gather in a "village" where they are reachable and can hold workshops, talks and more.
More than a dozen Matrix nerds from around the world got together and enjoyed the great August weather in the burning Brandenburg 🇩🇪 sun in the camp-adjacent lakes during day and incredible light shows at night, not to mention loads of presentations and other program on the several stages scattered across the camping grounds.
The Matrix village was attached to c-base who provided some backing infrastructure to us for which we are very grateful as it made some of the setup pretty convenient.
Events at the village included a daily help desk for any questions people might have, another edition of the Coached Matrix Bot Hacking workshop by weeman, and a Demo of the Matrix bridge to Qaul, a fully p2p messenger.
The Chaospost delivered multiple post cards to us that sadly could not be decrypted (see TWIM) and Hookshot gained an experimental extension to bridge sending to Chaospost.
Also worth mentioning, the crew organized the first implementation of MSC2997 to commemorate the event, which have appeared multiple times now on TWIM and even Matrix Live.
The Matrix Community Summit was brought to existence by a small group based in Berlin 🇩🇪 in the end of August 2022 after continued demand whether it would be "worth traveling to the monthly Matrix User Meetup Berlin" to meet the community in-person at c-base. It was a huge success with attendees across continents and programming to fill three stages over the course of two days plus a BarCamp to warm up on the preceding day and an open day to cool down.
Thanks to the huge popularity, the event was able to again take place in 2023, with again lots of attendees from all over.
Through voluntary ticket sales as well as specific sponsorships, it was possible to provide drinks, a small all-day buffet and dinner for everyone.
Additionally, thanks to the Media Sponsors and with lots of support through the c-base video crew, it was possible to stream and record the talks on the main stage to the Matrix.org YouTube channel this time.
The event also saw some new merch, jumping from one design in the last year to four distinct designs available for this edition, including a new and improved MSC2997 edition.
37C3 is the 37th edition of the (usually, unless a pandemic or similar shakes the world) yearly Chaos Communication Congress hosted by the Chaos Computer Club, taking place "between the years" from 27th through 30th December (not counting buildup and teardown). The CCC being active with many local hackerspaces all over Germany, Congress is one of the biggest hacker meetings around the globe.
Continuing from Camp during summer, the Matrix community again also gathers here as I write this post from the Matrix Community Assembly set up in Hall H at Congress Centrum Hamburg 🇩🇪. Assemblies are the equivalent to Villages from Camp, and the Matrix Community Assembly is again being set up with a lot of support from the lovely c-base.
Between the innumerable amount of projects being presented, we had some fun with projects on our own and hosting a couple events:
- Nadine gave an update on her Polychat project on the Self-organized Sessions stage H
- Hosting Matrix on Kubernetes
- Hookshot installation party
- Pimp Your Chat
- We added support to an automated beer tap to trigger beer pouring through a Matrix bot command
- There is now a POC to connect the
POClocal DECT + SIP + GSM setup to Matrix, allowing calls into your call-enabled Matrix client (to be open-sourced)
- Daily tech support around the clock for Matrix-related questions
- Merch & Sticker distribution
Of course we had many visitors as well, discussing topics such as Matrix in the German and international public sector from the techie-side, homeserver implementations and the impact of open source licenses for different groups, requests for additional protocol features, and general user and admin support.
Preview: FOSDEM 2024 Matrix Foundation & Community Meetup 🇧🇪
Remember when at the top I asked you to continue reading until the end?
FOSDEM is happening again on 3 & 4 February 2024 with The Matrix Foundation hosting yet another devroom and stand and so naturally we will also have another meetup in Brussels 🇧🇪!
The Matrix Foundation and Community Meetup as the name suggests is the community effort growing more official thanks to backing by the Foundation this time around and will again start on Friday before FOSDEM. Like last time, it will be hosted in the HSBXL rooms.
Join #fosdem2024-foundation-community-meetup:matrix.org to stay updated and join the fun. Read more in the previous TWIM announcement, and watch the announcement on Matrix Live in case you missed it before.
HarHarLinks wasn't the only one heavily involved into Matrix related events though. Oleg is probably THE person to talk to, if you are interested in FrOSCon and as such they obviously had a very in depth update on their blog, that I am lucky enough to be allowed to reshare:
Last weekend (August 5-6), the Free and Open Source Conference took place at the University of applied Sciences Bonn Rhine Sieg.
We had an awesome time and it was great to see everybody in person!
There were a lot of spontaneous amendments to our programme, including a presentation streamed through Element Call! We thank everybody involved:
- Our own devroom VOC team, thanks to whom we
will beare able to provide video recordings of most sessions for anyone who could not attend in person! Slides are already mostly available and videos will be as soon️™️ as they are ready, watch this space!e!are now available on the Matrix.org YouTube Channel.
- Everybody answering questions and selling
[matrix]merch at the stand!
- The whole FrOSCon crew for allowing us to be a part of this event!
- Of course, all of the speakers and presenters involved!
- Last but not least, everybody attending!
Join us in our FrOSCon Matrix room for discussion and see you next time: #FrOSCon:fiksel.info
Clients, Clients, Clients
Now, nobody interacts with other Matrix people in real life and I believe all of the above events are actually just a lie. The thing we actually interact with people obviously are our Matrix clients! And we sure have plenty of them, so let's see what those were up to!
Matrix messaging app for GNOME written in Rust. ↗
Kévin Commaille contributes
The fourth quarter saw the release of Fractal 5, which in itself was already a significant milestone.
More importantly, 2023 is where things took off. We were finally able to make regular releases again. We started a full rewrite in March 2021, and that meant that for a long time the software was not ready to use, even for people willing to live on the bleeding edge and accept the lack of polish.
We reached a turning point in May 2023, more than two years after the endeavour started, when we published our first beta for that branch. Another one came out three months later. And then our Release Candidate three more months later.
We managed to build momentum, and we’re keeping a steady pace with Fractal 6 on its way for a late January 2024 release. We won’t be putting out stable releases every other month in the long term, but we are definitely happy with the solid foundations we laid and intend to stay on that path with several stable versions per year.
E2E encrypted social networking built on Matrix. Safe, private sharing for your friends, family, and community. ↗
2023 was a big year for Circles! After 18 months of intensive development, we finally re-launched our public beta on iOS in August. The new Circles iOS is re-built from the ground up on our own homegrown native Swift SDK, Matrix.swift.
Matrix.swift completely replaces the old matrix-ios-sdk for us. At around 17k lines of code, it makes up over half of the Circles iOS codebase. Matrix.swift makes extensive use of Swift concurrency with the
async/awaitpattern. It includes support for authentication, creating rooms, sending messages, E2E encryption (using the Matrix Rust Crypto SDK), secret storage, key backup, and most of the other basic functions that a Matrix client needs to perform. Matrix.swift is available on Github under the liberal Apache 2.0 license, and is ready for use in hobby projects and other open source programs. If you'd like to try it out, stop by #matrix.swift:futo.org and say hi.
With a solid foundation to build on, we spent the Fall of 2023 adding new features that were never available on Circles iOS before. These include: support for posting and playing
m.videomessages; bulk upload of media in photo galleries; using QR codes and knocking to share and join rooms; support for editing posts; and support for replies to top-level posts using the
On Circles Android, we made some important changes, too, but they are less visible. We re-worked our secret storage implementation to be more compatible with other clients like Element. Then, following in the footsteps of Element R, we switched over to use the Matrix Rust Crypto SDK instead of the legacy Android implementation. We also added Fastlane metadata to help the app look better on our F-Droid repo, and to help prepare for inclusion in the main repo on f-droid.org.
On both platforms, we made some major changes to the "People" tab to make it easier to find and connect with your people. The People tab now shows who you're following, who's following you, and all the friends of your friends.
The Circles team also made some behind-the-scenes contributions to the Matrix rust ecosystem, including a first prototype of MSC3917 Cryptographically Constrained Room Membership and an implementation of MSC3061 Sharing Room Keys for Past Messages. Although neither of these contributions has been merged upstream at this
time, we are using the MSC3061 code in Circles on both Android and iOS. This has been one of our first benefits from using a unified crypto implementation on both platforms. (Also I should mention that our experience with the Matrix Rust Crypto SDK has been excellent all around. Kudos to the Rust team for their hard work!)
As of December 2023, Circles was almost ready to launch version 1.0 in the App Store, the Play Store, and the main F-Droid repo. We're looking forward to seeing what 2024 will bring. You can find us in #circles:futo.org (aka #circles:matrix.org) and check out our code at https://gitlab.futo.org/circles.
Desktop client for Matrix using Qt and C++20. ↗
Nico throws in
2023 was in some ways quite the short year for Nheko. If you have been following along, you will notice our last release was actually in February! Usually the gap between new releases is rarely longer than 8 months, so what happened? Well, lots of things, so let's go over them one by one!
First of all regarding personal stuff, I decided to drop out of university and focus on my job at Famedly for now. This took me quite some time to make a decision on, but I do think it is for the best and I do really want the German healthcare system to have a proper messenger. Maybe just so that my mum has one software she doesn't have to complain about though! Obviously that means I focus on work more now, which can be quite exhausting as well, but the biggest factor is probably that I spend my whole week coding Matrix stuff now. So while working on Nheko was always something I did to avoid work, it now is actually quite close to what I do at my workplace and I have reduced how much time I put into Nheko in my free time now. As such you may have seen me take a bit longer to get back at your open pull request. I hope it isn't too bad, but I do try to get to it eventually at least! In general I still did hundreds of commits on Nheko last year, so it is not like I reduced the amount of time I put into Nheko as much... However if you want to contribute, please go ahead, maybe you will be the being to take some of the time required for reviews off my shoulders eventually!
Another thing taking my time have been various Matrix related projects though. Moderation takes as much time as ever, if not more. And there have been several events this year, that for the first time I felt like I could afford to spend the time to attend! While I did join the Matrix Community Summit in 2022, I did also do that this year, next to FOSDEM, the Chaos Communication Camp as well as Congress and taking the opportunity to hike across the alps as well as travel with coworkers and friends! I have genuinely enjoyed myself and had a lot of new experiences, so if you think I have been spending my time doing the wrong things, most certainly that is not the case!
Apart from that it also turned out, that there are fewer things we have to add to Nheko at this point, so a lot of the work ends up being polishing weird edge cases, that take a lot of effort or working on other things in the ecosystem. Like you remember when you couldn't unban users from your room, because they were the only user from that server? Turns out that was just an issue with Synapse and the local state on the banned server. The issue for that had been open for years and was deemed very complicated to fix, but it turned out to be a very small change of a few lines and lots of changes to indentation. Similarly Synapse just started eating my CPU some day, which again turned out to be a rather simple issue, that however took a while to track down. But in the end you can't just make a client, you do need to also have a server you can rely on. Currently that is still Synapse for me, so making it more reliable also improves the experience you have using Nheko with it. However maybe 2024 is the year to change this! Maybe in the end of 2024 we will all be talking about other homeservers like Conduit or a server I don't know about yet!
Now I spent quite a bit of time talking about myself and finding excuses, why you haven't seen a Nheko release yet... But it turns out none of that is the actual reason. Mid 2023 we actually started porting to Qt6 and after just a few days we had a running version of Nheko using Qt6. However as with every migration or rewrite, the devil is in the details and we didn't feel confident releasing Nheko in that state. There were lots of subtle, but annoying new bugs. Quite a few layouting issues that lead to us completely rethinking how we render events in the timeline. The call integration needed quite a bit of work to work reliably and Qt6 brought a lot of new opportunities as well to fix old bugs!
You used to have to restart Nheko after ending a call on Wayland and opening Nheko would not move the window to the foreground. We added terrible workarounds to fix that, but they do work and just that tiny change makes me excited to do a new release! However emojis in Qt are as annoying as ever, but I did at least "fix" that you couldn't start a numbered list with an arbitrary number in Qt and that has finally been released in Qt6.6! We also got to optimize quite a lot of things and imo Nheko is snappier than it has ever been. There have been a few hundred cleanups and improvements in every corner and that is what really excites me!
But probably that is not what you are here for, huh? So what can you expect in a new release that hopefully should be out early 2024? Well, you can actually screenshare on Wayland now, you can ignore users and change the history visibility. You can also now automatically expire events, see what rooms you share with someone else, copy images directly to the clipboard, there is an option to have Nheko automatically update on Windows, delete sticker packs (instead of just creating them), report messages to your homeserver admin, set your own presence (instead of just a status message), order your room list alphabetically and probably lots more. Most of the existing stuff has actually been contributed by other people then the core team, which is quite exciting!
There have been over 800 commits last year and more than 600 since the last release alone. But a significant chunk of that has simply been improving existing features, so don't be too sad your favourite feature isn't there yet. Once the Qt6 release is finally out, we will have a much more stable foundation to build on and add new and shiny features!
The last blocker for that is probably the ecosystem. Currently Qt6 theming is still very rough and as such you will not have the pretty buttons you are used to from your desktop environment. Similalry the flatpak runtimes currently only exist for plain Qt6, but you may want to have the wide image format support, that the KDE runtime usually brings. As such I can't quite predict when the release will be, but at this point I am quite happy with the state Nheko is in, so once the ecosystem is there, it should happen quite quickly!
Anyway, this is the short review I can give for 2023. Lots of talk about me, but if you have met me before, that shouldn't suprise you! But I do think 2023 was quite an awesome year for Nheko, even if it might look boring to you. Apart from that we also have a fediverse presence via https://nheko.io and you can, as always, join the Nheko room if you want to chat! And if you have any feature you really want to implement, come and poke us and we'll help you to get it done! That's it for now and see you next year (or next week in TWIM)!
The free and open-source Matrix powerclient for Linux ↗
Does anyone remember the Moment client, a "maintained fork of Mirage"?
It's starting to get maintained again! We're keeping compatibility with our dependencies, and working on adding a couple things that we really miss in this client:
- ⭐ Emoji reactions will be displayed; and eventually you'll be able to add reactions yourself
- 🖉 Message edits will be displayed as you would expect, instead of displaying the whole message multiple times
Looking forward to a release at the start of 2024, which is 2 years after the previous release!
A client for matrix, the decentralized communication protocol ↗
Tobias Fella mentions
Apparently it's been 12 months already since I've last written one of these, so it's time to go through the git log again.
Overall, a lot has happened this year. I'm not going to list all of the bugfixes, improvements, and visual changes that were done, since this would easily fill a few blog posts on its own. Some of the highlights of this year's development are:
- Push notification support, based on UnifiedPush and KDE's KUnifiedPush library, was implemented by Joshua.
- With Element's notification list nowhere to be found, I've added one to NeoChat.
- Drastically improved spaces support: James implemented support for all Space creation, joining, viewing, and management needs.
- Login handling has been completely reworked by me. This fixed some issues that caused users on some servers to be unable to login.
- As part of the login improvements, we finally support in-app account registration.
- James added a list of images and videos to the room's sidebar.
- Extended support for custom emojis and stickers. It's now possible to send stickers and edit packs.
- Added controls for video playback.
- James added a menu for formatting messages in the chat bar.
- NeoChat now show other user's read markers.
- It also supports showing link previews now.
A lot has also changed on the release front. Since version 23.04, NeoChat is released as part of KDE Gear, together with a huge number of other apps. This synchronized release schedule allows for easier dependency handling and allows us to spend our time doing other things than releases.
Thanks to work on KDE's CI and release/packaging infrastructure done by Ingo and a few other people, NeoChat is now available on the windows store. This work also brings us nice things like android APKs, Windows installers, and flatpak builds for merge requests, making it far easier to develop for those platforms.
On the technical side, a lot of time was spent in the last years on the transition from Qt5 to Qt6. As a result of this, the next version of NeoChat (to be released in february 2024) will be based on Qt6. To users, this should not be a noticable transition - everything will work just like it used to. For us developers, this brought some nice improvements. One nice thing this brings to users is the ability to use a dark color scheme on android; finally, one of our most requested features is implemented and people can stop bothering me about it :)
Thanks to Volker, we were finally able to land support for sending and viewing location evnets. This is made possible due to OpenStreetMap allowing us to use their tile server. Volker also implemented support for showing live locations as per MSC3672. We're even making use of a custom extension of this, which shows the direction that the other user is headed in. So far, only KDE Itinerary sends those. If you're wondering why we're doing that, have a look at Volker's blog posts. We also implemented a map showing recent location shares (both static and live) for a room.
At this point, we'll have a quick detour to another amazing KDE app: Itinerary is KDE's digital travel assistant with a focus on privacy. This year, we added support for sharing the user's current location (and heading) to a matrix room. This can be useful for when you're travelling with friends and want to meet up at someone's location; It's implemented using libQuotient. If you want to know more, come visit us in Itinerary's matrix room.
On the end-to-end encryption side, with the release of libQuotient 0.7 late in 2022, we were finally able to show new encrypted messages, send encrypted messages and verify other sessions. Since then, roughly every two days, someone asked about being able to decrypt old messages. I'm happy to say that the required code for this is currently under review in libQuotient. Cross-Signing is also currently under review.
I want to thank Carl and James for another year of great collaboration in maintaining NeoChat together. I also want to thank Joshua and Volker for their significant contributions directly to NeoChat, and everyone else who contributed either to NeoChat directly, or to some of our dependencies, translations, KDE's servers and the CI, or anything else I might have forgotten. Last, but definitely not least, I want to thank Alexey for taking care of my merge requests to libQuotient :)
Of course there are still more clients and it is certainly not that nothing happened in those. But the developers sadly are too busy writing new features, fixing bugs or maybe I just forgot to tell them about this!
SDKs and Frameworks
Now, no client exists in a vacuum... actually, no, I take that back. I'm sure someone put a client in a vacuum already! What I wanted to say is that clients usually use SDKs or Frameworks, whatever the difference between those is. And as each client develops, that base of course has to develop as well. Let's hear about some of them and maybe some of these updates will even convince you to start your own client?
Multiplatform Kotlin SDK for Matrix ↗
This has been a very wild year for Trixnity. There were many changes, bugfixes and the next major version Trixnity 4 has been released. For those who are not yet familiar with Trixnity:
The following is a rough overview of the most important changes:
Asynchronous transactions were added at the beginning of the year. Although these brought an enormous increase in speed, they also caused high RAM consumption and other problems. They were therefore removed again after six months. Irrespective of this, the cache has been accelerated again and now consumes significantly less RAM and CPU. Files can now also be loaded faster thanks to an internal change in how files are streamed (changed
Flow<ByteArray). In addition, de- and serialization has been optimized so that significantly fewer objects need to be created. The decrypted content of a
TimelineEventis now saved by default. This speeds up the loading of the timeline somewhat, especially on slow clients. In addition device keys are tracked lazily, making the initial sync a lot faster. A recently added bot mode disables many features of Trixnity (with the help of dependency injection) and thus allows very fast processing of events, even end-to-end encrypted ones.
Web gets data storage
IndexedDB has been added as a database and
MediaStorefor the web, so that Matrix clients for the web can now also be used with persistent.
Trixnity got support for fallback keys and room key requests. The module
trixnity-crypto-corehas been introduced, which replaces Kotlin/Native crypto algorithms using native APIs (CoreCrypto on apple and OpenSSL on linux/mingw targets) and includes a
SecureRandomimplementation using native APIs.
As simple as it sounds, the "forget rooms" feature has caused a lot of internal changes. This was because the cache works between
MatrixClientand the database and therefore required more information to delete rooms locally.
Smarter Room Outbox
The outbox of a room now tries to send messages infinitely often and only stops when a corresponding error message comes from the server.
New and improved APIs
In addition to some consistency changes, a few APIs have been added to facilitate the development with Trixnity. For example,
Timelinehas been introduced as a abstraction that makes creating and reloading timelines very easy. With
canSendEventyou can now check your own authorizations and
PowerLevelsEventContentnow uses Kotlin types for
content.events["m.room.message"]). In addition, the push rules have now been implemented in a more type-safe manner and the object
ServerDefaultPushRuleshas been introduced, which simply implements the spec.
SyncApiClienthas been given a powerful API that allows various event types to be subscribed according to prioritization.
Eventis now called
ClientEventfor a clearer distinction to PDUs. Some Kotlin extensions has been added to make the use of more complex APIs a little easier. Last but not least, there have been many consistency changes regarding naming and function signatures.
There were a few community contributions: Steffen Eichenberg added configurable SyncDeleys. Jon Poulton added an Android Room database implementation and made
RoomDisplayName::summarypublic. Enguerrand de Rochefort made
MatrixClient::baseUrlpublic and Carsten Csiky added
So far, Trixnity is almost exclusively developed by myself. However, I am always happy to receive support. Features like VoIP were waiting to be implemented!
We published Trixnity Messenger a few months ago. This is very exciting, because it is (as far as I know) something completely new in the Matrix ecosystem. Trixnity Messenger provides extensions on top of Trixnity geared towards building a Multiplatform messenger. It is agnostic to the UI and supports all technologies that are interoperable with Kotlin. UI frameworks that are reactive like Compose Multiplatform, SwiftUI, or ReactJS are best suited, since the changes in Trixnity Messenger can be reflected in the component by binding to the view model. It is the base for our TI-Messenger Timmy at connect2x and already used or tested by some companies, who are now able to build custom messengers very fast.
Matrix SDK for Dart and Flutter↗
Matrix Dart SDK
The 2023 year in review post!
We had a total of 10 breaking changes this whole year (v0.15.2 -> v0.25.4)
Here's a quick rundown of some of the major features and changes -
- Huge work on calls at the start of the year, trying to fix bugs in p2p calls and implement MSC3401.
- Support for private read receipts.
- Implement sending messages inside a thread.
- QR Code verification for devices/users.
- Moved to GitHub due to internal changes at Famedly, which meant migrating our ci/cd infrastructure from GitLab to GitHub.
- Better support for presences inside the sdk database.
- Updated our dehydrated devices implmenation to match with the current MSC3814.
- A new database implementation based on SQFlite and IndexedDB as a Drop-In-Replacement for Hive and HiveCollections.
- End of the year also sees some calls development again, we are now working on a extended version of msc3401, this and the implementation of a encryption provider for SFrames, should pave the way for our MatrixRTC implementation for next year (see you at fosdem!).
Matrix SDK in Elm
Having gone from a fun idea to a funded project, 2023 was the year that the Elm SDK became a serious project that has started to show regular releases. In the past year, we've reached the following goals:
- Using the alpha repository, we've built Matrix's first ever chess client ♟️ on chess.noordstar.me, allowing you to play chess on Matrix using your regular Matrix account.
- We've received funding from NLnet 💸 to publish the Elm SDK and to create a moderation tool for chat moderators.
- We've published a beta repository on the package registry 📦️ for all to see and to experiment.
With the funding, our aims for the upcoming year are the following:
- To finish the beta versions and publish an official 1.0.0 version 🎉
- To remake Matrix Wrench in Elm as a proof-of-concept 📋️
- To build an extensive moderation tool for chat moderators who cannot self-host Mjolnir 🔨
The primary mission of the elm-matrix-sdk is to join the communities of Matrix and Elm together. Ideally, Elm front-ends will be provided with an easy Matrix back-end, providing both communities with solid user apps in front of secure decentralised communication. 👌 If you're interested in the project, please join #elm-sdk:matrix.org or follow the Elm SDK on Mastodon stay up-to-date on the latest updates.
mwc & libli
Matrix clients using web-component to display (public) matrix content on the web.↗
Matrix clients using web-component to display (public) matrix content on the web.
- distributed as a npm package (and gitlab CI tag versioning)
- can be embeded in any web page in two lines of HTML (from CDN, or self hosted)
- no/low dependency (build tool only used for bundling, and use web APIs), minimal folder/file structure
- "classless HTML/CSS", only HTML custom element and their attributes API (representing their state, and config)
- works without styles (aims to be close to "native HTML elements", img, video etc.)
- changelog: https://gitlab.com/sctlib/mwc/-/tags
- harmonize the DOM of each component, tagName, attribute naming
- new component
- define custom events (and their display and form templates), with HTML template and JS web-component
- improve the API's code (add /sendToDevice and user information)
Displays matrix rooms as "profiles", like a decentralized social network (matrix client)
- changelog: https://gitlab.com/sctlib/libli/-/tags
- update to latest(s) @sctlib/mwc (use custom event and their templates)
- improve styles (minimal defaults)
Like a static site generator (uses files and folder to represent content), that generates a matrix server's API (static JSON)
Like matrix.to, but to display a "public matrix actor" profile, for a user (currently, libli is used for rooms).
- try the
#rtcURL hash on a user profile, to show a @sctlib/rtc to connect to this user with web RTC.
Slightly related to those frameworks above, we also got updates which I am just putting here from lack of a better section for it!
Rory&'s Matrix 2023 in review
Emma [it/its] ⚡️ mentions
This year we&ve spent quite a lot of time on writing utilitarian projects.
With all of this, comes the launch of an entirely new Matrix SDK: Rory&::LibMatrix!
This is an SDK written purely in managed C#. With the goal of being "portable", I plan to avoid native dependencies where possible (as of writing, the only dependencies it has at all are ArcaneLibs, and Microsoft's Dependency Injection framework!)
There's certainly a lot of work left, such as encryption, event relations, ..., but I do see a bright future for the SDK as a whole.
Based on this SDK, I've written a few projects, in order to put it into quite a few different usecases and environments:
Rory&::MatrixUtils, general purpose utilities
Rory&::MatrixUtils is a general set of tools, in order to do (admittedly, sometimes niche) tasks, such as creating, managing, moderating, etc. rooms, managing your profile (eg. updating global display name without wiping per room names), etc.
Within the set of tools, you can also find a policy room manager, a state viewer/editor, and more!
ModAS, a server-wide moderation and administration toolkit
This is built ontop of Matrix' Appservice API's, allowing deeper and more powerful administration of a Matrix homeserver, whether that be enforcing rules, or preventatively identifying spam.
The primary design goal driving the project, is being independant of homeserver implementations.
You can find ModAS here!
Rory&::ModerationBot, extending the moderation horizon since 2023
While inspired by Draupnir/Mjolnir, Rory&::ModerationBot brings some new ideas to the table, such as blocking media being posted that matches a given homeserver or file hash. Future plans include the ability to enforce a maximum user ID length, being able to automatically enforce policies based on trust and/or policy tags, of which behavior can be specified per list.
Current features also include extended reaction types, such as redaction, kick, mute, warn (admins or chat), or even "spoilering" images.
Rory&::ModerationBot can be found here!
Rory&::PluralContactBot, email list aliases, now on Matrix!
While this one is highly unfinished, the idea is to create a bot/appservice that can be used to contact an entire group of accounts, by DM'ing a single user!
This is particularly useful for cases where contacting a group of accounts is preferred (eg. people dealing with plurality (hence the name), or a moderation/admin team), similar to email group aliases.
This would essentially allow, for example, a user to directly message
@moderators:yourproject.orgin order to easily contact your project's moderators in case this is needed.
Rory&::PluralContactBot can be found here!
Rory&::MxApiExtensions, general-purpose API additions
Rory&::MxApiExtensions is a small project that adds (and in some cases, changes behavior in non-breaking ways) endpoints in order to allow clients to ad-hoc request data without having to rely on sync, without dealing with the roundtrip-latency penalty of sending multiple requests, and similar nice-to-haves, such as automatic following of tombstones.
There might be other projects I've missed, feel free to have browse through my cgit server!
Oh yeah, all of those projects are AGPLv3 and their discussion rooms can be found at #projects:conduit.rory.gay (conduit borky, might need to view state to find rooms!)
I hope 2024 will bring many improvements and new projects!
Regards and best wishes,
Emma, member of the Rory& system
Sadly we didn't get any updates from specific homeservers, but deploying a server might be even more important. And luckily the people maintaining the tools for that never take a break and we got some quite impressive reports from them!
Matrix server setup using Ansible and Docker
This Ansible playbook is meant to help you run your own Matrix homeserver, along with the various services related to that. ↗
2023 was a year filled with many changes for matrix-docker-ansible-deploy. In this post, we're looking backward at some of the major changes that happened this year, as well as taking a glimpse of what's ahead in 2024.
2023 is probably the year of AI, with millions of people jumping aboard OpenAI's ChatGPT train. matrix-docker-ansible-deploy is no stranger to this and 2023 began with a PR from bertybuttface who added support for matrix-chatgpt-bot (see the changelog entry). While OpenAI's chat GPT website was frequently overloaded in the past, their API was up which made using this bot both convenient and more reliable.
AI aside, with the playbook's focus being containers, we're doubling down on being "container native" and becoming more interoperable for people hosting other containers on the Matrix server. In 2022, we've announced a few sibling Ansible playbooks, their use of Traefik and the possiblity of matrix-docker-ansible-deploy also switching to this reverse-proxy. This prediction materialized quickly. The largest change in the playbook in 2023 happened way back in February - matrix-docker-ansible-deploy starting the switch from nginx to Traefik and then quickly making Treafik the default reverse-proxy. As noted in the changelog entries, we envisioned a quick and complete elimination of
matrix-nginx-proxy, but at the end of 2023, it hasn't happened yet. The playbook is already using Traefik as the front-most reverse-proxy, but nginx (via
matrix-nginx-proxy) is still around - it has taken a step back and is only used internally for new setups. Work got to a stall due to:
- complexity: untangling the overly large and messy
matrix-nginx-proxycomponent is difficult
- the current setup became "good enough" because nginx has become an internal implementation detail for those who have migrated to Traefik. Traefik is already the default public reverse-proxy and gives better possibilities to people wishing to run other web-exposed containers on their Matrix server via Docker Compose, other Ansible playbooks like mash-playbook (more about this one, below) or any other way.
matrix-nginx-proxyis no longer in the way of us being interoperable, but its ugly internal details are still there. It is one more proxy in the long chain of reverse-proxies we have and we'd like to cut it out. This would both make things simpler and also boost performance.
The delay in eliminating
matrix-nginx-proxyhas probably been welcome by many existing users who decided to postpone the Traefik migration a bit longer. In 2024, work on eliminating
matrix-nginx-proxywill continue with rapid pace. People who are still using
matrix-nginx-proxyas their front-most reverse-proxy will need to rework their setup. About a year of putting it off has been long enough.
This large Traefik reverse-proxy change was also accompanied by another internal change which began in 2022, but continued in 2023 - moving non-Matrix-related roles from being internal to the playbook to living their own life outside of it. Various roles were made more decoupled and moved outside of the playbook, so that other projects (like the mash-playbook Ansible playbook or other Ansible playbooks) could benefit from them. This led to the death of a few sibling playbooks (gitea-docker-ansible-deploy, nextcloud-docker-ansible-deploy, peertube-docker-ansible-deploy, vaultwarden-docker-ansible-deploy), but brought life to something better, which supports all these services and more.
mash-playbook is a new Ansible playbook that a few of us (matrix-docker-ansible-deploy contributors) have launched in 2023. It has quickly grown to supports 60+ services and aims to do the same for FOSS service hosting, as matrix-docker-ansible-deploy has done for Matrix - providing a clean and secure way to run a bunch of services in containers on a regular server (that is to say, without Kubernetes, etc.). Thanks to Traefik and Ansible role reuse, it's easy to host both mash-playbook services and matrix-docker-ansible-deploy services on the same server - see mash-playbook's interoperability documentation page. If you've been looking for a holiday project or your New Year's Resolutions list contains "self-hosting more services", then you're welcome to give this new playbook a try and join its Matrix room (#mash-playbook:devture.com).
Because many of the roles are now external to this playbook (defined in the requirements.yml file), running
make roles(or better yet
just rolesvia the just tool) becomes a necessity each time one pulls playbook updates (
git pull). Pulling external roles happens via the ansible-galaxy command-line tool, but if available, the playbook would also use the much faster agru tool (developed by Aine from etke.cc this year).
With the internal (but important) details out of the way, we can now talk more about new features that landed in matrix-docker-ansible-deploy in 2023.
The following new bridges were added to the playbook in 2023:
- (2023-01-11) mautrix-slack, thanks to a PR by Cody Neiman (see the changelog entry)
- (2023-07-21) mautrix-gmessages, thanks to a PR by Shreyas Ajjarapu (see the changelog entry)
- (2023-08-23) mautrix-wsproxy for Apple iMessage bridging (when combined with the mautrix-imessage bridge running on your Mac or Android phone), thanks to a PR by Johan Swetzén
This brings the total number of bridges that the playbook supports up to 30. There are alternative bridge implementations for various networks and protocols, so the number of "unique bridged networks" is surely much smaller.
A few other major components and changes landed in 2023:
- (2023-02-10) The Draupnir moderation tool (successor to Mjolnir), thanks to a PR by FSG-Cat (see the changelog entry)
- (2023-02-10) Matrix User Verification Service to add Matrix Authentication Support to our Jitsi setup, thanks to a PR by Jakob S. from zakk gGmbH (see the changelog entry)
- (2023-02-25) The Rageshake bug report server, thanks to a PR by Benjamin Kampmann (see the changelog entry)
- (2023-03-07) Sliding Sync Proxy (currently a necessary component for Element X to work), thanks to: Benjamin Kampmann and FSG-Cat (see the changelog entry)
- (2023-03-12) synapse-auto-compressor to periodically and automatically run rust-synapse-compress-state, thanks to a PR by Aine from etke.cc (see the changelog entry)
- (2023-07-17) matrix-media-repo, thanks to a PR by Michael Hollister from FUTO, the creators of the Circles app (see the changelog entry)
- (2023-08-31) SchildiChat client app (fork of element-web), thanks to a PR by Aine from etke.cc (see the changelog entry)
- (2023-10-18) Postgres parameters auto-tuning, thanks to a PR by Aine from etke.cc (see the changelog entry)
- (2023-10-23) Enabling federation of the room directory for Synapse (see the changelog entry)
The most recent change in the list above (Enabling federation of the room directory for Synapse) has been somewhat controversial as it goes against upstream defaults for Synapse. Nevertheless, we believe it promotes the well-being of the Matrix Federation by improving room discovery.
Matrix Federation Stats (containing the percentage of servers publishing their room directory publicly) are posted to TWIM each week by Aine from etke.cc. The number of servers which currently published their room directory publicly stands at
26.6%, which is:
- 2.4% more than when it was when first published to TWIM (1 month earlier, in November)
- likely about 15+% more than from before we flipped the switch (in October)
Hopefully, Synapse defaults would also change the same way and we'd see the number of servers publicly listing their room directory grow faster.
With this configuration change in place, projects like MatrixRooms.info (made by etke.cc) and potentially others in the future, can discover, index the metadata (room address, title, topic, number of users, etc.) and make public rooms browsable & searchable across the whole Matrix Federation. It'd be great if users joining Matrix could more easily find interesting communities that match their interests!
On the media side of things, besides Jitsi getting better Matrix integration (via the aforementioned Matrix User Verification Service), we've also had some Coturn security tightening as well as performance optimizations for configurations exposing lots of network ports.
Element Call seems to have become a nice and polished product lately (as proclaimed in The Matrix Holiday Update 2023), so 2024 is likely the year we'll see support for it in the playbook. Element Call depends on the LiveKit streaming server (which is also useful to developers even by itself), so the first step is likely to see LiveKit support in mash-playbook via a reusable Ansible role. Such a LiveKit Ansible role could later easily land in matrix-docker-ansible-deploy and an Element Call static website could be hooked to it.
Besides these highlights, there were many other relatively large changes announced in our CHANGELOG and hundreds of other more minor (but still important) playbook changes that didn't get a mention.
We have hundreds of contributors to thank for their hard work on making Matrix self-hosting better for all of us! It should be noted that support comes in many shapes, not only in raw code commits and financial help (via donations or using the etke.cc managed Matrix hosting service which is based on matrix-docker-ansible-deploy). It also comes in the shape of code reviews, helping others with issues, reporting new issues, participating in our support room on Matrix (#matrix-docker-ansible-deploy:devture.com), etc. To everyone who has been there to make matrix-docker-ansible-deploy better in 2023, thank you! 🙇♂️
I hope you enjoyed this small update. Sadly I was a bit too caught up in various tasks to make this in time for new years, but the deadline for such a review is next new years, right? As always feel free to join #year-in-2023:neko.dev to share your thoughts and tell me which topics I forgot to include, especially if you want to share your own project! Don't forget to check out This Week In Matrix for weekly updates and maybe even give last years blog post a read. Maybe looking at the differences could unearth some interesting changes in the ecosystem?
Anyway, this is all I have for now. Thank you everyone who contributed and let's make this year even more exciting! Or maybe less exciting and more stable? Who knows, do whatever you enjoy and have fun!