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, 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
- 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
- 27 interface languages, switchable in the app
LANGUAGES
The interface is available in the 24 official languages of the European Union
plus Russian, Norwegian and Icelandic. Norwegian was contributed by a Norwegian
speaker. 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. Where the system's secure storage hands out no key, the app keeps
working with unencrypted storage rather than refusing to start - and says so on
the encryption page instead of only in the log. Where a database simply
predates the key, that page offers to re-create it encrypted.
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.46 MB | 23/08/2026 - 02:14 | |
| 15.98 MB | 23/08/2026 - 02:14 |
- Formatted messages are shown as formatting instead of as raw text. Bold,
italic, code blocks, quotes, lists, headings and links now render; what a
message carries as HTML is rewritten inside the app into the small markup
Qt can draw, character by character, so nothing a sender wrote is ever
handed to a markup parser. Pictures in a message body become their
description rather than a download, sender-chosen colours are dropped, and
a link keeps its target only if that target is an ordinary web address -
whether it can be tapped at all is still the setting under Account.
- The app now says when it is storing your session and messages unencrypted.
It has always fallen back to unencrypted storage when the device's secure
storage would not hand out a key, and it has always said so only in the
system log, which is not somewhere anyone looks. The encryption page names
the state and the reason. Where an encrypted store is possible but the
existing one predates it, it also offers the one operation that works:
sign out, sign back in. That deletes this device's keys, so it is refused
unless a key backup exists on the server.
- Two copies of the app can no longer run on the same data. The client runs
its database without the SDK's cross-process lock, which is a deliberate
choice - the lock cost about fifty disk syncs per second while idle - but
it is only safe with one process, and nothing was enforcing that. A lock
file taken before the database opens does now; a second start hands over to
the running one.
- The recovery key is treated like the login password on its way into the
app: the buffer that carried it is overwritten, and the core wipes its own
copy. A key that was just generated has to stay readable long enough to
write it down, so that one is only dropped when the page closes.
- The interface is available in the twenty-four official languages of the
European Union, in Russian, Norwegian and Icelandic. It also no longer
simply follows the phone: Account now has a language of its own, English
included, because most of these are machine translations and one has to be
able to get back out of them. A change takes effect the next time the app
starts. Norwegian is the exception - most of it was contributed by a
Norwegian speaker, and German is the other one that has been read by one.
Comments
stiltskin
Sun, 2026/08/23 - 15:24
Permalink
seems like there is no read status for messages (sent/read)
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.
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?