
Introducing Komai: a fine Matrix chat app you can get to love π¦
At etke.cc, we host Matrix servers for a living. Almost a decade ago, we were dissatisfied with Matrix self-hosting and launched the matrix-docker-ansible-deploy Ansible playbook (which our etke.cc SaaS is based on). Thanks to that, over time we believe we solved Matrix self-hosting for thousands of users.
All that time, we’ve also been spending a lot of hours staring at Matrix clients β and at things we wished were different.
Today we’re introducing Komai β a desktop-first, native Matrix chat app we’ve been building to scratch that itch. We can’t be sure we’ll solve Matrix on the desktop, but it’s a humble attempt at it.

Komai’s main view β communities sidebar, room list, and timeline side by side.
π€ Why another Matrix client?ΒΆ
We just weren’t happy with what was out there.
Not a swipe at anyone β building a Matrix client is genuinely hard. The protocol surface is enormous (rooms, spaces, threads, receipts, presence, push rules, homeserver quirksβ¦). End-to-end encryption is its own implementation and UX pain on top: multi-device, key backup, verification, cross-signing, recovery.
Stack all of that into one app and UX problems are inevitable. It’s more papercuts than anyone can bear.
Komai is an attempt to make things a little better.
π± Why we started with nhekoΒΆ
We didn’t want to write a Matrix client from scratch, even with the proliferation of brand-new Matrix clients in 2026.
We started with nheko β a native Qt/QML Matrix client. A solid foundation: native performance (QML has its quirks, but still), mostly sensible defaults, a focused codebase (though with plenty of legacy code in it). And most importantly, not Electron.
The original plan was modest: avoid doing too much. Apply some UX patches on top of upstream, send some back, ship a slightly nicer build of nheko.
That plan continued for about 100 patches and we still craved more. So much for “avoid doing too much”.
π€ Why not just contribute to nheko?ΒΆ
Short answer: too many ideas, too little patience for a slow process.
We wanted to be able to change things in major and sometimes controversial ways. We wanted to be the masters of our own destiny.
We did contribute upstream where it made sense. For example, to mtxclient (the Matrix client library nheko was using):
- a fix for a double-base64-encoding bug in online key backup
- adding an optional
filenamefield on image, audio, and video messages
All of which is moot now anyway β soon after, we stopped using mtxclient. More on that in a moment.
π’ The Ship of Theseus momentΒΆ
After ~100 patches, tracking upstream while carrying that pile started to outweigh the benefit.
Replace enough planks and you’re sailing a different ship. We had a choice: keep reconciling diverging goals, or stop pretending and ship a client of our own.
We chose independence and picked up a chainsaw.
π§ Tearing out the encryption coreΒΆ
The most consequential change wasn’t a UX patch. It was an engine swap.
Nheko’s Matrix layer was built on mtxclient, libolm and LMDB, all deeply intertwined.
These Matrix libraries are behind where the Matrix ecosystem is heading. libolm has been deprecated for a while, and there’s a long-standing nheko issue discussing a possible move to matrix-rust-sdk (Nheko-Reborn/nheko#1786). nheko maintainers are right to hesitate: it’s a huge amount of work for a small team, and the existing crypto stack is wired deep into the codebase.
Two things made it tractable for us anyway:
- AI-assisted development carrying us through. More on this below.
- Trusting
matrix-rust-sdkto be mature enough and worth the move β better encryption (vodozemac), sliding sync, modern MSC support, and active development.
So over a few days of work, Codex ripped out mtxclient and libolm and dropped in matrix-rust-sdk.
We’re surprised the switch worked as well as it did. Nevertheless, it still hurt. The change brought a wave of regressions we spent a long time climbing back out of and delayed our launch by weeks.
The good news: Komai now sits on the same Rust runtime the wider Matrix ecosystem is converging on.
π¦ Rust, and more RustΒΆ
The matrix-rust-sdk transplant wasn’t a one-off β it set Komai’s direction: more Rust, less legacy C++, especially for anything protocol- or text-shaped.
Other pieces have quietly moved across the line too: URL detection in messages (linkify), BlurHash encoding and decoding (blurhash), code-block syntax highlighting (syntect), YAML parsing for settings and themes, and Matrix server discovery via Continuwuity’s resolvematrix crate (vendored and patched up).
Each move chips away at the C++ surface we maintain and gives us cleaner, better-tested foundations in return.
π¦ And then we kept adding featuresΒΆ
Once the lights came back on after the matrix-rust-sdk migration, we kept iterating.
A few things we’re opinionated about β Komai’s quiet design philosophy:
- π₯οΈ Desktop-first UX β optimized for large screens, not a stretched phone UI
- π Readable and easy to use β comfortable text sizes, large hit targets (see Fitts’s law), great color contrast
- π¨ Yours to shape β themeable and config-management-friendly via plain-YAML files
- β‘ Native performance as a design constraint, not an afterthought
- π Educate, don’t over-abstract β like Arch Linux, expose Matrix’s real concepts rather than paper over them
- π§ For both grandma and power users β neither dumbed down nor buried in complexity
A few of the things that came out of that:
π Browser-style room tabs β open multiple conversations side by side, pin the ones you keep coming back to. A power-user feature still rare among Matrix clients; the idea was sparked by a presentation from the Robrix team.

2 rooms open as tabs. All can be reordered, closed, and reopened and auto-restore on restart.
π A curated registration page β instead of funneling new users to the matrix.org homeserver by default, the Register page features a curated set of public servers (seeded from servers.joinmatrix.org). Decentralization should start at sign-up. We’re glad to see FluffyChat recently moved in a similar direction, though more conservatively.

The Register page surfaces a curated set of public servers β not just matrix.org.
π§ A polished room directory with first-class Matrix Rooms Search support (enabled by default via matrixrooms.info), language and room-size filters.

The room directory, backed by Matrix Rooms Search β with language and room-size filters.
π¨ 10+ built-in themes, all maintained to meet WCAG AA contrast β Dark Matrix, Catppuccin, Dracula, Nord, Tokyo Night, Rose Pine, and more. ποΈ User themes are also supported.

The Dark Matrix theme β one of 10+ built-in WCAG AA-contrast themes.
ποΈ Voice transcription β long-press Space to dictate into the composer (an interaction pattern inspired by Claude). A more respectful (and skimmable, searchable) way to send a message by voice than dropping a voice clip on someone (which Komai also supports). Works with OpenAI cloud or any OpenAI-compatible local server.
π€ Automation hooks β drive Komai from CLI, D-Bus, or an AI agent over the Model Context Protocol.
π₯ Multi-account via dedicated application profiles β fully separate identities and state, in one application (each profile in its own window).
π 30+ fully translated languages β inherited nheko translations, plus AI-assisted gap filling across the board.
To learn more, see the β¨ features overview.
π€ Built openly with AIΒΆ
Komai is heavily π€ AI-assisted, and we don’t hide it.
C++/QML/Rust isn’t our team’s strong suit, so professional engineers and AI coding agents (Claude Code, Codex) are working together to hopefully build a Matrix app you can love.
Our bet: AI in capable hands can deliver above-average results.
π Where Komai is todayΒΆ
Komai is good enough to ship and gather some feedback. Not finished, not flawless, but:
- a daily-driver Matrix client we use ourselves
- on a modern, actively-developed Matrix stack (matrix-rust-sdk)
- with a feature set that holds its own against any other native Matrix client
- fully Free Software (GPL-3.0-or-later), no CLA, no contributor gatekeeping
Some features are still missing, others still unpolished. Try it. We’ll keep iterating from there.
π₯ Try itΒΆ
Komai is Linux-only (x86_64) for now, though building on Windows or Mac may be possible (still untested).
It ships as AppImage, Flatpak, and Snap on GitHub Releases, and as a komai package on the Arch Linux AUR.
See the π₯ Installation guide for details.
π¬ Get involvedΒΆ
- π¬ Matrix room: #komai:etke.cc
- π GitHub: etkecc/komai
π ThanksΒΆ
Komai owes a lot to nheko (the codebase ancestry) and to the matrix-rust-sdk team (the encryption core we now ride on) β among many others; the full list lives in the Acknowledgements section of the Komai README.