Undo send
Sent mail waits ten seconds in the outbox. ^z brings it back into the composer, exactly as you left it.
$ tern --demo
tern is mutt for 2026. Mail, calendar and contacts in one dense, keyboard-driven terminal app, with nothing else on screen. It pushes new mail, never loses a message, and wears your Omarchy theme.
Your mail client shouldn't compete for your attention. tern has no badges, no feed, no promotions tab, and no AI summarizing the person who wrote to you. It's three panes of text, a key for everything, and a status line that tells you what just happened.
Every action is one key, and the list moves before the server answers. Archive with e, trash with d, move with M. Mark a run with x and act on all of it, or use counts: 5j.
Not today? b snoozes it to tomorrow morning, Monday or 3h from now. It moves to a Snoozed folder on the server, so it's gone from your phone too, then comes back unread.
How triage works →The reply opens in the right-hand pane with the list still in view. The editor is modal like vim:esc, dd, cw, u and ZZ to send. Addresses complete from your contacts.
^f switches which account it's sent from and swaps the signature. Prefer your own setup?:e opens $EDITOR and brings you back.
The terminal is a fragile place for a half-written email. tern is built so it never matters.
Sent mail waits ten seconds in the outbox. ^z brings it back into the composer, exactly as you left it.
Offline, or the server's down? The message stays queued and is retried after 30s, 2m, 10m, then every half hour, even across restarts.
What you're writing is saved every few seconds. Close the terminal mid-sentence and gr picks it up next time.
C flips to an agenda of every CalDAV calendar you have, from Fastmail, Google, iCloud and Nextcloud. Recurring events, time zones and all-day events work, and everything is cached, so it opens instantly.
Add events the way you'd say them:
a Lunch with Maya fri 12:30 1h @Osteria a Design review thu 2pm 45m @meetThe calendar →
P opens your CardDAV contacts. Each person comes with your upcoming meetings together and the mail you've traded. Write to them with m, edit them with e, and changes go straight back to the server.
A on any message adds the sender. The same contacts complete addresses as you type.
People →tern reads the active Omarchy theme and repaints within two seconds of omarchy-theme-set, with no restart. It reads colors.toml, Alacritty, Kitty or Ghostty colors, and leaves your terminal's transparency alone. This page does the same. Try it:
tern doctor signs in to every IMAP and SMTP server (it sends nothing), checks password commands and OAuth tokens, finds your calendars and address books, and looks at your theme, time zone and tools.
Every failure comes with the fix. It exits non-zero, so you can script it.
tern doctor →~ $ tern doctor … Personal (ted@example.com) ✗ imap 127.0.0.1:3143 — 127.0.0.1 (ted@example.com): IMAP LOGIN failed: NO LOGIN failed. Invalid login/password for user id ted@example.com → the server refused the sign-in: check the username and password. Fastmail, iCloud and Gmail (without OAuth) need an app password, not your normal one ✗ smtp 127.0.0.1:3025 — SMTP: permanent error (535): 5.7.8 Authentication credentials invalid → the server refused the sign-in: check the username and password. Fastmail, iCloud and Gmail (without OAuth) need an app password, not your normal one Work (maya@example.com) ✓ imap 127.0.0.1:3143 · signed in · IDLE MOVE UIDPLUS ✓ smtp 127.0.0.1:3025 · signed in This machine ✓ theme tokyo-night (~/.config/omarchy/current/theme) ✓ time zone America/New_York ✓ editor found one on PATH ✓ notify-send desktop notifications … 2 problem(s), 0 warning(s).
Work and personal in one list, newest first. Archive and replies still go to the right account.
A second connection waits in IMAP IDLE, so mail shows up the moment it lands.
Threads from Message-ID and References, folded to one row, read top to bottom with quotes hidden.
Filter the list as you type. Press ⏎ and the server searches the whole folder.
Newsletters laid out as clean text: headings, lists, links and tables keep their shape. No remote images load.
Cycle the From address through your accounts; the signature follows.
Turns a message into an event, with the date, time and call link it mentions already filled in.
Invites show as a card with what they overlap. a / t / n replies to the organizer and files the event.
gm creates a Google Meet link on an event; gz adds your personal Zoom room.
The rest of today’s meetings sit in the mail sidebar, so you never switch screens to check.
New mail in your inboxes and meetings about to start, through notify-send and mako.
Follows List-Unsubscribe, so the newsletter you never read stops coming.
Accounts, calendars, keys and theme, edited in the app. Your config.toml comments survive.
tern auth signs Gmail and Microsoft 365 in through the browser. No helper scripts.
Click, double-click and scroll every pane. Turn it off for the terminal’s own selection.
Calendars and contacts are cached; mail sent offline waits in the outbox and goes when you’re back.
neomutt is a great piece of software with decades of depth. If you need PGP or local maildir, keep using it. tern is for people who want mail, calendar and contacts working together today, with less configuration.
| neomutt | tern | |
|---|---|---|
| Mail over IMAP and SMTP | yes | yes |
| Push with IMAP IDLE | yes | yes |
| Calendar (CalDAV) | no | yes — agenda, edit, invitations |
| Contacts (CardDAV) | via abook / khard | yes — read and write |
| Gmail & Microsoft 365 sign-in | via an OAuth script | built in: tern auth |
| Undo send, retrying outbox | no | yes |
| Snooze | no | yes |
| Unified inbox | with notmuch | yes |
| Writing | $EDITOR | built-in vim-style pane, or $EDITOR |
| Configuration | muttrc | TOML plus an in-app settings screen |
| Colors | hand-written color lines | follows your Omarchy theme, live |
| Local maildir, mbox, notmuch | yes | no — IMAP only |
| PGP and S/MIME | yes | not yet |
tern is a single Rust binary. Install it with cargo, try the demo with no account, then point it at your servers. Settings → Accounts has presets for Fastmail, Google, iCloud and Microsoft 365.
# needs a Rust toolchain $ cargo install --git https://github.com/etmartinkazoo/tern $ tern --demo # look around, no account $ tern --init # write the config $ tern doctor # check every server $ tern