Native Matrix client built on matrix-rust-sdk with a Silica UI.
FEATURES
- Sliding sync, end-to-end encryption, cross-signing, device verification (both directions), key backup and recovery
- Rooms, spaces (nested), direct chats, threads (answer in one or start one), room directory search
- Create rooms, invite, leave; member list and member profiles with moderation
- Send, edit, delete, reply, pagination in encrypted rooms
- Formatted messages: bold, italic, code, quotes, lists and links render as themselves
- Pinned messages, favourites, low priority, per-room mute, ignored users
- A room opens where you stopped reading, and says who has read what
- Four coloured lines say how safe the device is: backup, recovery, cross-signing, local storage
- Reactions from an emoji picker whose first tab you fill yourself
- Pictures, files, sharing (also as share target from Gallery / file manager)
- Voice messages; voice and video calls (classic 1:1 VoIP; MatrixRTC-only clients cannot be called)
- Notifications, offline send queue, encrypted local storage
- OAuth (MAS) login, device-code login, password login
- 29 interface languages, switchable in the app
LANGUAGES
The interface is available in the 24 official languages of the European Union
plus Russian, Norwegian, Icelandic, Simplified Chinese and Hindi. Norwegian was contributed by a Norwegian
speaker and German is the project language; the rest are machine translations,
usable but unchecked. Account has a language setting of its own, English
included, so there is always a way back out of one. A change applies at the
next start.
Corrections are welcome at the GitHub repository below - the file to edit is
translations/harbour-xmatic-<language>.ts, and translations/STATUS.md says
which languages have been read by a native speaker.
LOCAL STORAGE
Session tokens and the message database are encrypted with a key from Sailfish
Secrets.
Some Sailfish images ship only the client library of that key service and not
the service itself. On such a device xmatic no longer creates an unencrypted
database quietly: it says what is missing, gives the command to install it and
a command to check the result with, and offers to continue without encryption
as an explicit choice. The package also requires the service, so on most
devices this never comes up.
An installation that already holds data is never blocked - that would strand
its room keys. Where a database simply predates the key, the encryption page
offers to re-create it encrypted, which costs one sign-out and your recovery
key.
How safe the device is stands in four coloured lines - backup, recovery,
cross-signing, local storage. Green is in order, orange is something you can
put right, red is something the system does not offer. If anything is not
green, the app says so once after starting, with the action that fits and
"later" always available. When everything is green you never see any of it.
WHY IS THE PACKAGE SO BIG?
The app ships the complete Matrix stack statically: matrix-rust-sdk, E2EE
(vodozemac), sliding sync, rustls, its own HTTP runtime and a bundled SQLite.
None of that exists as a system library on Sailfish OS, and Qt 5.6 is too old
for the C++ alternatives - which is exactly why the protocol core is written in
Rust. Installed size ~51 MB (Element X, same SDK: ~100 MB), RPM ~16 MB.
NO BACKGROUND DAEMON
Messages arrive while the app is running (the cover is enough). Like other
daemonless messengers on this platform, a closed app does not receive.
ARCHITECTURES
aarch64 (Sailfish OS 5.0+), armv7hl (Sailfish OS 4.6+).
REQUIREMENTS
xmatic syncs over simplified sliding sync (MSC4186), the same mechanism
Element X uses. Your homeserver must support it. If it does not, sign-in
works but no rooms load and the app keeps showing "Offline".
How to check your server: open this address in a browser
https://YOUR-SERVER/_matrix/client/versions
and look for this line:
"org.matrix.simplified_msc3575": true
If it is missing, xmatic cannot load your rooms from that server.
Sign-in methods supported: OAuth 2.0 / Matrix Authentication Service,
device code ("Sign in on another device"), and username plus password on
servers without OAuth.
The classic SSO redirect sign-in (SAML, CAS) is not supported.
Written with Claude Code (Anthropic), icons included; the protocol core is upstream matrix-rust-sdk.
Source, issues, releases:
https://github.com/JimKnopfIoT/harbour-xmatic
| Attachment | Size | Date |
|---|---|---|
| 15.89 MB | 29/08/2026 - 20:39 | |
| 16.39 MB | 29/08/2026 - 20:39 |
- The page that says what is not yet in order was itself not in order. Its
frame ran along the very top edge of the display and so passed under a camera
cutout, and it stopped where the text stopped instead of reaching the bottom
of the screen - a third of the display below it, empty, which reads as a
broken layout. Both fixed.
- It also asked for a recovery key from accounts that have none. "Not set up"
and "not unlocked on this device" are different situations and want opposite
advice; the page now says which of the two it is, and offers to set a backup
up rather than pointing at a key that cannot exist.
- The encryption page did the same in its own way: "Unlock backup" stood there
whatever the account looked like, and an attempt then came back with the
library's own words about account data. That section is only shown where
there is something to unlock.
Comments
stiltskin
Sun, 2026/08/30 - 12:36
Permalink
impressive progress!
are there plans to implement 'new' audiocalls method later?
dumol
Sun, 2026/08/30 - 08:23
Permalink
Impressive work... Unfortunately, can't see bridged rooms on Beeper, even though I find
"org.matrix.simplified_msc3575":trueat https://matrix.beeper.com/_matrix/client/versions. Any ideas? Thanks!Sharks
Sun, 2026/08/30 - 03:09
Permalink
A new bug I have noticed, attempting to play a video sent to me (via mautrix-meta, but probably from other sources too) crashes the app. Pictures come through fine, but videos are impossible to view.
JimKnopfIoT
Sun, 2026/08/30 - 08:14
Permalink
@Sharks I can't reproduce it yet: mp4 videos play fine on all three of my devices, so it's likely something specific to the file or the device. A few things would let me pin it down:
1. Device model, cat /etc/sailfish-release (the VERSION_ID line) and rpm -q harbour-xmatic.
2. When exactly does it die — while the spinner is still turning, or after the first frame appears? Roughly how many seconds after you tap?
3. The journal while it happens. In a terminal: devel-su journalctl -f, then reproduce and send the last ~30 lines.
A kernel line with segfault or code=dumped is what I'm after.
4. Open the video page, wait for the spinner to finish, then use the pulley menu → Save. Does saving work? If yes, play that file from Downloads with the stock Gallery/video app. If the stock player fails too, it's the platform's codec support, not xmatic.
5. About the file: how large is it in MB, and is the room encrypted? If you can run ffprobe -hide_banner -i video.mp4 on a PC, that output answers everything at once. On the phone, head -c 4096 video.mp4 | strings |head -20 also helps — I'm looking for avc1 (H.264) versus hvc1/hev1 (HEVC) or av01 (AV1).
6. Does it happen with every video, or only ones from that bridge? A video sent from another Matrix client would be a useful comparison.
kempertom
Wed, 2026/08/26 - 12:09
Permalink
Such great work. I have an issue: I am using matrix chat with bridges to avoid using android. Voicenotes work with xmatic with mautrix (WhatsApp bridge) and the Telegram bridge, but not for the most important Signal bridge. It says that audio format is not supported for bridging. Maybe ist is possible from xmatic side?
JimKnopfIoT
Sun, 2026/08/30 - 08:46
Permalink
Fixed.
JimKnopfIoT
Wed, 2026/08/26 - 23:43
Permalink
Please try 0.24 and report if it's fixed for you.
Sharks
Tue, 2026/08/25 - 07:54
Permalink
Latest 0.22 update is great, very glad to see reaction support added. This now fully replaces Hydrogen for me on SFOS. Thankyou for your work!
The only feature I would still want for is an option to show the message content in notifications like an SMS notification would. Requiring to unlock the phone and open the app to see a message you may not be interested in responding to is a minor annoyance.
JimKnopfIoT
Sun, 2026/08/30 - 08:46
Permalink
Fixed.
stiltskin
Sun, 2026/08/23 - 15:24
Permalink
seems like there is no read status for messages (sent/read)
JimKnopfIoT
Sun, 2026/08/30 - 08:45
Permalink
Fixed.
windes
Fri, 2026/08/21 - 10:15
Permalink
Wow, man!! First impression - GREAT! UI is smooth and nice, all balanced. Did you do UI by yourself, manually, not with AI?
Can't open page with user info. There's no this feature for now?
Sailfish 5.1.0.11, armv7hl - all is working)
Nice description, monumental, by the way. All questions gone right after read it. No water, strict and needed, every word.
Do you have a group of xmatic in matrix?
Sharks
Fri, 2026/08/21 - 07:57
Permalink
Looks promising! Unfortunately while I can login, I just see "Offline - Waiting for the network" glitching and flashing up the top, none of my chats get loaded.
JimKnopfIoT
Fri, 2026/08/21 - 21:00
Permalink
@Sharks Please read the new REQUIREMENTS section above and try again with the latest Version (> 0.19.0).
Sharks
Sat, 2026/08/22 - 03:57
Permalink
It appears I am missing msc4186, thanks. Will have to look into it.
Sharks
Mon, 2026/08/24 - 06:29
Permalink
Have decomissioned my Dendrite server and spun up a Synapse one. xmatic is now working beautifully! Thanks very much. Keen to see further development, looks like a great app already.
kempertom
Wed, 2026/08/19 - 11:19
Permalink
Will it be frequently maintained? I have wishes and Ideas...
sourcrowd
Tue, 2026/08/18 - 21:49
Permalink
Thank you! With this client I'm finally able to login on a homeserver, that requires SSO for which the Firefox 91 WebView that SFOS 5.1 bundles, is too old.
kaulian
Tue, 2026/08/18 - 16:11
Permalink
Thanks a lot.
Manisak
Tue, 2026/08/18 - 14:21
Permalink
Damed I Love you ;-)
kempertom
Tue, 2026/08/18 - 14:13
Permalink
Wow. Wonderful. What are you plan to implement?