Fractal
A Matrix messaging client for GNOME, built in Rust with GTK4 and libadwaita for a native desktop experience.
Fractal is a Matrix messaging client for the GNOME desktop, written in Rust
using GTK4 and libadwaita. It targets the GNOME Human Interface Guidelines and
integrates natively with the GNOME platform — notifications, the system keyring,
and adaptive layouts for both desktop and mobile form factors. The backend is
powered by the matrix-rust-sdk,
giving it a solid, well-tested implementation of the Matrix protocol rather than
a hand-rolled one.
Features
- Native GNOME integration — follows the GNOME HIG, uses libadwaita widgets, and respects system themes including dark mode.
- End-to-end encryption — full E2EE support via the matrix-rust-sdk, including device verification, cross-signing, and encrypted media.
- Adaptive layout — the UI scales down to phone-width displays, making it suitable for Linux phones (PinePhone, Librem 5) as well as the desktop.
- System keyring storage — credentials are stored securely via the Secret Service API (GNOME Keyring or KWallet) rather than in plaintext config files.
- Rich media support — inline display of images, video, and audio attachments, and file upload from the file chooser.
- Rooms and spaces — browse, join, and organise rooms; supports Matrix spaces for grouping related rooms.
- Message actions — reply, react with emoji, edit, and redact messages.
- Notification settings — per-room and global notification control, including mentions-only and muted modes.
- Multiple accounts — connect to multiple Matrix homeservers simultaneously.
Installation
Fractal is distributed primarily as a Flatpak, which is the recommended installation method on any Linux distribution.
# Flatpak (recommended — works on Debian, Fedora, Arch, and all others)
flatpak install flathub org.gnome.Fractal
If Flatpak is not yet set up, add the Flathub remote first:
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo# Fedora (native package, may lag behind the Flatpak release)
dnf install fractal
# Arch Linux (AUR)
yay -S fractal
# Nix
nix-env -iA nixpkgs.fractal
# Debian / Ubuntu
# Not available in the default apt repositories.
# Use the Flatpak above for the current release.Quick Start
- Launch Fractal and enter your Matrix homeserver URL (e.g.
https://matrix.org) along with your username and password. - If your account uses single sign-on (SSO), Fractal will open the login page in your default browser.
- After login, verify your session from another trusted client or device to unlock end-to-end encrypted rooms.
- Browse your room list in the left sidebar. Click a room to open it, or use the search bar to find and join new rooms.
End-to-end encryption
Fractal handles E2EE through the matrix-rust-sdk's built-in cryptography layer, which is based on the vodozemac Rust implementation of the Olm and Megolm protocols.
To verify your identity across devices:
- Open Settings → Devices.
- Select another of your verified devices and confirm the emoji verification sequence on both sides.
- Once cross-signed, encrypted rooms become fully accessible and messages from verified contacts show a lock indicator.
Building from source
Fractal requires a recent stable Rust toolchain, GTK4, libadwaita, and several GNOME platform libraries.
# Install build dependencies on Fedora
dnf install gtk4-devel libadwaita-devel gstreamer1-devel \
gstreamer1-plugins-base-devel openssl-devel sqlite-devel
# Install build dependencies on Debian / Ubuntu
apt install libgtk-4-dev libadwaita-1-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libssl-dev libsqlite3-dev
# Clone and build
git clone https://gitlab.gnome.org/World/fractal.git
cd fractal
cargo build --release
The recommended way to build and run for development is with GNOME Builder, which handles the Flatpak SDK automatically.
Fractal vs Element
| Feature | Fractal | Element (web/desktop) |
|---|---|---|
| Native GNOME integration | ✅ | ❌ (Electron) |
| End-to-end encryption | ✅ | ✅ |
| Spaces support | ✅ | ✅ |
| Threads | ❌ (in progress) | ✅ |
| VoIP / video calls | ❌ (in progress) | ✅ |
| Widgets / integrations | ❌ | ✅ |
| Mobile-adaptive layout | ✅ | Partial |
| Resource usage | Low | High (Electron) |