xmatic

Rating: 
4.6
Your rating: None Average: 4.6 (10 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, written as well as read: bold, italic, struck through, underlined, monospace
- Polls: vote with a tap, take it back with another; create your own with several answers allowed or the
  results kept closed until the end. Only the creator can end a poll, and the app checks that itself
- Link previews, off by default: your homeserver fetches the page and the message shows its host, title
  and description. The setting says what the server learns and can limit previews to unencrypted rooms
- 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, as characters or as your own emoji pictures
- Pictures, files, sharing, share target from Gallery and file manager
- One picker for attachments, with the gallery and the file system side by side and several files at once
- Pictures are made smaller before they go out and lose their metadata with them, the place a photograph
  was taken included; the original resolution stays one tap away
- A camera in the attachment picker: flash, grid, tap to focus, zoom; a photo is deleted once sent
  unless you keep it in the gallery
- Locations, once or live for up to a day; maps from OpenStreetMap only where you allow it, zoomable
  in full screen
- Voice messages; voice and video calls (classic 1:1 VoIP)
- Speech2Text (needs Speech Note to be installed)
- Notifications, offline send queue, encrypted local storage
- Optional push notifications, off by default
- Bubble and text colours of your own or the ambience's, the return key as send key, the keyboard's
  behaviour after sending
- One page for what others learn: read receipts, message text in notifications, who may call, when pictures
  load, when downloaded media is deleted again
- An error log to read and copy when something goes wrong
- OAuth (MAS), device-code and password sign-in
- 32 interface languages, switchable in the app

LANGUAGES

The 24 official languages of the European Union plus Russian, Norwegian,
Icelandic, Simplified Chinese, Hindi, Japanese, Persian and Arabic. 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 ~20 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, 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.

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.45.0-1.aarch64.rpm19.82 MB08/10/2026 - 21:21
File harbour-xmatic-0.45.0-1.armv7hl.rpm20.27 MB08/10/2026 - 21:21
Changelog: 

- Video calls work on phones whose camera gives no pictures to the call
directly: after three seconds without one, the call takes them from the
call page's own viewfinder, upright and the right way round in either
orientation. Elsewhere the camera is used as before.
- The camera no longer shut itself down when the system restarted its picture
during start-up, and prefers a 4:3 picture, which the call sends
unstretched.
- A video call whose camera stays dark goes on as a voice call with the call
page open; before, it ran on with no way to hang up.
- A call whose other side vanished without hanging up ends after 15 seconds
without anything received, instead of holding both phones in it and
refusing every later call as busy. Closing the app during a call hangs up
and waits up to a second for that to go out; signing out, or a session that
ends, hangs up too.
- Turning down a call while busy no longer cuts the running call's room off
from the fast sync.
- The call page has one row of controls, with or without a picture; declining
is the same symbol as hanging up.
- What a finished call's media threads still had in flight can no longer
reach the next call, and quitting after a call no longer releases the sound
routing while it is still in use.
- Web links are found whatever the case of their scheme ("Https://", as the
keyboard writes it), and an address without a scheme such as example.org
is a link that opens as https, in messages without formatting. File names
like README.md or logo.ai are left alone.
- "Open link?" in a message's menu asks with the address it really goes to,
as a tap does; a formatted link's text can name another site.
- A push that wakes the closed app uses the app's own data folder and
settings and never asks the secure storage, so no unlock dialog can appear
from the background. It shows "New message" as before, and starting the
app meanwhile is no longer blocked by it.
- Signing in, restoring the session and signing out no longer run into each
other. A sign-in still waiting for the browser or the other device is
stopped by signing out and writes nothing afterwards; an expired session is
cleared only if it is still the current one.
- Without its key, the session file is never rewritten in plain text over an
encrypted one, and signing out also removes a half-written copy of it.
- Importing emoji pictures no longer flags the set as tampered with while the
files are being rewritten.

Comments

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?

Pages