You might have forgotten already, but last year was 2024! And as has become tradition for some reason, I asked several projects to report on how that year went for them and what they are looking for in 2025. You might rightfully call out that this post is late and I don't really have an excuse apart from there being too many events around the new year, so without much further ado, let's yield the floor to people who reported weeks ago and are waiting for me to publish their perspectives!
Dept of Clients 📱
Most of you have one, otherwise you wouldn't be using Matrix. Clients are what allow you to connect to Matrix and Matrix has a lot of them! Each client is actually quite different and supports a different subset of features and provides a different user experience. Take a look on what those projects did last year and maybe you'll find a client you want to try out?
polycule ↗
A geeky and efficient [matrix] client for power users.
The one with the braid (she/her) ⚡ mentions
2024 in < polycule >
Welcome to < polycule > - a brand-new, geeky and next-gen [matrix] client.
< polycule > initially started as personal [matrix] playground on January 16th 2024 based on the Matrix Dart SDK. While it shares the SDK and many best practices with FluffyChat, < polycule > is no fork of Krille's amazing work but completely written from scratch.
My initial aim was to play around with some Flutter Linux native integration, efficient handling of the Matrix Dart SDK's sync responses and performant rendering. After some initial experiments, < polycule > turned out to become a more and more serious project.
So far, it becamethe Dart's initial Sliding Sync implementation, native OIDC ready, provides advanced accessibility features and keyboard support on Linux.
< polycule > in general aims to bring a geeky, terminal-like [matrix] user experience on Linux desktops, Linux mobile and Android.
If you are curious about the current feature support of < polycule >, you can consult the roadmap on GitLab.
12 months and 209 merge requests after the initial commit, the project so far is available as vividly developed alpha version available on Alpine Linux, postmarket OS, the AUR as well as an APK for Android.
Fractal ↗
Matrix messaging app for GNOME written in Rust.
Kévin Commaille reports
You might remember that we ended last year with our first release in two years, after a rewrite that allowed us to go from GTK 3 to GTK 4 and from our own backend to the Matrix Rust SDK. Well, the next releases certainly didn’t take that long! We managed to get four more releases published this year! That’s… carry the one… like… way more!
As you can imagine, our beloved client gained many features, we’re not going to list them all here. Here are our favorite ones:
- Join any room mentionned anywhere, thanks to matrix.to and matrix URI scheme support, and clickable room pills.
- Configure most room settings in the room details, like access rules and permissions.
- Clickable user pills and avatars provide quick access to all the interactions you may want to have with other room members.
- Too many cryptography related features to put them all here, but we have a nice checklist that shows where we’re at.
You can find Fractal 9 at Flathub.
And we already have a lot more features planned for next year: opening rooms at the point in history where you left them, grouping state events or improving the starting time by caching timelines.
-- The Fractal team
Tammy ↗
White label messenger based on Trixnity Messenger.
Benedict contributes
Tammy in 2024
Tammy has had an exciting debut since its public release in November. Tammy is fully based on the Trixnity Messenger SDK, which includes a UI now. Technincally Tammy is just a whitelabeled Trixnity Messenger with it's own colors. It's Mutiplatform and already runs on Desktop (Windows, MacOS and Linux), Android and Web (Beta) and is coming to iOS this year.
Key Highlights
Although Tammy only launched in November, its feature set has already grown substantially:
- Faster, More Reliable Timeline Architecture: Tammy introduced a completely new timeline system that enables smoother interactions, improved reliability, and infinite scrolling for a streamlined user experience.
- Enhanced Sharing Options: New capabilities allow users to share plain text, formatted text, and URLs, and Android users can now capture moments directly via the camera.
- Flatpak Support for Linux: Tammy now integrates with Flatpak, making it even easier to install and use on Linux systems.
- Message Reactions Visibility: Users can now see who reacted to messages, adding a layer of transparency and engagement to conversations.
Call for Action
Tammy is ready for you to try! Whether you're a business looking for a customizable messaging solution or an individual seeking a robust and easy-to-use messenger, Tammy has you covered.
Tammy thrives on community support—feedback, contributions, and ideas from users like you. If you’re a developer, designer, or enthusiastic tester, consider contributing to Tammy and shaping its future. Together, we can make Tammy the messenger of choice for everyone.
Get started today and join the journey in https://matrix.to/#/#tammy:imbitbu.de !
NeoChat ↗
NeoChat is a chat app that lets you take full advantage of the Matrix network. It provides you with a secure way to send text messages, videos and audio files to your family, colleagues and friends.
Tobias Fella shares
It's now been more than four years since we started developing NeoChat. Let's have a look at what changed in the last 12 months.
This post can't highlight all changes that we have made this year. All in all, more than 1000 commits have been added to NeoChat's repository alone - not accounting for all the changes in libQuotient, Qt, KDE frameworks, and other libraries that we're using.
One of the bigger ongoing topics we're working on is support for Threads. James has spent quite some time in the app's code and in libQuotient to add support for properly showing threads and sending messages to a thread. For now, this work is still somewhat hidden behind a feature flag; we will make it more visible once it's more complete.
One of NeoChat's more unique features is its ability to show semantic information from some events. This is largely powered by Volker's amazing work on Itinerary and allows NeoChat to quickly show you, for example, information about the train ticket that is sent as a file over matrix. In the future, we want to extend these powers even more.
On the topic of security & end-to-end-encryption, a lot has changed: First, NeoChat now supports cross-signing and some parts of secret storage. This makes it possible to read all encrypted messages, even those that were sent before logging in to NeoChat - at least in theory. Unfortunately, the user experience is not quite at the point where we want it to be and some parts are thus still a bit rough and hidden.
Due to libOlm being unmaintained, we have made the decision to port libQuotient to vodozemac earlier this year. After almost finishing the port, while attending the Matrix conference and listening to a talk about unable-to-decrypt messages, we have decided to scrap that plan and go with using matrix-rust-sdk-crypto, a more high-level SDK that does a lot of the heavy lifting for us, which should improve the reliability of encrypted messages a lot. This has now been largely implemented - and is already much nicer and more featureful than our previous implementation! We hope to finish this work some time in the next few months.
As many of you know, Matrix has suffered from a wave of spam attacks for much of the last year. While there's not much we can do against that on the client side, we have added some features to at least reduce some of the damage: First, it's now possible to automatically reject room invitations from users that we do not share a room with. While this is no guarantee against getting spam invitations, it's relatively effective against the spam we have seen so far. Also, there is now an option for not loading images or videos (and their thumbnails) by default. In NeoChat's settings, there is now a list of all users that you are ignoring, which also allows you to unignore them.
NeoChat's timeline and room list UI have changed significantly. Instead of trying to explain what has changed, I'd encourage you to just try it out yourself :).
While NeoChat is not only usable on KDE Plasma, there are some features that are mostly specific to this platform. This year, we have added support for sharing content to NeoChat from other applications that use KDE's purpose framework. We're also working on improving the Android version of NeoChat. While it's still a bit rough, it runs fine now, and we're working on supporting push notifications.
Nheko ↗
Desktop client for Matrix using Qt and C++20.
Nico contributes
In 2025 we had our biggest release so far! We had been working on this for over a year. The biggest effort in that release was our port to Qt6. While the general porting wasn't that complicated, Qt6 introduced a lot of smaller behavioural changes and we wanted to resolve most of the user visible impact of that. A few months later I think we can say we mostly achieved that. There have been a few smaller regressions (scroll speed, tray icon), but in general we didn't get as many complaints as we expected. We are working on a new release to fix a few of the minor annoyances, but in general we have been pretty happy with the 0.12.0 release.
In the 0.12.0 release we also had a few other interesting features. Nheko can now automatically delete messages after some expiration period (without any server support necessary!) and we support a lot of the newer Matrix features like intentional mentions and authenticated media. We also finally gained support for some older Matrix features like the long ignored ignore feature... And you can start a list with 2 now!
So in general 2024 was a good year. Nheko is mostly feature wise complete from my perspective. There are only a few major features I am missing. Instead we will likely now focus on smaller polish features. This might include moderation features, improvements to calling, better access token management or simply improving the UI.
As part of that some of my personal focus has shifted onto the Matrix specification. I finally got rid of one of my personal annoyances, the mx-reply fallback. Now you might not care, but for me this has been a long standing annoyance. Most clients implemented reply fallbacks wrong at least once. Many clients implemented them wrong multiple times. And the benefit from them has barely been positive. But now, as of Matrix version 1.13, this feature has been removed from the Matrix specification and clients will hopefully stop sending them bit by bit and then in a few years that small bit will be better. You likely won't notice, but it does make my life easier!
Another part I put some pressure behind was authenticated media. I reported this as a security issue a few years ago, but fixing that in the ecosystem wasn't that simple. Luckily this mostly seems to be figured out now (apart from a few clients being stubborn on compatibility checks). Maybe one day I will tell the whole story, but currently I am still waiting for the ecosystem to update.
Now these were smaller things, but I do expect to continue working on such papercuts. Some of them in Nheko, some of them in Matrix. I do want Matrix to eventually become a pleasant experience for most users and to get there will likely need a lot more effort than it took us to get where we are today. So stay tuned for 2025. You might not see many obvious changes, but I do hope that at the end of 2025 you will be able to look back at 2024 and notice a significant difference, even if it is uncrinkling of a thousand papercuts. Or more realistically maybe just like 50, but... Anyway! Let's not restrict ourselves by what is possible and see you next year or in [#nheko:nheko.im](https://matrix.to/#/%23nheko%3Anheko.im)!
Dept of SDKs and Frameworks 🧰
It's pretty hard to write a Matrix client from scratch. For this reason there are many different frameworks, that simplify that work. If you haven't found a client you like, maybe you can at least find the right SDK to write the perfect client for youself?
Trixnity ↗
Trixnity is a multiplatform Matrix SDK written in Kotlin. You can write clients, bots, appservices and servers with it. This SDK supports JVM (also Android), JS and Native as targets for most modules. Ktor is used for the HTTP client/server and kotlinx.serialization for the serialization/deserialization.
Benedict reports
Trixnity in 2024
2024 has been another eventful and productive year for Trixnity, building on the solid foundation laid in previous years. The focus has been on performance enhancements, developer usability improvements and compliance with updated Matrix specifications. Below is a detailed overview of the key achievements and updates for Trixnity in 2024.
Major Enhancements and Updates
- Performance Improvements
- Streamlined the media handling pipeline by introducing support for streaming media in Kotlin Browser targets. Large files are now processed sequentially, significantly reducing memory consumption.
- A key memory leak due to uncanceled coroutines in the cache was resolved.
- Optimized cache operations to update values before persisting into the database, improving both speed and efficiency.
- Initial sync times have been reduced further through enhancements in device key tracking and transaction handling.
- New Features
- Infinite Timelines: Timeline now supports dropping elements dynamically, enabling the implementation of infinite scroll for event history.
- Matrix Specification Compliance: Upgraded support for Matrix specifications, including 1.10, 1.11, and 1.12.
- Flexible Media APIs: Developers can now create temporary files from media for random access like Video Players.
- Multiplatform Extensions: Introduced multiplatform utilities for working with Input/Output streams and ByteArrayFlows, making it easier to handle large data streams.
- Improved Developer Experience
- Transitioned to Kotlin 2.0.21 and Ktor 3, bringing modern language features and enhanced runtime performance.
- Simplified APIs with more type-safe constructs, such as server media configuration checks and Kotlin-based event content retrievals.
- Expanded logging features, including rate limit logs and detailed cache operation logs, improving debugging and diagnostics.
- Dependency injection enhancements allow for better modularity and the configuration of core components, like
HttpClientEngine
.- Bug Fixes and Stability
- Resolved long-standing issues such as deadlocks in timeline loading and incorrect handling of media downloads for large files.
- Fixed a lot of minor bugs.
Looking Ahead
While 2024 marked significant progress, there are still ambitious goals for Trixnity. Priorities for 2025 include:
- Enhanced media compression support. A new API will make it possible to optionally compress images and videos. Thumbnails are created automatically.
- Replace libolm by a modern crypto library (either an own implementation or vodozemac).
- Support Matrix 2.0 after it's release as soon as possible.
- Adding support for VoIP and video conferencing.
Call for Action
Trixnity has solidified its position as a comprehensive and versatile tool for Matrix Multiplatform development, empowering developers to create robust, secure, and high-performance communication applications. However, the reality is that Trixnity remains almost entirely developed and maintained by one person. While many companies are using Trixnity to build profitable solutions, none are giving back to the project that enables their success.
We want to emphasize that Trixnity’s license will not be changed — we’re committed to keeping it open and accessible as a powerful alternative to matrix-rust-sdk. However, Open Source thrives on community support and collaboration. To sustain and grow this project, we need your help. Whether it's through funding, code contributions, or simply spreading the word, your support is vital to ensuring Trixnity's future.
If you’re using Trixnity in your business, please consider giving back! Together, we can maintain an awesome open-source SDK for Matrix development.
Matrix Dart SDK ↗
Matrix SDK for Dart and Flutter
td shares
This Year in the Matrix Dart SDK
Here’s an update on what we've been working on this year, based on my git log:
####Spec Support: We made a significant upgrade to our spec suppor (this needed a bunch of fixes in our autogen script, but it is not openapiv3 compatible as well), moving from v1.5 to v1.12. At the time of writing, v1.13 is already in progress and is available as an open PR. This means better compliance with the latest Matrix features and specifications, as well as some smoother interactions with the ecosystem.
matrix.to Links: We added a new feature to generate matrix.to links, which now fully supports the "via" mechanism for domain redirects.
Dehydrated Devices: We’ve also introduced support for dehydrated devices. Enabling them is as simple as switching one toggle on your client.init method.
Calls & MatrixRTC: We’ve put a lot of focus on improving our calling support this year. The major improvement here is the addition of MatrixRTC support, bringing us closer to a fully-fledged real-time communication system. We also demoed integrating Livekit as an SFU (Selective Forwarding Unit) in FluffyChat during FOSDEM’24. In addition, we showed how Cloudflare can be used as a pluggable SFU in a Matrix Live session, which you can check out here.
Database Migration: We decided to move away from Hive and migrated to a combination of SQLite and IndexedDB for storing data. This change improves database performance, scalability, and makes managing data on mobile and web platforms more efficient.
Private Read Receipts & QR Key Verification: On the privacy and security side, we added support for private read receipts, so users can now control visibility of their message reads. We also introduced key verification via QR codes, making it easier and more secure to verify encryption keys with others in a simple, user-friendly way.
Looking forward to seeing how these improvements continue to shape the Matrix experience. See you next year!
Dept of Services 🚀
Ideally everyone can host their own Matrix server, but in practice not everyone has the time, resources and capabilities to do that. There are various hosting providers to take the effort out of hosting your own server and provide them as a service to you instead!
etke.cc ↗
etke.cc and various related projects.
Aine [don't DM] reports
Hey,
etke.cc dev here. As the submissions opened quite late, don't have much time to prepare a full post, so let me go through the highlights of our Matrix open-source projectsBaibot
Source: https://github.com/etkecc/baibot
Previously we offered a ChatGPT bot, but it was a problematic component, with plenty of issues, inconveniences and limited functionality. At some point, we decided that developing our own bot from scratch is better than attempting to fix the existing one with unfamiliar to us tech stack.
So, Baibot was born - it does everything and works with everything, just checkout out the README - sooo many features, and my favorite one - transcribe audio messages (#1 feature for people who don't want to play call center support agent).
Synapse Admin fork
Source: https://github.com/etkecc/synapse-admin
The state of the original Synapse Admin was unclear, and we wanted to offer an actually usable admin panel to our customers, so we decided to fork Synapse Admin and make it work. For about 3 months we did 35 releases with a huge list of new features, QoL changes, and bugfixes (note that list contains only highlights, countless things are not mentioned, as they are too small).
Everything else (open source)
We did a lot of stuff during the 2024, Synapse User Auto Erase, Docker Registry Proxy to name a few. If you're interested, just check our GitHub org. Oh yes, and we did migration from GitLab to GitHub, moving all software under etke.cc org, and Ansible roles to MASH org, totaling in 130+ public repos.
Everything else (for etke.cc customers)
Consider shameless advertisement, but I am really proud of what cool stuff we did for our own customers, so I really want to share, even in a form of a limited number of highlights!
- Monitoring service was created, with reports via Matrix, Email, and even Synapse Admin UI
- 9 new components were added and available for order
- Demo server was created, so you could try it before submitting an order
- CDN version of etke.cc Synapse Admin fork was added (this one isn't limited to etke.cc customers, but was done for their convenience)
- About Us page was added - it took us less than 4 years! :D
- ... and a lot more was done "under the hood"
Plans
Can't share specific plans right now, but next year will be... great 😉
Dept of Bots 🤖
Bots might have a bad rep, but not all bots are there to harm a service. Some of them are there to make the platform more fun or more useful, but the most important ones are there to ease the load of moderation and protect your rooms from being overrun by the wrong kind of bots or people.
Draupnir ↗
A Matrix moderation bot and protection platform.
Gnuxie 💜🐝 reports
Draupnir's 2024
Draupnir has had a good year, and looking back it's safe to say Draupnir has changed almost completely this year.
If you are unfamiliar with Draupnir, Draupnir is a moderation bot that has served as the backbone for the room moderators of matrix's open communities for the past two years. We picked up the torch that had been abandoned and we have been building a beacon by re-imagining what was left of Mjolnir.
Moderating a public Matrix room is far from a smooth experience. And there has been and still remains a lack of focus on room moderation, or public Matrix communities in general. So as there has been little to no alternative for the most part, it has been an obligation to work on Draupnir.
For a long time I felt ashamed to be associated with the safety tooling Matrix has to offer, but after all the work that's gone into Draupnir, I am finally able to feel proud.
In 2023 we made several improvements upon the old Mjolnir moderation experience by creating a completely new command UX supported by mobile friendly prompts and reactions. Work began in September 2023 to rewrite the core of Draupnir into a library called the matrix-protection-suite in order to break a feature freeze. The rework has been an enormous undertaking and while I could quote eye-watering numbers for the lines of code changed, it would not capture the development of ideas and design that reflect a tonne of prior work. And then the actual effort into the realisation and execution of the plan. And this all started with very little outside support beyond that found in Matrix's open federation and public communities. Little by little everything came together and by April this year we began publishing Draupnir v2.0.0-beta releases.
While we were working on the beta, @cat:feline.support stepped up and helped me move and rewrite our old markdown based documentation into a new docusaurus based website https://the-draupnir-project.github.io/draupnir-documentation/. We spent a lot of time on easing the system admin and moderator on-boarding experience, and we think this has paid off as we have had lots of feedback and contribution from the community.
On a more personal note, things got tough shortly afterwards around May as burn out crept up on me, and I also didn't know how much longer I could keep working on Draupnir and that all put me in a bad place.
We're not completely over it yet. There is one thing that I am paying a mental toll for more than anything: my work does not feel appreciated by Matrix's technical leaders/figures. I do have very sparse contact with some of the foundation's non-technical staff, and they do help me where they can, probably as much as they can. But outside of that, I've never had any direct contact or interest from anyone involved in say, the SCT. Nothing feeds the burn-out I am facing more than feeling ignored, and I have also had some very discouraging interactions. And given the safety situation, and that I'm the only developer dedicated to working on safety. It probably really is fair for me to have at the very least some encouragement and enthusiasm. And those things go a long way so please please reach out.
We had applied for a grant for Draupnir back in February to help complete the rework and give me the financial stability to work on Draupnir for the foreseeable future. Fortunately by August, we managed to obtain a grant from NLnet which will support us until August 2025, and allow us to develop some much needed and very exciting features. You should check out the goals that we're currently working through if you haven't already. Without their help we would be struggling a lot more than we are now.
Since then things have been going relatively well. The feedback that we have gathered during the v2.0.0-beta programme has been comprehensive and we're now working to close the most problematic issues before we release v2.0.0. Which we are set to release within the next four weeks. So thank you to everyone who has participated and reported issues to us.
We'd like to thank other maintainers for stepping up and making tools that either complement Draupnir or provide alternative functionality:
Community Bot, a maubot plugin for community administration that is easy to configure if you are already running other maubots.
meowlnir, a maunium based moderation appservice with a focus on resource usage and simplicitly.
Rory&::LibMatrix, a range of moderation bots and utilities, but Rory&::RoomUtils is most relevant for interacting with policy lists or changing Draupnir's configuration.
So here's the highlights of what has changed this year:
Draupnir's setup and onboarding experience has been revamped with new documentation and more promt UI to help setup tasks. Protecting rooms and watching lists is as easy as inviting the bot and clicking a reaction to confirm.
A Safe Mode feature was added which can automatically diagnose and recover from problems with Draupnir's persistent configuration.
Draupnir now cache's room state in revisions, improving response time and simplifying development. An optional room state backing store allows Draupnir to start up much more quickly (for instances with hundreds of rooms this is the difference between several minutes and now just a couple of seconds).
All of Draupnir's commands now use the new interface-manager, which allows Draupnir to give feedback or prompts for missing or incorrect command arguments.
Draupnir's protections system was reworked, with more hooks for changes to room state, membership, and policies. Access to protection settings has been fixed and reworked. And protection capabilities are finally interchangable. All of these improvements will allow for simpler and higher quality protections in the future.
Happy new year, and see you soon!
That's all I have for you today. That doesn't mean I covered everything, there are plenty of projects I couldn't contact in time for the original deadline or things happening in Matrix better covered in a separate blog post (like the new governing board)! But I hope the few updates I collected are still interesting to you and remember to be excellent to each other. Matrix is fun because of its diversity and we should embrace that instead of fighting each other over who is best. And with that I will put my pen down until next year. Anybody taking bets on when one of these blog posts will be a whole year late?
Nico