see it in action
Two minutes in the inbox
A short tour: search, triage, compose and send, all without leaving the keyboard.
a look around
The parts you will live in
$ git am
Patches render like patches
Unified diffs arrive highlighted, a thread saves as
a series git am understands, and
antiphon sendmail slots straight into
git send-email. Mailing-list work is a
first-class citizen, not an afterthought.
$ review
Nothing sends unseen
Recipients, subject, the signing plan and every
attachment held on one screen until you say
y. Schedule it for later with a delay or
a date; offline, it queues durably and replays when
the network returns.
$ settings
Configured in the client
Accounts, OAuth grants and the daily-driver settings managed in place. Underneath sits one strict TOML config that fails at the first typo, named by file and line, never three defaults deep into a mystery.
what it does
One coherent system, not an assembled pipeline
$ search
Instant, local, always
Maildir plus notmuch full-text search, always scoped to the accounts in view. Flags, moves and sends go through a durable operation log: offline work replays in order when the network returns, nothing lost, nothing sent twice.
$ vault
Sealed at rest
The store, index, tokens and state live inside an encrypted vault: encrypted APFS on macOS, LUKS2 or gocryptfs on Linux. Unlock with a passphrase, a YubiKey touch or Touch ID. Back it up with anything; the copy is ciphertext.
$ idle
Mail arrives now
antiphond holds an IMAP IDLE connection open per account and reacts the moment your server pushes, with a timed sync behind it. It sends from a crash-safe outbox, files sent mail, applies your filing rules and posts desktop notifications.
$ pgp
OpenPGP without ceremony
Verification against a keyring you curate; signing and decryption through gpg-agent, so pinentry and your smartcard work as they do everywhere else. Sign-inside-encrypt, per identity or per message.
$ oauth
Microsoft 365 and Google
Sign in, re-authorise and revoke from the settings screen; tokens live in the vault and refresh silently. Exchange tenants that block SMTP send through Microsoft Graph, delegated or app-only.
$ export
Archives that outlive the account
Export any account as an age-encrypted archive fit
for a NAS, then open it read-only years later with
antiphon view: full search, threading
and attachments, no account and no server.
$ compose
Composing that respects you
Header fields first, your own $EDITOR
for the body, a review screen before anything
leaves. Plaintext always; format=flowed; no HTML
composing, ever.
$ tabs
Every account, your way
Browse accounts combined or as tabs
(g1..g9, gu
for unified); reorder, hide or unsync folders per
account. HTML mail renders as tables, lists and
quotes, not soup.
$ graces
Everyday graces
:accept, :tentative or
:decline answers a calendar invite.
One-click unsubscribe actually unsubscribes
(RFC 8058, https only). Images open inline
where your terminal allows.
$ keys
Your keys, your colours
Vim-flavoured and fully rebindable; ?
shows the live cheatsheet. Seventeen themes ship,
:theme switches live, and yours is one
TOML file away.
$ daemon
Runs the way you run things
antiphond answers instantly even mid-sync, picks up
account changes over IPC without a restart, and runs
under launchd, systemd, dinit, runit or a plain
antiphon launch.
how it compares
Ships whole, not in parts
Terminal mail usually means picking a UI, then bolting on your own sync, send queue and often your own crypto. Antiphon ships all of it as one tested system.
| Capability | Antiphon | NeoMutt | aerc | Thunderbird | notmuch front-ends |
|---|---|---|---|---|---|
| UI never blocks on network | Yes, antiphond owns it | No, one process | Yes, async IMAP/JMAP | Yes, async GUI | Yes, sync runs separately |
| Store encrypted at rest | Yes, the vault | No, plain Maildir | No vault | No, plain profile | No, plain Maildir |
| Offline changes replay durably | Yes, one operation log | Not built in | Pair your own queue | Not covered here | Depends on your hooks |
| OpenPGP via your own gpg-agent | Yes, plus your smartcard | Yes, gpgme by default | Optional, set the provider | No, bundled engine by default | Depends on the tool |
| One project: daemon, vault, sync and PGP together | Yes | No, assembled yourself | No, assembled yourself | No, and no vault or agent PGP | No, several separate tools |
| Terminal-native | Yes | Yes | Yes | No | Yes |
themes
Seventeen ship. Yours is one TOML file away.
Switch live with :theme; the
choice persists to your config. The
gallery and the file format are in the docs.
installing
One line to a working inbox
curl -fsSL https://antiphon.net/install.sh | sh
Picks the right route for your machine (Homebrew, the AUR, Copr, Nix or the prebuilt binary), verifies checksums, and names any missing dependency. Or use your package manager:
Arch (AUR)
yay -S antiphon
or antiphon-git to
track master
macOS (Homebrew)
brew tap donquinleone/antiphon \
https://git.sr.ht/~donquinleone/homebrew-antiphon
brew install antiphon
Fedora (Copr)
sudo dnf copr enable donquinleone/antiphon
sudo dnf install antiphon
Nix
nix profile install \
git+https://git.sr.ht/~donquinleone/antiphon
Every route installs both binaries, the client and the daemon, and the package routes pull in notmuch for you. The x86_64 Linux tarball and source builds (the aarch64 route) are in the README. Then, three commands from nothing to reading mail:
antiphon setup # account, secrets, vault, store, daemon
antiphon doctor # confirm everything resolved cleanly
antiphon # open the client