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

  1. Launch Fractal and enter your Matrix homeserver URL (e.g. https://matrix.org) along with your username and password.
  2. If your account uses single sign-on (SSO), Fractal will open the login page in your default browser.
  3. After login, verify your session from another trusted client or device to unlock end-to-end encrypted rooms.
  4. 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:

  1. Open Settings → Devices.
  2. Select another of your verified devices and confirm the emoji verification sequence on both sides.
  3. 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

FeatureFractalElement (web/desktop)
Native GNOME integration❌ (Electron)
End-to-end encryption
Spaces support
Threads❌ (in progress)
VoIP / video calls❌ (in progress)
Widgets / integrations
Mobile-adaptive layoutPartial
Resource usageLowHigh (Electron)