Serein
Rust로 만든 가볍고 성능 좋은 Discord 전용 네이티브 클라이언트
Tesseract Linux, Windows, macOS용 네이티브 Matrix 데스크톱 클라이언트
Tesseract is a full-featured, truly native desktop Matrix client for Linux, Windows and macOS, built on the Matrix Rust SDK. Try the interactive simulator.
소셜C++ · RustGitHub @surakin온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
A full featured native desktop Matrix Client
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
The native desktop Matrix client you always wanted.
(If you don't know what Matrix is - not THE matrix, unfortunately, no one can be told what that is - go here before reading forward)
A full featured desktop multiplatform (Linux, Windows, Mac) Matrix client built on the Matrix Rust SDKREADME 전문 보기 ↗The native desktop Matrix client you always wanted.
(If you don't know what Matrix is - not THE matrix, unfortunately, no one can be told what that is - go here before reading forward)
A full featured desktop multiplatform (Linux, Windows, Mac) Matrix client built on the Matrix Rust SDK
⚠️ Tesseract only works with homeservers running Sliding Sync — login will fail if the server does not support it. The preferred login method is via the Matrix Authentication Service (MAS) / OAuth2; homeservers without MAS can fall back to plain username/password login for existing accounts. Legacy account registration is not supported.
Grab whichever fits your system. Every release, with all the installers attached, lives on the GitHub Releases page; the website has the same links as buttons.
Flatpak (updates through GNOME Software / KDE Discover once installed). Tesseract is served from its own repo rather than Flathub, but one command sets everything up, including the remote and the KDE runtime from Flathub:
flatpak install --user https://surakin.github.io/tesseract/io.github.surakin.Tesseract.flatpakref
flatpak run io.github.surakin.Tesseract
Drop --user to install system-wide. If you'd rather not add a remote, each release also has a single .flatpak file you can install with flatpak install ./tesseract-vX.Y.Z.flatpak, though that one won't auto-update.
Other options:
tesseract-matrix on the AUR for releases, or tesseract-matrix-git to always track the latest changes..deb from the Releases page..rpm from the Releases page.chmod +x it and run..exe) from the Releases page.Download the .dmg for your CPU (Apple Silicon or Intel) from the Releases page and drag Tesseract into Applications.
The DMGs are Developer ID signed and notarized, and need macOS 13 (Ventura) or newer.
If you'd rather build it yourself (or there's no package for your distro), you need a C++20 compiler, CMake, Ninja, a Rust toolchain (via rustup), and the UI toolkit's dev packages. docs/BUILD.md has the exact package lists per platform. Then, on Linux:
git clone https://github.com/surakin/tesseract
cd tesseract
cmake --preset linux-release
cmake --build build/linux-release
./build/linux-release/ui/linux-qt/tesseract # Qt6 UI
./build/linux-release/ui/linux-gtk/tesseract # GTK4 UI
Qt6 is the main Linux UI and the one that gets the most development and testing. The GTK4 port is kept working but is not the primary target, so expect the odd rough edge there.
The preset builds both UIs; if you only have one toolkit installed, pass -DTESSERACT_UI= to pick (see BUILD.md). The first build compiles the whole Matrix SDK, so expect it to take a while. Other platforms use their own presets, also listed in BUILD.md.
Planning to hack on Tesseract rather than just run it? Use linux-debug instead (same commands, build/linux-debug output) and see Contributing.
Come join us in #tesseract-client:matrix.org!
| Linux (Qt6) | Linux (Gtk4) | Windows | macOS |
|---|---|---|---|
| Threads — reply in a side panel without leaving the conversation | Room info — members, roles and presence at a glance |
| Emoji picker — search, categories and skin tones | Settings — themes, accent colours and message layouts |
@ autocomplete and rich pills; :emoji: shortcode autocomplete/gif (animated preview strip in the picker; works in encrypted rooms)--help, --profile, --hidden, --open-room, --logoutall, …) are listed in docs/CLI.md.m.login.password) login for already existing accounts.The Matrix Spec Change proposals Tesseract implements are listed in docs/MSCS.md.
| Platform | Minimum OS | Architecture |
|---|---|---|
| Windows (Win32) | Windows 10 version 1607 (Anniversary Update) | x86-64 |
| macOS (AppKit) | macOS 13 Ventura | Apple Silicon (arm64) or Intel (x86-64) |
| Linux — Qt6 | Debian 12 (Bookworm) / Ubuntu 24.04 LTS or newer | x86-64 |
| Linux — GTK4 | Debian 13 (Trixie) / Ubuntu 24.04 LTS or newer (GTK ≥ 4.12) | x86-64 |
I've been a developer for more than 20 years, ran my own homeserver for more than 8, and developed a few things here and there in the matrix ecosystem (hello, encrypted sticker support on Element X!). I am also a bit tired of everything being a bloated web app (with all the respect to the element web guys), so I decided it was time to do something about it. I mean, seriously. Does EVERYTHING need to be a browser?
This started as a Claude Code experiment, because eventually I gave up and decided to learn what all this fuss was about, at least to be less worried about being out of a job, if that ever happens. So I thought: what was the app I always wanted to do my way and never had the time and/or energy? Yes! A Matrix client, of course.
So I paid for a month of Claude Max and set myself to see if I could create a full blown Matrix client in that time. Apparently, it can be done, but I don't recommend it; it can be quite time consuming anyway.
It's important to point out that EVERYTHING related to the matrix protocol and communication with the homeserver goes through the matrix-rust-sdk. I didn't set to reimplement the protocol, or encryption, or any of the most sensitive parts of a matrix client, because that would be stupid, and we have this awesome piece of code already written by humans way smarter than any LLM.
I used Claude to write everything else: a C++/Rust bridge to be able to use the SDK from a shared toolkit library and the four platform-specific thin shells.
If you don't like or trust AI-assisted developed apps, that's fine. I'm not sure I do, but this one I made, reviewed the code, and I'm kinda sure what it's doing inside.
Bottom line, I made this little client, and I barely open element these days, which was sort of the point. The code is open, you can see everything, and any positive contribution/criticism is welcome.
The app is mostly complete and can be used for existing accounts and new accounts. I'm curious to see if there is any interest for it out there. I expect to keep polishing it and updating it as the matrix spec evolves. But I do have a day job, and it's not this one :) So I can't promise things are going to be fixed immediately.
There are a few things missing here and there, but I plan to add them as soon as I can.
Also I don't speak as many languages as I would like to, so translations are a bit lagging behind. I'll do something about that, when I learn how. Stay tuned.
Disclaimer: I have the same design talents as a brick, so even if I made my best effort to make it look good, I'm sure there is a lot of room for improvement.
I'm open to any kind of contribution, with only one caveat: UI parity. I did my best for the app to look more or less the same in all the platforms and I want to keep that.
If you don't care about UI parity or are interested in only one platform, you're welcome to fork it and make it yours! That's the beauty of open source, isn't it?
First of all, big kudos to the Matrix.org foundation and all their awesome people! And Anthropic, for Claude. It's been interesting, to say the least.
Tesseract stands on the work of many open-source projects.
The screenshot fixture's user avatars are generated from Lorelei by Lisa Wischofsky, and its room avatars use DiceBear Shapes. Both avatar sets are available under CC0 1.0.
| Library | Purpose | Author / Maintainer |
|---|---|---|
matrix-rust-sdk (-base, -ui) | Matrix client, sync, E2E encryption, timeline | The Matrix.org Foundation / Element |
| ruma | Matrix data types & event (de)serialization | The Ruma project |
| cxx | Safe Rust ↔ C++ FFI bridge | David Tolnay |
| tokio | Async runtime | Tokio project (Carl Lerche et al.) |
| reqwest | HTTP client (rustls-TLS) | Sean McArthur |
| serde / serde_json | Serialization framework | David Tolnay & Erick Tryzelaar |
| futures-rs | Async combinators | The Rust futures-rs team |
| anyhow | Error handling | David Tolnay |
| tracing | Structured logging | Tokio project |
| url | URL parsing | The Servo project |
| rusqlite | SQLite bindings | The rusqlite project |
Tesseract is licensed under the GNU General Public License v3, with an additional permission (GPLv3 section 7) for distribution through the Apple App Store.
_WIN32_WINNT=0x0A00. GetDpiForWindow
and per-monitor-v2 DPI awareness require Windows 10 1607; Windows 11 is
also supported. The rendering stack is Direct2D + DirectWrite + WIC and
audio uses Media Foundation, all present from Windows 10.LSMinimumSystemVersion are both 13.0.
Builds are per-architecture (arm64 or x86-64). Voice-message (MSC3245
opus) playback additionally requires macOS 14+; the rest of the app
runs on macOS 13+.GtkFileDialog,
gtk_css_provider_load_from_string), available from Debian 13 / Ubuntu
24.04 onward, plus GStreamer base/good plugins (for voice-message
playback); the system tray is a built-in StatusNotifierItem D-Bus
implementation and needs no AppIndicator package.rustup on distros that ship an
older toolchain). See
docs/BUILD.md for build setup and
PACKAGING.md for building installers.| syntect | Code-block syntax highlighting | Tristan Hume |
| audiopus | Opus codec bindings (voice) | Lars Wirth |
| ogg | Ogg container parsing (voice) | RustAudio |
| mime | MIME types | Sean McArthur |
| Qt6 (Core, Gui, Widgets, Multimedia, DBus, Concurrent, Network) | Linux (Qt6 shell) | The Qt Company / Qt Project |
| GTK4 + Pango / Cairo / gdk-pixbuf | Linux (GTK shell) | The GNOME Project |
| GStreamer (+ gst-plugins-base for Opus) | Linux video and animated-image decode, camera/screen capture, call video, GTK voice playback | The GStreamer Project |
| Win32 / Direct2D | Windows | Microsoft |
| BetterText (vendored) | Windows compose text control (D2D/DirectWrite) | surakin |
| AppKit / CoreGraphics / CoreText | macOS | Apple |
| libwebp via libwebp-sys / webp (BSD-3-Clause) | Animated WebP avatar encode; macOS animated WebP sticker decode | Google / The WebP project |
| jxl-oxide (MIT OR Apache-2.0) | JPEG XL image and animation decode | Tirr |
| nanosvg (vendored) | SVG icon rasterization | Mikko Mononen (incl. AntiGrain code by Maxim Shemanarev) |
| Lucide (ISC) | UI icon set | The Lucide Contributors (community fork of Feather) |
| nlohmann/json | C++ JSON parsing | Niels Lohmann |
| Catch2 | C++ unit test framework | Martin Hořeňovský et al. |
| Corrosion | CMake ↔ Cargo bridge | The Corrosion project |
| CMake | Build system | Kitware |
| Ninja | Build backend | Evan Martin / Google |