Skip to content

Repository files navigation

Vireo logo

Vireo

A clean, fast, GNOME-native email client — built with Rust and libadwaita, privacy-first.

Website · Release notes · Releases · Discord
License: AGPL-3.0

Vireo showing a unified inbox in light mode


Note

Veem is now Vireo. As of v1.6.0 the app formerly known as Veem has a new name and icon — the old name was too easily confused with similarly named products. Same app, same code. Native installs migrate your data automatically; Flatpak users should install Vireo fresh and remove the old Veem app. getveem.com now redirects here.

Vireo 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.

Features

  • 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.
  • Outbox — a send that fails is kept and retried when the connection returns, not lost; queued messages can be edited, sent by hand or discarded.
  • Send later — schedule a message for tomorrow morning, Monday, or any date and time; it waits in the Outbox, editable, until then.
  • Cloud attachments — upload a large file to your own Nextcloud, ownCloud or OpenCloud and put a share link in the message, with an optional expiry and download password.
  • Message previews — the first one to three lines of each message under its subject in the list (or off).
  • Single-key shortcuts — Gmail-style j/k, r, a, d and friends, without a modifier (see below).
  • Printing — print a message with its sender, recipients and date, with an in-app preview that also saves straight to PDF.
  • Runs in the background (optional) — closing the window keeps mail arriving; Vireo appears under Background Apps in the GNOME system menu, and can start at login without opening a window.
  • Privacy-first reading — remote content blocked by default, per-sender allow/block lists, and a per-message light/dark content theme.
  • OpenPGP — read encrypted and signed mail, sign and encrypt what you send, and manage keys from Settings, through the GnuPG already on your computer. See OpenPGP below.
  • 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.

Keyboard shortcuts

Vireo can be driven from the keyboard without holding a modifier, in the style of Gmail and Geary. The scheme is off by default — a stray keystroke shouldn't archive mail — so switch it on first in Preferences → Message List → Single-key shortcuts. Press Ctrl+? (or F1, or Main Menu → Keyboard Shortcuts) at any time for this list in the app; the same key closes it again.

Move around Act on a message
j Next message r Reply
k Previous message R Reply to all
l Open the selected message f Forward
h u Back to the message list a Archive
w Next message in the conversation d Delete
b Previous message in the conversation ! Mark as spam
/ Search s Star or unstar
c Compose m Mark read or unread
? This list x Select the row (for a bulk action)

Esc backs out of a reply, forward or compose and returns you to the message list. It works whether or not single-key shortcuts are enabled — as does everything in the menus — and in a search field it still clears the search.

Keys never fire while you are typing: whatever has focus gets first refusal, so "archive" typed into the search box searches for it.

Installing

Flatpak (recommended) — works on any distribution, on x86_64 and aarch64 (ARM64); see vireo.hyprlab.co for the signed Flatpak repo. Installing from the repo picks the right architecture on its own:

flatpak install --user --from https://vireo.hyprlab.co/flatpak/co.hyprlab.Vireo.flatpakref

Prefer a direct download? Each release carries Vireo-x86_64.flatpak and Vireo-aarch64.flatpak; grab the one matching uname -m from the latest release and run flatpak install --user ./Vireo-*.flatpak — the bundle carries the repo address and signing key, so it still receives updates from the official repo. (A bundle holds a single architecture; the repo above holds both.)

Fedora — download the .rpm from the latest release and:

sudo dnf install ./vireo-*.x86_64.rpm

Gentoo — a community-maintained ebuild lives in bennypowers' overlay (thanks @bennypowers):

eselect repository enable bennypowers
emaint sync -r bennypowers
emerge -av mail-client/vireo

Nix — a community-maintained flake lives in tbaumann's fork (thanks @tbaumann):

nix run github:tbaumann/vireo

Arch, Debian/Ubuntu and Snap packages were discontinued after 1.7.0 — use the Flatpak (it works on every distribution) or build from source.

The RPM targets current Fedora releases (44+) on x86_64 only — on ARM, or on anything older, use the Flatpak or build from source. A Secret Service provider (e.g. gnome-keyring, preinstalled on GNOME) is needed at runtime for password storage.

Building from source

Vireo 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-devel poppler-glib-devel

Debian / Ubuntu

sudo apt install libgtk-4-dev libadwaita-1-dev libwebkitgtk-6.0-dev libpoppler-glib-dev

Build & install

