PigeonPost
The design story in short, the engineering behind it and some honest comparisons.
The short version of the reasoning; the full essay lives on crankthecode.com.
Desktop email settled into three unsatisfying shapes. Webmail is convenient yet answers to an engagement model: it wants your attention and it changes under you. Outlook wants a subscription and pulls your mail deeper into an account you rent. Thunderbird earned two decades of trust yet its priorities sit in someone else's queue, so the things a daily user reaches for most can stay buried for years.
PigeonPost is a refusal of all three shapes at once. The brief was narrow: email as a calm, predictable, local tool. Your mail stays with your provider; the client reads it, caches it and gets out of the way. There is no PigeonPost account, no cloud relay in the path and no telemetry. Each temptation layered onto modern mail (accounts you do not need, notifications tuned for engagement, rendering that phones home) is declined structurally rather than by policy, so it cannot quietly creep back in.
The engineering carries the same discipline. A Go core sits behind a Wails shell with a React and TypeScript front end; mail speaks IMAP, POP3 and SMTP through explicit protocol libraries; summaries and bodies cache to a pure-Go SQLite store for instant offline search; credentials live in the OS keychain rather than any database. One clean-architecture boundary separates the mail engine from the UI and structural tests enforce it, with a 100% coverage gate on the core logic.
What works now is a fast, native client for mail, calendar and contacts on Windows, macOS and Linux, each with its own installer. Provider presets cover Gmail, iCloud, Yahoo, Zoho, Fastmail and StartMail through app passwords; Microsoft accounts sign in over OAuth. Because the server remains the source of truth, the local cache is disposable: trying PigeonPost costs nothing and leaving costs nothing.
Full reasoning at crankthecode.com.
I wanted a desktop client that was free, dependable and laid out the way I actually work. The mainstream options did not fit. Outlook 365 wanted a subscription. Thunderbird is free and open but community-governed, so a bug I hit waits in someone else's queue and the things I reach for most are buried. PigeonPost is my answer: GPL-3.0 and free, a calm predictable interface where everything is easy to find. Oliver Ernster.
The core logic carries a 100% test-coverage gate. The build fails if a single untested line lands.
A clean layered core whose boundaries are enforced by automated structural tests, not by good intentions, so the design cannot quietly erode as features land.
Formatting, vetting and a strict static analyser run clean across the Go codebase, so problems are caught before they ship.
GPL-3.0 with the full source on GitHub. If it ever stalls, anyone can read it, fork it or carry it on, with credit to the original author retained. Nothing about your mail depends on me being here.
Where PigeonPost sits next to two clients you may be leaving. Both are good tools. This stays factual, including where PigeonPost is behind.
| PigeonPost | Thunderbird | Outlook 365 | |
|---|---|---|---|
| Price | Free, GPL-3.0 | Free, open source | Subscription |
| Platforms | Windows, macOS (Apple Silicon) and Linux | Windows, macOS and Linux | Windows, macOS and web |
| Where your mail lives | With your provider and cached on your machine | On your server, cached locally | Account and server based |
| Works offline | Yes, cached and searchable | Yes | Yes, cached |
| Search | Local, instant, offline | Local global index | Local and online index |
| Cost of leaving | None, your mail stays with your provider | Low, standard protocols | Account based |
Some things PigeonPost will not do, on purpose. Calm and predictable is the whole point, so these stay off the table.
Honest fit, so the right person trials it and the wrong person is not misled.
Download the build for your platform, point it at your account and see how it feels. Your mail stays with your provider the whole time. If it is not for you, it was never anywhere else.