A fast, GNOME-native email client — built with Rust and libadwaita, privacy-first.
Website ·
Release notes ·
Releases ·
Discord
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 GNOME-native desktop email client for the Linux desktop. 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 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.
- Four ways to write a message — rich text, Markdown, hand-written HTML, or plain text, switched per message from the composer's format button. See Writing in Markdown or HTML below.
- 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, OpenCloud or Seafile server, or to OneDrive or Dropbox, 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,dand 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.
- Send from Files — a Send with Vireo entry in the GNOME Files right-click menu sends the selected files into a new message, a draft or a reply of your choosing, with an offer to upload big ones to cloud storage instead (optional; see below). Email… and Open With Vireo work too.
- Appearance themes — five palettes (Rose, Forest, Tidal, Earth and Midnight) in Settings → Appearance, each carrying its own light and dark version, or the stock GNOME colours Vireo has always worn.
- 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.
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) |
| 1 … 9 | Add or remove a tag (the first nine, in Settings order) | ||
| 0 | Remove every tag |
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.
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.flatpakrefPrefer 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.rpmGentoo — a community-maintained ebuild lives in bennypowers' overlay (thanks @bennypowers):
eselect repository enable bennypowers
emaint sync -r bennypowers
emerge -av mail-client/vireoNix — a community-maintained flake lives in tbaumann's fork (thanks @tbaumann):
nix run github:tbaumann/vireoArch, 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.
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-develDebian / Ubuntu
sudo apt install libgtk-4-dev libadwaita-1-dev libwebkitgtk-6.0-dev libpoppler-glib-devBuild & 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)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.
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
[dropbox]
client_id = "your-dropbox-app-key" # public client, no secretor via the VIREO_GOOGLE_CLIENT_ID / VIREO_GOOGLE_CLIENT_SECRET,
VIREO_MICROSOFT_CLIENT_ID / VIREO_MICROSOFT_CLIENT_SECRET and
VIREO_DROPBOX_CLIENT_ID 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 --releaseSettings → Cloud Storage holds the accounts the composer's upload button can put files on. A file goes to the account's upload folder and a share link, with the size and any expiry, is placed in the message above your signature. Every kind of account can expire links after a number of days and protect them with a download password, shown to you to pass on separately. The account's settings are the defaults: the upload dialog in the composer shows them for each upload, where the expiry can be changed or removed, the password turned on or off, and a password of your own typed in place of the generated one.
-
OneDrive — through GNOME Online Accounts: add your Microsoft 365 account under Settings → Online Accounts, then pick it in the cloud account's editor. GOA holds the sign-in and refreshes the token, so Vireo stores no password or key. Uploads go into the upload folder (made when missing) and are shared with "anyone with the link". Link expiry and download passwords need a Microsoft 365 subscription or OneDrive for Business: a free personal OneDrive refuses the link when either is set, so a new OneDrive account starts with both off, and the editor says so. The connection check finds out what the drive's plan allows and greys out the rows it rules out, with the reason, in the account's settings and in the upload dialog. Uploads and plain links work on any OneDrive. Google Drive is not offered: GNOME Online Accounts does not ask Google for Drive access on every system, and Vireo carries no Google client of its own.
-
Nextcloud, ownCloud, OpenCloud — the server URL, your user name and an app password (made under Security in the server's personal settings). Uploads go over WebDAV; links come from the files-sharing API.
-
Behind Cloudflare (Nextcloud-kind and Seafile accounts) — a self-hosted server reached through a Cloudflare domain or tunnel cannot take a request over 100 MB, Cloudflare's proxy limit. Switch on Server is behind Cloudflare in the account's editor and files bigger than 90 MB go up in 90 MB pieces the server stitches back together (Nextcloud's chunked-upload endpoint, Seafile's resumable upload); smaller files go as one request as before.
-
Seafile — the server URL, your e-mail and your password. If the account uses two-step verification, also enter the current code from your authenticator app: Vireo signs in with it once, gets an API token from the server and keeps that in the keyring instead of the password (Seafile's web interface shows no such token itself; one obtained another way, say from the
api2/auth-token/endpoint, can be pasted in the password field). Uploads go into a library (made when missing, "Vireo" by default) and a folder inside it. -
Dropbox — sign in through your browser. Dropbox only lets a registered app sign in, so make one for yourself; it takes a minute and stays private:
- Open dropbox.com/developers/apps signed in to your Dropbox and press Create app.
- Choose Scoped access, then the access type: App folder gives Vireo its own folder under Apps and nothing else, Full Dropbox puts uploads in the folder named in the account's settings.
- Give the app a name no one else has used ("Vireo for Jane", say) and press Create app.
- On the Permissions tab tick
account_info.read,files.content.writeandsharing.write, then press Submit. - On the Settings tab, under OAuth 2 → Redirect URIs, enter
http://localhost:41597/and press Add. The port is fixed because Dropbox matches redirect URIs exactly. - Copy the App key from the top of the Settings tab.
In Vireo, add a Dropbox account under Settings → Cloud Storage, paste the app key and press Connect with Dropbox; the browser opens, you approve the app, and the account's e-mail appears in the dialog. The app can stay in Development status, which allows your own account (Dropbox asks for a production review only past a few hundred users). A build can carry an app key of its own (the
[dropbox]entry inoauth.toml, orVIREO_DROPBOX_CLIENT_IDat build time), in which case the field can stay empty. Link passwords and expiry dates are a paid Dropbox feature; on a Basic plan leave both off, or the share step reports it.
A message can be written in any of four formats, chosen in Settings → Composing → Write messages in for new messages and switched for any single message with the format button at the right-hand end of the composer's formatting row, which wears the icon of the format it is set to and lists the others, the current one in your accent colour:
- Rich text — the WYSIWYG editor with its formatting toolbar. The default.
- Markdown — you write Markdown, the recipient gets formatted mail.
- HTML — you write the message's HTML by hand.
- Plain text — no formatting at all, sent as
text/plainonly.
Markdown and HTML are written as source: a monospace field, the formatting buttons gone from the row above it (they would go nowhere), and a Preview toggle beside the format chooser that swaps the source for the message as it will be sent. Nothing is sent as source — Markdown is rendered to HTML when the message goes out, and the Markdown you wrote travels as the plain-text alternative, so a recipient whose client shows plain text gets something that still reads as itself. Hand-written HTML gets a readable plain-text alternative made for it the same way.
Switching format converts what is already in the message, so you can start a
reply in rich text and finish it in Markdown; the quoted original comes
across as > lines.
The Markdown Vireo understands is the dialect documented at markdownguide.org — all of the basic syntax, and all of the extended syntax:
| Basic | headings (both styles), bold, italic, blockquotes, ordered and unordered lists, code, horizontal rules, links (inline, reference and autolinks), images, hard line breaks, backslash escapes |
| Extended | tables with alignment, fenced code blocks with a language, footnotes, heading IDs ({#id}), definition lists, ~~strikethrough~~, task lists, :emoji: shortcodes, ==highlighting==, ~subscript~ and ^superscript^, and bare URLs and email addresses turned into links |
Two notes on what that means in mail. The HTML Vireo writes carries its
styling as style attributes on the tags themselves, because a <style>
block is the first thing most webmail clients throw away — so tables really
do arrive with their borders. And anything you send, in Markdown or in HTML,
passes through a sanitizer on the way out: scripts, event handlers and style
sheets are removed, while tables, inline styles, images and everything
Markdown produces are kept. That is not a defence against you; it is a
defence for you, since a <script> in a message is at best stripped by the
recipient's client and at worst the reason the message lands in their spam
folder.
A draft saved from a Markdown or HTML message is stored as ordinary mail (a formatted part and a plain-text one), so re-opening it puts you in your default format. Switching that draft back to Markdown converts it, which for a message that started life as Markdown lands very close to what you wrote.
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
gnupg2package (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
gnupg2package. - No passphrase prompt appears when you expect one: gpg-agent remembers a
passphrase for a while after you type it.
gpg-connect-agent reloadagent /byeclears it, or shortendefault-cache-ttlin~/.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.
Select files in GNOME Files (Nautilus), right-click, Send with Vireo: a new message opens with them attached. The entry comes from a small extension that Files loads, so it has to live outside the app, in your home folder.
What you need
- The
nautilus-pythonbindings, which let Files load extensions written in Python:sudo dnf install nautilus-pythonon Fedora,sudo apt install python3-nautiluson Debian and Ubuntu,sudo pacman -S python-nautiluson Arch. - Vireo 1.29 or newer, Flatpak or native.
Installing it
Open Settings → System → GNOME Files and click Install. Vireo writes
the extension to ~/.local/share/nautilus-python/extensions/vireo-nautilus.py
and shows whether the installed copy is this version's. Then click
Restart (or run nautilus -q): Files closes its windows, and the next one
opens with the entry. Once Files has loaded the extension the row says so; if
it still says "not loaded" after a restart, the nautilus-python package is
the usual reason (a native install of Vireo checks for it and tells you; the
Flatpak cannot see the host's packages). Until Files has loaded the extension,
the group also shows the install command for your distribution, with a copy
button. Remove takes it out again the same way.
Without the app, the same file is in the repository at
data/nautilus/vireo-nautilus.py:
mkdir -p ~/.local/share/nautilus-python/extensions
curl -fsSL -o ~/.local/share/nautilus-python/extensions/vireo-nautilus.py \
https://raw.githubusercontent.com/hyprlab/vireo/main/data/nautilus/vireo-nautilus.py
nautilus -qThe extension launches Vireo by its desktop id (co.hyprlab.Vireo, then the
beta's), so it works whichever way Vireo is installed. Folders are skipped;
files on a mounted share reach the app through their mount path.
Files also has its own Email… entry, which sends the selection to whatever
app handles mailto: links; if that is Vireo, it does the same thing without
the extension.
What the files go into
When the files arrive, Vireo asks what they are for: a new message, a draft you pick from a list of every account's drafts, or a reply to a message you pick (the one you are reading comes first; a search box narrows the list by sender, subject or account). Files that together exceed the size limit (20 MB by default) bring a second question when a cloud storage account is set up: attach them anyway, or upload them and put download links in the message instead. Each dialog has an Always do this box, and Settings → System → GNOME Files holds the same choices, so the questions can be skipped: what the files go into, what happens over the limit, and the limit itself.
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.
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.
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.
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, #216) — 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; and the non-ASCII part header that took an account's mail thread down.
- 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.
- Laszlo Lang (#169) — the Hungarian translation.
- Ilya Semenkovich (#176, #185) — the Russian translation, two reader tooltips that could not be translated, and the About menu entry that could not be either.
- Paulo Fino (#178, #179, #182, #183, #194) — the Portuguese (Portugal) and Brazilian Portuguese translations, the request for a language chooser, and the report that the chosen language never reached the Flatpak.
- 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.
- Yiannis Ioannides (#75) — the
--userflag in the Flatpak install instructions, so a local install no longer asks for root; and a long run of requests and design feedback that shaped tags, split replies, the reader's own font and colours, Empty Trash and the reply panel's fields.
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; to
yioannides for the sidebar
consolidation proposal, picture avatars and the reply-target and menu
reports, 7system7 for the preview
charset and tag-refresh reports, Peter Weiss
for the Move To button and frenchy82 for
Not Spam, all in 1.27; to yioannides
for the Inboxes and notification report, Peter Weiss
for conversation moves, taprobane99
for the clock-format report and somePaulo
for the language chooser, plain-text composing and monospace requests,
all in 1.28; to EmmanuelP for the
undo and sent-copy requests, yioannides
for the recipient-rule report, 7system7
for the links report and frenchy82 for the
French update, all in 1.32; to p-mitana
for the reply-target, thread-selection, reply-placement and per-message
attachment reports, with yioannides
weighing in, all in 1.33; 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).
- Website — vireo.hyprlab.co
- Discord — discord.gg/YfEJ4b6PFW
- Email — hyprlab@proton.me
- Buy me a coffee ☕
Vireo is free software licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).
The Nextcloud, ownCloud, OpenCloud, OneDrive, Dropbox and Seafile marks shown in Settings are trademarks of their owners, used only to identify those services, and are not covered by that licence (see data/brands/README.md). Vireo is not affiliated with or endorsed by any of them. The same goes for the bundled sender logos that can fill a sender's avatar: they come from gilbarbara/logos (MIT) and Simple Icons (CC0), remain their owners' marks, and are listed with their sources in data/logos/README.md.
The appearance themes (Rose, Forest, Tidal, Earth and Midnight) are the theme
library from T3 Code (MIT, © 2026 T3
Tools Inc.), converted to sRGB, renamed, and mapped onto libadwaita's colour
roles by tools/gen-themes.py. Vireo is not affiliated with or endorsed by
T3 Tools.
© 2026 Hyprlab