git clone https://github.com/hyprlab/vireo.git
cd vireo
cargo build --release
./install.sh          # installs the binary, icon and .desktop file into ~/.local
./uninstall.sh        # removes them again (--purge also removes settings and the mail cache)

Configuration

Add 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.

OAuth (Google / Microsoft)

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 Vireo. 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/vireo/oauth.toml:

[google]
client_id = "your-client-id.apps.googleusercontent.com"
client_secret = "your-client-secret"

[microsoft]
client_id = "your-azure-application-client-id"  # public client, no secret

or via the VIREO_GOOGLE_CLIENT_ID / VIREO_GOOGLE_CLIENT_SECRET and VIREO_MICROSOFT_CLIENT_ID / VIREO_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!:

VIREO_GOOGLE_CLIENT_ID=... VIREO_GOOGLE_CLIENT_SECRET=... cargo build --release

OpenPGP (encrypted and signed mail)

Vireo can read OpenPGP-encrypted mail, check signatures, and sign and encrypt what you send. It does this through GnuPG (gpg), the same program the terminal command and other mail clients use, so your keys live in one place (~/.gnupg) and every program on the computer sees the same keyring. Nothing here needs a terminal.

What you need

  • The Flatpak build carries GnuPG and is set up already. A source or RPM install needs the gnupg2 package (on Fedora it is installed by default).
  • Vireo never stores a decrypted message on disk: an encrypted message is decrypted for the reading pane each time you open it, and its body and attachments are kept out of the cache.

1. Make a key for your address

Open Settings → OpenPGP. The top row says whether GnuPG was found. Under Your keys, click Generate…, pick the address the key is for, choose how long it lasts, and enter a passphrase twice. Vireo hands the passphrase to gpg over a pipe and does not keep it; from then on gpg asks for it when the key is used, and remembers it for a while (ten minutes by default, the normal gpg-agent behaviour). The key is a signing key with an encryption subkey, so it does both jobs.

If you already have a key, click Import… instead and pick the key file.

2. Give people your public key

Click the export button on your key's row and save the .asc file, then send it to the people who should write to you encrypted, or upload it wherever your provider publishes keys. The file holds only the public half; the secret half never leaves your keyring.

3. Get other people's keys

Vireo needs a person's public key to encrypt to them and to check their signature. There are four ways to get one, none of which need a terminal:

  • A signed message from someone whose key you don't have shows an amber shield beside their name. Click it and choose Fetch the sender's key. Vireo looks in the message itself first (many clients attach the key in an Autocrypt header), then asks the sender's provider (WKD), then the keyservers.
  • A message with a key file attached shows an Import OpenPGP key button on that attachment.
  • Under Settings → OpenPGP → Other people's keys, Fetch by address… looks a key up by email address, and Import… reads a key file.
  • A key someone sends you by any other route can be imported the same way.

4. Trust a key

