01 · One inbox
One inbox.
Every account you own, every address you answer to, in a single client.
Fastmail, Gmail, Microsoft 365, iCloud, Proton, each in their own protocol, none flattened to IMAP. Every account on every device you carry, including the one on your wrist. Stored on your machine, encrypted at rest, searchable offline.
Mac · Linux · Windows · iOS · Android · Web Apple Watch · Wear OS


At a glance
What Epistles is, in one breath.
01 · One inbox
Every account you own, every address you answer to, in a single client.
02 · Native protocols
Gmail API, OWA, JMAP, iCloud, Proton, IMAP. Each provider spoken in its own dialect, nothing flattened.
03 · On your device
Mail lives in local SQLite, encrypted by your OS, searchable in milliseconds. The relay never reads a word.
Many lives, many addresses
So why run one app per address?
Most people end up with three: a personal Fastmail or iCloud, a Gmail the employer set up, and a Proton or Outlook for the things that don't fit elsewhere. Each one shipped its own app, its own dock icon, its own set of notifications to ignore. Epistles is one client for Gmail, Microsoft 365, Fastmail, iCloud, ProtonMail, and any IMAP account.
On your wrist
Native apps on Apple Watch and Wear OS, same triage on either. Archive, snooze, voice or template reply, agenda RSVP, all without unlocking your phone.
Why Epistles
01 · Every account, one client
Every account lives in the same client, behind the same shortcuts, composer, and command palette. Each message wears a quiet chip naming the address it arrived at. The single combined list lands later this year; the keyboard is one already.
// the keyboard surface shipped first. the mouse came later.
02 · Mail, calendar, contacts
Epistles reads each provider's calendars and address books beside the mail. The meeting attached to a thread, the face attached to a name, and the message itself sit one keystroke apart.
// if a provider serves it, Epistles reads it. no export-then-reimport dance.
03 · Local-first
Every message lives in a local SQLite store, protected at rest by FileVault, BitLocker, Data Protection, FBE. Search runs against the cache: milliseconds, no round trip, no signal required. The relay only touches what needs a wire, and never a word of the letters themselves.
OS disk encryption · AES-256-GCM Cloud Vault · zero-knowledge
// search works in airplane mode. tested every release.
04 · Six platforms today
macOS, Linux, Windows, iOS, Android, and the web, shipping today. Sign in on a new device and your accounts are already waiting, carried across by the zero-knowledge Cloud Vault. Credentials travel as ciphertext; only your password unwraps them.
// sign in on a new device. vault restores in seconds.
Polyglot by design
Most clients flatten everything to IMAP and lose half the features in the trade. We do the unglamorous thing instead, we speak each provider's own dialect end to end. See how Epistles compares.
Google publishes good docs. The Gmail API is REST, paginated, rate-limited per-user-per-second, with Pub/Sub push that needs a watch-renewal every seven days. Miss the window and the mailbox goes silent and the user blames the client. We renew on a six-day cadence on our relay so you don't have to think about it.
We do not talk to Gmail over IMAP. Most third-party clients do, and it kneecaps everything Gmail is actually good at. The "Archive" gesture means "remove the Inbox label," not "move the message to a different folder." The trash, the search, the conversation view, they all behave the way Gmail itself behaves, because we are speaking Gmail.
Don't trust anyone who tells you to use Microsoft Graph for a third-party email client. Graph is built for ISVs writing Outlook add-ins; the parts that map to actual mailbox operations are slower, paginated weirdly, and gated behind admin-consent flows that scare off individuals. EWS is a legacy SOAP API Microsoft is retiring for O365 (blocked October 2026). Both are dead ends.
Our Microsoft adapter speaks OWA, the same private API the Outlook web client uses to talk to outlook.office.com/owa/service.svc. JSON envelopes typed as #Exchange, reverse-engineered from the wire. Faster than Graph, and more importantly, it actually works for a personal Microsoft account that has no admin to grant tenant consent.
A funny detail. SignalR, Microsoft's push channel, is mid-migration across O365 tenants. Some pools speak the old ASP.NET Framework version, some speak the new ASP.NET Core version, and which one you get is invisible to the user. We detect it from the /negotiate response shape and branch. You will never notice. We notice.
Apple gives you IMAP for mail, CalDAV for calendars, and CardDAV for contacts, all gated by a single app-specific password you mint in your iCloud settings. The credential mints once, can be revoked at any time from the same settings page, and never involves Apple's servers in a delicate OAuth dance. You own the relationship with that token in a way other providers don't bother offering.
We treat iCloud as a pre-configured IMAP profile, with the right server URLs already in place, so people don't have to type imap.mail.me.com from memory.
Proton's API is undocumented. The Bridge they ship is a localhost IMAP daemon that decrypts on your machine, fine for desktop, useless on mobile, and a perennial source of "Bridge is offline" support tickets. We talk to Proton's HTTPS API directly and do the OpenPGP decryption on-device with openpgp.js. Same end-to-end security model. No daemon.
The mailbox passphrase and your private PGP keys never enter our Cloud Vault. They live in your OS keychain only, full stop. That's a deliberate carve-out, Proton's zero-knowledge model is theirs and we keep it intact rather than broker it for sync convenience. The trade is that you add your Proton account once per device instead of once per lifetime; we think that's the right trade.
As of May 2026, Epistles is the first multi-platform third-party email client to ship Proton Mail support without requiring Bridge. The reverse-engineering work has been continuous since 2024.
JMAP is JSON over HTTP, batched, with first-class support for everything a real mail client actually needs: threading, push, server-side filters, calendar, contacts, all in one round-trip. Fastmail invented the protocol because IMAP had aged into a thicket of extensions nobody wanted to read. We adopt JMAP the way we'd adopt any well-designed API. Push lands in milliseconds.
The catch is OAuth. Fastmail issues single-use refresh tokens, so the first device to spend yours wins and the rest brick the chain. We rotate centrally on our backend so your three devices stop fighting each other for the lock. Two weekends to design, plus an unhealthy familiarity with invalid_grant recovery paths.
If your provider speaks JMAP, Epistles speaks JMAP. If your provider only speaks IMAP and SMTP, Epistles speaks that. Self-hosted Stalwart, Tutanota's IMAP gateway, a Postfix + Dovecot on a Hetzner box, an old Yahoo account with an app password, your university's leftover server from 2008. They all work.
The unsexy parts get the same care: proper threading via References and In-Reply-To, IDLE for push instead of polling, OAuth where the server offers it, app-passwords where it's the only option, full-text search that runs locally so it stays fast on a 50,000-message archive.
Our promise
Local-first, by design. Encrypted at rest, by your OS. Synced across devices as ciphertext only your password can unwrap.
Mail lives on your device. Search runs on your device. The relay does two things: a zero-knowledge Cloud Vault for credentials and settings (we store opaque ciphertext we cannot read), and the push and read-receipt metadata you opt into. OAuth refresh tokens are the lone carve-out, held server-side so one device's refresh can't brick another's.
The carve-out: Gmail and Fastmail OAuth refresh tokens live encrypted on our backend so we can rotate them centrally and keep multi-device races from killing your sign-in. Everything else stays zero-knowledge.
Six platforms plus the watch, one inbox. We'll write the moment your seat opens.
We write once when your seat opens. No newsletter. No tracker.
Waitlist
No newsletter. No tracker. We write once when your seat opens.