Mages is an experimental matrix chat client.
- UI: Compose Multiplatform
- Core: a Rust library built on top of matrix-rust-sdk, exposed to Kotlin via UniFFI (not using matrix-sdk-ffi)
The goal was to have a cross‑platform desktop/mobile client, while not being as heavy as web apps (initially there were very few alternatives to element-desktop which notify, with proper screen-sharing support and that stay hidden in my tray (unlike neochat, though it has linux-specific push notifs via kunifiedpush, while this currently polls)). Although it might occasionally appear stable, it is never aiming to be as stable as element's clients (or other clients like fluffy or fractal which seem to have a user-focused goal)
This is experimental‑stage software. It is still in its early stages, and might lack common features or have (game/use-breaking?) bugs (do open an issue if you've encountered any)
- Room list with previews and unread counts
- Room and thread timelines (text, media, polls, live-location sharing)
- End‑to‑end encryption (via matrix‑sdk)
- Spaces support
- Simple presence / privacy settings
- Android app and Linux desktop builds (Available on/as FDroid, AppImage (updatable via
Gear Leverfor example), AUR (mages-bin), snapcraft and flathub) - Unsigned Windows and Mac builds
- Experimental Audio and Video Calls Support (Screen sharing is only available on desktop)
- Multi account and language (currently only spanish) support
-
Android
- Signed APKs and AABs are published on GitHub Releases, or are downloadable via F-Droid (does sometimes lag behind).
-
Linux desktop
- AppImage builds for x86_64 and aarch64.
- Also downloadable via AUR and snap-store.
-
Other platforms
- The UI is Compose Multiplatform. In practice, only Android and Linux's AppImages are actively tested. Windows and Mac are tested rarely and are not signed/notarized. Web works, but isn't supposed to have feature parity (no search functionality), and mostly useful for testing latest changes live or previewing the app.
-
Rust core
- Uses
matrix-sdkandmatrix-sdk-uifor sync, room list, timelines, E2EE, etc. - Exposed as a UniFFI library (
mages_ffi) that Kotlin/JVM can call.
- Uses
-
Kotlin UI
- Compose Multiplatform for Android and desktop.
- Koin for dependency injection.
- ViewModels for state, backed by the Rust core.
Most Matrix‑specific logic lives in Rust; Kotlin mostly handles presentation.
- JDK 21
- Kotlin/Gradle
- Rust toolchain (stable)
- For Android:
- Android SDK + NDK (see
android-releaseworkflow for versions) cargo-ndk(for building the Rust library for Android ABIs)
- Android SDK + NDK (see
./gradlew :androidApp:assembleRelease
# APKs end up under androidApp/build/outputs/apk/release./gradlew :desktopApp:run
# AppImage is assembled by the desktop release workflow| Platform | Version |
|---|---|
| F-Droid | |
| AUR | |
| Flathub | |
| Snap Store |
Issues and small PRs are welcome. Please keep changes focused and self‑contained.
Mages is licensed under the GNU AGPL v3 (see LICENSE), with all the artwork, logos, and visual assets being licensed under a CC BY-SA 4.0 License.