Frostmail
Frostmail is a mail client that works like Apple Mail.app. It runs on Linux and on Windows. It keeps your mail, contacts, calendars, and tasks in a daemon on your machine, and the app and the command line talk to it.
maildis a per-user Go daemon. It syncs your mail, keeps a SQLite cache with full-text search, and serves a JSON-RPC socket.- The app is a native Go app, drawn with MyGo and frostui. It shows each message in a web view: WebKitGTK on Linux, WebView2 on Windows. lodge serves a React web app of the same mail.
mailctlis a command-line client of the same socket.- The daemon can also serve a phone and any browser on your tailnet, as the mail app of lodge.
- Mail: sync, read, search, and send for generic IMAP, Gmail, iCloud, and Outlook.com accounts.
- Contacts, calendars, and tasks over CardDAV, CalDAV, Google Tasks, and Microsoft Graph. You answer invitations from the reader, and you edit events and contacts in place. A To-Do bar sits beside the inbox.
- Rules, smart mailboxes, VIPs, Send Later, and Remind Me.
Status
Section titled “Status”Frostmail is pre-release. The latest release is v0.6.0. Its Flatpak,
org.frostyard.Frostmail, is in the
Frostyard Flatpak remote. The release also
attaches frostyard-maild_X.Y.Z_amd64.deb, for lodge’s host. The .deb holds
maild, mailctl, the units, the frostmail user, and the web build for
lodge’s mail app. Frostmail is not in the Frostyard APT repository or the
Frostyard Homebrew tap. On a Frostyard image, the
maild system extension installs maild for lodge’s
host.
Release v0.5.0 adds a Follow Up section to the sidebar: sent mail with no
reply for 3 days or more. With maild v0.5.0 on lodge’s host and lodge v0.2.0
or later, Frostmail’s rail button shows the unread count of your inboxes. The
maild system extension can trail the latest release. The
catalog lists the version it ships. The Flatpak and the
.deb of v0.6.0 come from the same commit.
Release v0.6.0 replaces the desktop app with a native Go app. Your mail, accounts, and the install steps stay the same. v0.6.0 adds database migrations, so v0.5.0 cannot open the database after v0.6.0 has run. It also adds snippets that you insert from compose, a command palette (Ctrl+Shift+P), Find in the message shown (Ctrl+F), and replies that quote the text you select in the reader. Read messages in a conversation collapse to 1 row each. The reader warns “Sender not verified” when the provider’s sender checks fail. Compose asks before it sends when the text mentions an attachment that is missing. A search says how far it looked, and you choose each account’s sync window in Settings. Erase Deleted Items and Erase Junk Mail remove old mail from Trash and Junk when you ask.
From v0.6.0, maild, mailctl, and the app write their panics and a few
coded errors to the local systemd journal. They send nothing over the
network. On a Frostyard image, ChairLift can show
these records, and it sends nothing without your consent.
The Flatpak carries maild and mailctl, and its launcher starts its own
local maild. Local is the default, and lodge is a
connection you choose: nothing turns it on for you, and a change of mode never
copies, moves, merges, or deletes your data.
The first launch asks the Background portal to let maild run in the
background and start at login. If you refuse, maild runs only while a window
is open, so sync, Send Later, and notifications wait until you open the app.
Mail in lodge is built and still in progress. Its last step, the move of a real mail store to lodge’s host, has not run yet. Calendar, task, and contact tools for agents are built. Google and Microsoft verification are planned.
Install
Section titled “Install”The desktop app is a Flatpak. It works on its own: it carries maild and
mailctl, and you need no lodge. Floe has no Flatpak.
Add the Frostyard remote once, for your user:
flatpak remote-add --user --if-not-exists frostyard https://frostyard.github.io/flatpak-index/frostyard.flatpakrepo
Apps use runtimes from Flathub, such as the GNOME runtime. A --user install
gets a missing runtime only from a user remote, so add Flathub for your user
too:
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
Install Frostmail:
flatpak install --user frostyard org.frostyard.Frostmail
The Frostyard Flatpak remote has the canonical steps. Check the install:
flatpak info org.frostyard.Frostmail
The output shows ID: org.frostyard.Frostmail. Frostmail shows in the app
grid. Update it with flatpak update. The app’s data is under
~/.var/app/org.frostyard.Frostmail/.
If you ran maild on the host before, the welcome screen shows a note with the
steps that move your mail into the Flatpak. The Flatpak’s own
maild
has them.
To build from source, make install puts maild and mailctl in
~/.local/bin with a systemd user service, and make install-app builds the
app with Go and installs it as a local Flatpak. The local build has the same
app ID as the Flatpak from the remote: install one of the two at a time. The
install steps
for one user are the canonical ones. Behind lodge, maild
runs as the system user frostmail on lodge’s host. To check the release
.deb before you install it, run
gh attestation verify frostyard-maild_X.Y.Z_amd64.deb --repo frostyard/frostmail.
Documentation
Section titled “Documentation”- README: what Frostmail is and what works now.
- Problem records: what the app writes to the journal, and how to read it.
- Frostyard Flatpak remote: the remote and its apps.
- Installing for one user: the build from source with
make install, and where its data lives. - The Flatpak’s own maild: the launcher, the modes, the paths, and the move from a host
maild. - Accounts, sign-in and providers: how to add an account, and what each provider needs.
- A personal Google client: the Google Cloud steps for Gmail sign-in.
- On a maild behind lodge: how the desktop app reaches lodge’s
maild. - Mail in lodge: the app contract, the user, the socket, and the agent tools.
- Windows: the Windows build and how it starts at sign-in.
- Search: the search language.
- The standalone desktop Flatpak: the plan and its phases.
- The desktop app in MyGo: the native app and its parity with the old app.
- Roadmap: what is built and what comes next.
Limits
Section titled “Limits”- Gmail OAuth sign-in needs your own Google client until Frostmail has a verified one. A Gmail app password works without one.
- Microsoft work and school accounts are not supported.
maildapplies database migrations at start and refuses a newer database. Back up~/.var/app/org.frostyard.Frostmail/before you install a newer Flatpak. For a build from source, back up$XDG_DATA_HOME/frostmail.
See also
Section titled “See also”Sources
Section titled “Sources”Reviewed 2026-11-11.
- Frostmail release v0.6.0 commit
f505fcb8d5310d0a9ad245f3e906f10a61bcef15, released 2026-11-11. Its release attaches onlyfrostyard-maild_0.6.0_amd64.deb. The tagv0.6.0is the commit of the release candidatev0.6.0-rc.1. - The Flatpak at v0.6.0: the live Frostyard catalogue, checked 2026-11-11, lists
org.frostyard.Frostmailat digestsha256:6321577ba8ce08377d39bc5c161bf210748abecc267809b7f0f9fcd17e325214, built fromf505fcb8, with the release0.6.0in its AppStream data. - The native app: frostmail#223,
docs/adr/0054-draw-the-desktop-app-natively-with-mygo-and-frostui.md,docs/plans/0015-mygo-desktop.md,README.md, anddocs/design/desktop.md(Installing for one user, The Flatpak in CI, The Flatpak’s own maild, Windows).make install-appdepends ondesktop-build, a Go build:Makefile. - v0.6.0’s features: snippets frostmail#192, the command palette frostmail#210, find in the message frostmail#219, the quoted selection frostmail#220, collapsed read messages frostmail#211, “Sender not verified” frostmail#169, the missing attachment frostmail#168, the search’s reach and the sync window frostmail#209, erasing Trash and Junk frostmail#221;
docs/specs/ui.md(Command palette, Find in the message). The native app’s code has each one underinternal/desktop/;internal/desktop/mainwin/mainwin_test.gotests that Ctrl+Shift+P opens the palette. - The migrations of v0.6.0:
internal/store/migrationsadds0021_snippets.sqland0022_erase_old.sqlafter v0.5.0. - Problem records: frostmail#157 and
docs/adr/0049-record-problems-in-the-local-journal.md. - Frostmail release v0.5.0 commit
88d71ce16bcc4035aa080a2a7ca46f441d92ac77, released 2026-11-07. Its release attaches onlyfrostyard-maild_0.5.0_amd64.deb. The tagv0.5.0is the commit of the release candidatev0.5.0-rc.1. - The Flatpak: the live Frostyard catalogue (its
Last-Modifiedis 2026-11-07 20:55:15 GMT) listsorg.frostyard.Frostmailat digestsha256:0e6f1e07c475224c4a315d2705e9c867d2f6a19b33d5a83807c7257b747ec07b, built from88d71ce1, with the release0.5.0in its AppStream data (frostmail#152 stamps it).packaging/flatpak/org.frostyard.Frostmail.json(runtimeorg.gnome.Platform51). - Follow Up: frostmail#153,
docs/specs/ui.md(Sidebar, Follow Up) anddocs/specs/parity.md(P-413). - The lodge badge: frostmail#154 and
docs/specs/lodge-app.md(badge). lodge draws it from lodge#45 (merge commit58cd0c5), which lodge v0.2.0 contains. maild sendsbadgefrom v0.5.0: frostmail#154 is not in v0.4.1. The maild system extension: snosi#1257, merged 2026-11-09, pins maild 0.5.0, andSHA256SUMS, checked 2026-11-11, lists 0.2.0, 0.3.0, 0.4.1 and 0.5.0. - The release path:
docs/adr/0048-tag-each-release-on-its-tested-candidates-commit.md. - Frostyard Flatpak remote: flatpak-index
README.mdandapps.jsonat4828c9836d451aaa7376483737d25a764b4e17bd, after flatpak-index#6, merged 2026-10-29. - Install text: flatpak-index
README.mdat4828c9836d451aaa7376483737d25a764b4e17bd(flatpak-index#7, merged 2026-10-30): the per-user remote and the Flathub user remote. - The per-user remote: Brian’s decisions T532a (2026-10-29) and T532b: every user adds the remote. A fresh Snow install has no
frostyardremote, user or system (Murbella’s check, T540). - The Flathub user remote: a test on 2026-10-30 with Flatpak 1.16.6 and an empty user installation. Without Flathub as a user remote,
flatpak install --userfails withrequires the runtime org.gnome.Platform/x86_64/51 which was not found. README.mddocs/design/desktop.md(sections Installing for one user, The Flatpak in CI, The Flatpak’s own maild, Windows),docs/design/accounts.md,docs/design/overview.mddocs/specs/lodge-app.md,docs/specs/search.mddocs/plans/0002-roadmap.md,docs/plans/0010-m7-microsoft-and-windows.md,docs/plans/0011-m8-mail-in-lodge.md,docs/plans/0013-m6-the-standalone-desktop-flatpak.mddocs/adr/0046-the-desktop-flatpak-carries-its-own-maild.md(Accepted 2026-10-28)- A refused Background portal:
docs/adr/0046-the-desktop-flatpak-carries-its-own-maild.md(amended 2026-10-29, Brian, T491c) anddocs/design/desktop.md(section The Flatpak’s own maild). internal/store/store.go- Suite rule: core
docs/adr/0062-make-desktop-suite-apps-standalone-flatpaks-with-opt-in-lodge.md(Accepted 2026-10-27) at4d340b939fccab2ecb7f0be5dbf9e7ab7c03963c. - snosi PR snosi#1169, merged 2026-10-28, adds the notesd and maild extensions.
- No APT or Homebrew package: the Homebrew tap
Casksat8dfab8783f6b22e6333656aa317b5aac2611d5f7holds onlychairlift.rbandnsl.rb. The Frostyard APT indexPackagesfor trixie on amd64, checked 2026-11-01, lists no Frostmail package.