An imported key checks signatures, but until you have vouched for it the shield stays amber and says the key is not trusted yet. Compare the key's fingerprint with the one its owner gives you in person, on their website or over another channel, then click Trust… on the key's row (or Trust this key… in the shield's popover). Vireo signs the key locally with your own, which is what turns the shield green. Trusting a key you have not checked lets an impostor's signature pass as theirs, so do check.

5. Send signed or encrypted mail

The composer has two buttons beside Send: Sign and Encrypt. Sign adds a signature others can check with your public key. Encrypt scrambles the message to every recipient's key and your own, and turns Sign on too. If a recipient has no key in your keyring, or your address has no key of its own, Vireo says so before anything is sent. Replying to an encrypted message starts with Encrypt on.

Each account uses the key whose address matches. To use another key for an account, open the account in Settings → Mail Accounts and choose it under OpenPGP.

Reading the result

Beside a sender's name, a lock means the message was encrypted and a shield means it was signed. Green: everything checks out against a trusted key. Amber: a doubt, such as an unknown or untrusted key, or an expired one. Red: a failure, such as a signature that does not match or a message that could not be decrypted. Click the icon for the details.

If something goes wrong

  • GnuPG was not found: install the gnupg2 package.
  • No passphrase prompt appears when you expect one: gpg-agent remembers a passphrase for a while after you type it. gpg-connect-agent reloadagent /bye clears it, or shorten default-cache-ttl in ~/.gnupg/gpg-agent.conf.
  • Could not be decrypted: the message was encrypted to a key you do not have. Ask the sender to use the public key you exported in step 2.
  • Nothing to encrypt with for an address: that person's key is missing; see step 3.

Privacy

Vireo 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.

The Vireo Manifesto

Vireo exists to fill a need in the Linux desktop community for a modern, GNOME-native email client that doesn't sacrifice aesthetics for features.

The project has the following foundational values that guide its development:

  • Vireo is committed to free and open source software. Vireo will never be for sale and is committed to remaining that way through our AGPLv3 license adherence.
  • This project is community-driven and committed to putting humans at the center of everything we do. Our aim is to improve the lives of our users and the Linux desktop as a whole.
  • We are committed to GNOME-first development ensuring 100% compatibility with the latest GNOME release. This app was conceived for GNOME and it will remain the desktop environment we target primarily.
  • Aesthetics matter as much as features. Vireo should make using email on the Linux desktop both visually pleasing and enjoyable through consistent and familiar UI/UX paradigms. New users to GNOME should be able to intuit how to use the app without needing to refer to documentation.
  • Feature-rich and choice-forward philosophy. Providing means for the user to maximally customize the app's feature set is a high priority. We maintain that Vireo is both beautiful and highly functional to tackle every email edge case.

AI notice

Vireo is built by a human maintainer working with generative AI as a development tool:

  • Code — the large majority of the Rust code in this repository was written with Anthropic's Claude (via Claude Code), working from the maintainer's direction. The maintainer decides what gets built, reviews the results, tests every release, and signs off on everything that ships.
  • Text — documentation, release notes, and website copy are largely AI-drafted and human-edited.
  • Artwork — the app icon and other visual assets are human-made, without generative AI.
  • The app itself contains no AI. Vireo has no AI features, makes no requests to AI services, and never sends your mail or any other data to one — AI was used to build the app, not to run it. See Privacy.

Bug reports and pull requests are welcome from humans and their AI tools alike; everything merged gets the same human review.

Contributors

Vireo is maintained by Hyprlab. Thanks to the people who have sent patches upstream — their work ships in the app and is credited in the About window:

  • Alfonso Lizárraga (#14) — sending to recipients with punctuated or accented names, the startup message list, message-list rebuild performance, the unread dot, and the Attachments-row setting.
  • Chris Pouliot (#13) — Proton Bridge connections: IMAP STARTTLS and locally signed certificates.
  • Isaac (#31, #43, #44, #49, #63, #135, #142) — PDF first-page thumbnails in the attachment gallery and drawer, the fix for attachments not opening (wrong O_NOFOLLOW constant + portal-based launching), the reader header's "To:" line, the preference to always load remote content, the shared GNOME-styled right-click context menus, swipe-to-archive/delete on message rows, and the uninstall script.
  • Alexander Lubovenko (#45, #110, #112, #118, #127) — Gmail conversations: showing a message once rather than once per label, answering it from whichever label already holds its body or attachments, and fetching a conversation's bodies in one request instead of one apiece; listing small attachments sent from web Gmail that the inline-image heuristic hid; fetching a labelled message's attachments once instead of once per label; rejoining filenames split across RFC 2047 encoded-words; and pictures dropped or pasted from a file manager landing in the message, keeping their filename, with resizing by handle or menu and an optional recompress on send.
  • frenchy82 (#122, #131, #134) — the French translation, Vireo's first, and the report that found the labels the app was showing in English despite having the translation.
  • Anton Palgunov (#7, #8) — sender avatars from GNOME Contacts photos, and GNOME Online Accounts refinements: custom server ports (IPv6 included), pausing an account while its Mail service is off in GNOME Settings, OAuth-aware connection tests, and a timeout on stalled IMAP connections.

Not every contribution is code. Thanks to p-mitana for a thorough round of design feedback — reader, composer and GNOME-HIG suggestions, and a string of sharp bug reports — that shaped the 1.15 releases; to 7system7 for the HTML-signature and mid: link requests and EmmanuelP for tracking down the deletes that failed on Zimbra, both in 1.22; to 7system7 again for Send Later and cloud attachments, yioannides for Empty Trash, the reply-panel fields and the single-message card, and EmmanuelP for the quote-folding and Quote-button reports, all in 1.25; and to everyone who files issues and ideas.

Pull requests are welcome. There's no CLA — by opening one you agree your contribution ships under the AGPL-3.0-or-later, and it may be adapted before it lands (with the change explained on the pull request).

Contact & support

License

Vireo is free software licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).

© 2026 Hyprlab

About

Vireo is a clean, fast, GNOME-native email client with a three-pane layout, unified inbox, and support for OAuth accounts. Fast to open, effortless to read, and private by default.

Topics

Resources

Security policy

Stars

59 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages