xmatic

Rating: 
5
Your rating: None Average: 5 (6 votes)

Native Matrix client built on matrix-rust-sdk with a Silica UI.

FEATURES

- Sliding sync, end-to-end encryption, cross-signing, device verification, key backup and recovery
- Rooms, spaces (nested), direct chats, threads, room directory search
- Create rooms, invite, leave; member list and profiles with moderation
- Send, edit, delete, reply and paginate in encrypted rooms
- Search a conversation; the index stays on the device, the query never leaves it
- Formatted messages, pinned messages, favourites, low priority, mute, ignore list
- A line marks where reading stopped, and who has read what
- Four coloured lines for backup, recovery, cross-signing and local storage
- Reactions from a picker whose first tab you fill yourself *
- Pictures, files, sharing, share target from Gallery and file manager
- Voice messages; voice and video calls (classic 1:1 VoIP)
- Notifications, offline send queue, encrypted local storage
- Optional push notifications, off by default
- OAuth (MAS), device-code and password sign-in
- 29 interface languages, switchable in the app

LANGUAGES

The 24 official languages of the European Union plus Russian, Norwegian,
Icelandic, Simplified Chinese and Hindi. German is the project language and
Norwegian came from a Norwegian speaker; the rest are machine translations,
usable but unchecked. The language is set in the app and applies at the next
start.

Corrections are welcome at the repository below: translations/harbour-xmatic-
<language>.ts, and translations/STATUS.md says which have been read.

LOCAL STORAGE

Session tokens and the message database are encrypted with a key from Sailfish
Secrets. Without that key service nothing is written at all: the app says what
is missing and how to install it. A database that predates the key can be
re-created encrypted from the encryption page, which costs one sign-out and
your recovery key.

WHY IS THE PACKAGE SO BIG?

The complete Matrix stack ships statically: matrix-rust-sdk, E2EE, sliding
sync, rustls, an HTTP runtime and SQLite. None of it exists as a system library
here, and Qt 5.6 is too old for the C++ alternatives. Installed ~60 MB,
RPM ~18 MB.

NO BACKGROUND DAEMON

Messages arrive while the app is running; the cover is enough. A closed app
does not receive, unless push notifications are switched on.

ARCHITECTURES

aarch64 (Sailfish OS 5.0+), armv7hl (Sailfish OS 4.6+), tested on J2, X10III and Gemini PDA.

REQUIREMENTS

Your homeserver must support simplified sliding sync (MSC4186), the same
mechanism Element X uses. To check, open
        https://YOUR-SERVER/_matrix/client/versions
and look for "org.matrix.simplified_msc3575": true

Sign-in: OAuth 2.0 / Matrix Authentication Service, device code, or username
and password on servers without OAuth. The SSO redirect (SAML, CAS) is not
supported.

* REACTIONS

By default, reactions are drawn as monochrome text characters. Sailfish ships the Twitter Color Emoji font (Twemoji), but Qt on Sailfish renders only its black-and-white outlines — always correct, just colourless.
If you prefer colourful emoji, you can use any emoji image set, for example Twemoji as SVG images: unpack it into your Downloads or Public folder and import it under Account → Appearance (at the very bottom).
During the import xmatic runs a small security check on every picture and copies the set into its own storage (under the app's data directory), recording a SHA-256 checksum per picture — each image is verified against it before it is shown. Your unpacked folder is not needed afterwards. "Remove the emoji pack" deletes only xmatic's own copy, never the folder you imported from.
Nothing is bundled and nothing is downloaded by the app itself.

Written with Claude Code (Anthropic), icons included; the protocol core is
upstream matrix-rust-sdk.

Source, issues, releases:
https://github.com/JimKnopfIoT/harbour-xmatic

Screenshots: 
Application versions: 
AttachmentSizeDate
File harbour-xmatic-0.28.3-1.aarch64.rpm18.4 MB04/09/2026 - 23:28
File harbour-xmatic-0.28.3-1.armv7hl.rpm18.91 MB04/09/2026 - 23:28
Changelog: 

- Messages can be formatted. Hold a word in the message field to mark it, then
bold, italic, struck through, underlined or monospace from the row above.
Markers typed by hand work the same way, and what goes out carries the
formatting other clients read.
- Struck-through and monospace text from other clients is drawn as such. It
never was: the platform's text renderer has no tag for either.
- New switch under Appearance: the return key sends the message. Off it makes
a line break, as before, and only the arrow sends. Where it sends, holding
the send arrow makes the line break instead.
- The keyboard stays up after sending where the setting says so. It never did:
the send arrow is a press outside the message field, and that clears its
focus on its own.
- One picker for an attachment, with two tabs: the gallery, divided by the
folders that exist, and the file system from the home folder down. Both
select several files at once, and they can be mixed.
- Pictures are made smaller before they go out and lose their metadata with
them, the place a photograph was taken included. A screenshot keeps every
pixel. "Send at original resolution" on the send page keeps a single picture
as it lies; a forwarded one is never re-encoded.
- The text field in the emoji picker says what it does: your text becomes the
reaction. It was read as a search field, which it is not.
- A message's actions are ordered by how often they are wanted: what deletes at
the top, what answers at the bottom.
- The conversation no longer jumps while the keyboard opens.
- Switching rooms no longer leaves a red error on the account page.

Comments

kaulian's picture

Hello, Same revsiew for me about the new message action page for me

Sharks's picture

Thanks for continuing to develop this app.
Unfortunately, the latest update, which moves message actions to a new page rather than a context menu, has broken reactions. Selecting the react option just takes you back to the conversation without being asked for an emoji to react with.
On a personal note, I prefer the previous UI despite the drawbacks documented in the changlog. It's harder to choose what you want to do with the message (reply, react, forward, delete, etc.) when you can't see it onscreen

JimKnopfIoT's picture

@Sharks Yeah, you're right. I (and others) don't like the extra page either. It's a workaround for the Gemini in landscape mode. But it doesn't have that Sailfish feel. One critical comment called it “Windows 95-like.” It was a test/hotfix for an issue with the menu and the top message displayed, but it will be gone again starting with version 0.28.1.

stoefelz's picture

very nice

stiltskin's picture

impressive progress!

are there plans to implement 'new' audiocalls method later?

JimKnopfIoT's picture

@stiltskin This is a limitation by Jollas Qt 5.6. If, at some point in the future, call.element.io works in a native Sailfish browser, i can dig into it. Until then, it's a lost cause.

dumol's picture

Impressive work... Unfortunately, can't see bridged rooms on Beeper, even though I find "org.matrix.simplified_msc3575":true at https://matrix.beeper.com/_matrix/client/versions. Any ideas? Thanks!

Sharks's picture

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's picture

@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's picture

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's picture

Fixed.

JimKnopfIoT's picture

Please try 0.24 and report if it's fixed for you.

Sharks's picture

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's picture

Fixed.

stiltskin's picture

seems like there is no read status for messages (sent/read)

JimKnopfIoT's picture

Fixed.

windes's picture

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's picture

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's picture

@Sharks Please read the new REQUIREMENTS section above and try again with the latest Version (> 0.19.0). 

Sharks's picture

It appears I am missing msc4186, thanks. Will have to look into it.

Sharks's picture

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's picture

Will it be frequently maintained? I have wishes and Ideas...

sourcrowd's picture

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's picture

Thanks a lot.

Manisak's picture

Damed I Love you ;-)

kempertom's picture

Wow. Wonderful. What are you plan to implement?