A clean, fast, GNOME-native email client — built with Rust and libadwaita, privacy-first.
Website ·
Release notes ·
Releases
Veem is a desktop email client for Wayland that feels at home in GNOME. It talks IMAP/SMTP directly, keeps your mail and credentials on your machine, and blocks trackers by default — no telemetry, no analytics.
- Multiple accounts — IMAP and POP3, each on its own background worker, with a unified All Inboxes view.
- OAuth 2.0 sign-in — Google, Microsoft and custom providers over XOAUTH2, plus import from GNOME Online Accounts.
- Whole-mailbox sync & search — no message-count cap; a fast first page loads instantly, the rest indexes in the background with infinite scroll.
- Two-way sync — deletions and moves from your phone or another client sync back automatically (IMAP IDLE + reconciliation).
- Conversation threading, compose/reply/forward with HTML signatures, editable drafts, and full folder management.
- Privacy-first reading — remote content blocked by default, per-sender allow/block lists, and a per-message light/dark content theme.
- GNOME-native — adaptive three-pane layout, per-account colours and emoji avatars, light/dark following the system, optional GNOME Contacts.
See RELEASE_NOTES.md for the full list.
Veem needs the Rust toolchain and the GTK 4 / libadwaita / WebKitGTK 6 development libraries, plus a Secret Service provider (e.g. gnome-keyring) at runtime.
Fedora
sudo dnf install gtk4-devel libadwaita-devel webkitgtk6.0-develDebian / Ubuntu
sudo apt install libgtk-4-dev libadwaita-1-dev libwebkitgtk-6.0-devBuild & install
git clone https://github.com/hyprlab/veem.git
cd veem
cargo build --release
./install.sh # installs the binary, icon and .desktop file into ~/.localAdd accounts from Settings → Accounts in the app. For a plain IMAP/SMTP
account you only need the server and an app-specific password. See
accounts.toml.example for the on-disk format —
passwords you enter there are migrated into the system keyring on first run and
removed from the file.
Microsoft works out of the box — pick Microsoft in the account editor and sign in.
Google signs in through GNOME Online Accounts — add your Google account in GNOME Settings → Online Accounts, then import it in Veem. Official builds don't bundle a Google OAuth client (Google's secret can't live in a public repo), so GNOME Online Accounts is the standard path. You can also use your own OAuth client (see below).
To use your own OAuth client (a fork, a self-hosted build, or to replace the
bundled ones), put it in ~/.config/veem/oauth.toml:
[google]
client_id = "your-client-id.apps.googleusercontent.com"
client_secret = <
6DC0
span class="pl-s">"your-client-secret"
[microsoft]
client_id = "your-azure-application-client-id" # public client, no secretor via the VEEM_GOOGLE_CLIENT_ID / VEEM_GOOGLE_CLIENT_SECRET and
VEEM_MICROSOFT_CLIENT_ID / VEEM_MICROSOFT_CLIENT_SECRET environment variables.
Bundling a Google client at build time (for maintainers) — set the env vars
during the build and they're compiled in via option_env!:
VEEM_GOOGLE_CLIENT_ID=... VEEM_GOOGLE_CLIENT_SECRET=... cargo build --releaseVeem collects no telemetry and sends no analytics. Remote content in messages is blocked by default to defeat tracking pixels. Passwords and OAuth refresh tokens live in the system keyring (secret-service), never in plain files.
- Website — getveem.com
- Email — hyprlab@proton.me
- Buy me a coffee ☕
Veem is free software licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).
© 2026 Hyprlab