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, (initially there were very few alternatives to element-desktop which notify, and stay hidden in my tray (unlike neochat, though it has push notifs via kunifiedpush, while this currently polls) while not being as heavy. This kinda is heavy (though not as much), until i find a better solution for notifs on desktop). 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 with a proper consumer-focused goal)
This is experimental‑stage software. If you use it, assume things may break. (Do open an issue if you'd like to :)
- Room list with basic previews and unread counts
- Room and thread timelines (text, media, polls)
- End‑to‑end encryption (via matrix‑sdk)
- Spaces browser
- Simple presence / privacy settings
- Android app and Linux desktop builds (AppImage, AUR
mages-bin) - Unsigned Windows and Mac builds
- Experimental Call Support
-
Android
- Signed APKs and AABs are published on GitHub Releases.
- F‑Droid metadata is planned; for now you can sideload the APK.
-
Linux desktop
- AppImage builds for x86_64 and aarch64.
- AUR: wraps the AppImage.
- Other package formats (Snap) may follow.
-
Other platforms
- The UI is Compose Multiplatform. In practice, only Android + Linux AppImage are actively tested. Windows and Mac are tested rarely and are not signed.
-
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)
- On 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# Build Rust JNI + desktop distribution
cargo build --release --manifest-path rust/Cargo.toml
./gradlew :desktopApp:genUniFFIJvm :desktopApp:packageDistributionForCurrentOS
# AppImage is assembled by the desktop release workflow| Platform | Version |
|---|---|
| F-Droid | |
| AUR |
Issues and small PRs are welcome. Please keep changes focused and self‑contained.
- Rust changes: try to keep the FFI surface small and stable.
- Kotlin changes: avoid expensive work in composables; use ViewModels and background dispatchers.
Mages is licensed under the GNU AGPL v3 (see LICENSE).