local-first · sealed at rest · terminal-native

Civilised e-mail
for the terminal.

Your mail lives on your own machine, indexed by notmuch and sealed inside an encrypted vault. A daemon does all the talking to your servers, so search across a hundred thousand messages answers before you finish blinking, and the interface never waits on a network.

Install in one line Read the docs
curl -fsSL https://antiphon.net/install.sh | sh
The message list: two accounts in the sidebar
                with unread counts, and the reading pane

Rust · GPL-3.0-or-later · IMAP IDLE · OAuth 2.0 & Microsoft Graph · OpenPGP via gpg-agent · seventeen themes

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

Reading a git patch from a mailing list,
                additions and removals coloured

$ 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.

The compose review screen: recipients, a
                signing plan, an attachment and the body

$ 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.

The settings essentials tab: theme, sync
                interval, IDLE and layout edited in place

$ 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.

Antiphon compared with NeoMutt, aerc, Thunderbird and a notmuch front-end pipeline
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.

The vespers theme, Antiphon's
           default: deep blues and warm gold
vespers default
kanagawa-wave
kanagawa-wave
catppuccin-mocha
catppuccin-mocha
gruvbox-dark
gruvbox-dark
tokyo-night
tokyo-night
nord
nord
rose-pine
rose-pine
dracula
dracula

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