Preview 0.1

Mutt Desktop

Mutt for Mac: native window, same keys, same config.

Mutt Desktop reads the (Neo)Mutt configuration you already have and shows your IMAP mail in a Mac window, with (Neo)Mutt's keys, patterns, and tag-prefix commands.

Get the preview, $9.99 macOS 14 or later · Apple silicon and Intel
The Mutt Desktop window: a message index on the left and an HTML message on the right, with a notice that remote images are blocked.
The index and an HTML message. Remote images stay blocked until you load them.

The keys you use in (Neo)Mutt do the same here

The defaults match NeoMutt's, and your bind lines change them.

Patterns and tags

Everyday

~f acme\.(com|org)
from acme.com or acme.org
~s ^Re:.*invoice
subject starts with Re: and mentions invoice
~N
unread
~X 1-
has at least one attachment
~m 10-20
messages 10 through 20
!~F
not flagged
;d
deletes everything tagged, with set my_muttdesktop_imap_operations=tagged

Patterns: ~f ~s ~t ~C ~e ~L take a regular expression; ~m takes message ranges and ~X attachment counts; ~N ~F ~D ~T ~U match message states; ! negates.

It reads your muttrc and runs your IMAP mail

A reply open in embedded Neovim, with From, To, Cc, Bcc, Subject, and Reply-To headers above the quoted message.
Replying in embedded Neovim, with the headers in the editor.
The draft review window listing From, To, Cc, Bcc, Fcc, Reply-To, Subject, the body size, and attachments, with key hints along the bottom.
Reviewing a draft before sending, with (Neo)Mutt's compose keys.
The file browser for attachments, listing a home folder with modified and added dates.
The file browser that attach-file opens.

One muttrc serves both programs

Mutt Desktop's own options and functions count as defined for ifdef, and (Neo)Mutt doesn't know them. Keep Mutt Desktop's settings in a file that only Mutt Desktop reads, and (Neo)Mutt never sees a bind to a function it lacks.

~/.neomuttrc
# Read by NeoMutt and Mutt Desktop alike.
set folder = "imaps://you@mail.example.com/"
set spool_file = "+INBOX"
set sort = threads
set index_format = "%4C %Z %{%b %d} %-15.15L %s"

# Only Mutt Desktop defines this function.
ifdef my-muttdesktop-load-remote-content \
  "source ~/.config/mutt/muttdesktop.rc"
~/.config/mutt/muttdesktop.rc
# NeoMutt stops here if it ever reads this file.
ifndef my-muttdesktop-load-remote-content finish

set my_muttdesktop_index_font = "SF Mono"
set my_muttdesktop_index_font_size = 13
set my_muttdesktop_index_alternating_rows = yes
set my_muttdesktop_autopreview = yes
set my_muttdesktop_imap_operations = tagged
bind index i my-muttdesktop-load-content-images

Your server changes only when you sync or leave the mailbox

Mailboxes open read-only for listing and reading. Deleting, flagging, and marking read queue up, as in (Neo)Mutt, and reach the server only when you run sync-mailbox or leave the mailbox.

By default each command changes one message; set my_muttdesktop_imap_operations=none turns all changes off. Mutt Desktop never expunges a whole mailbox, and your mail goes only between your Mac and your mail server.

IMAP and password logins only, for now

  • IMAP only. No local Maildir, mbox, or POP.
  • Password logins only, with no OAuth. Gmail works with an app password; accounts that require OAuth, such as Microsoft 365, won't connect.
  • No PGP or S/MIME.
  • Of NeoMutt's 472 options, 21 work fully and 44 partly. The rest are ignored, and a table in the documentation lists every one.

This is version 0.1. Keep backups of mail you can't lose.

OAuth and macros come next

Roughly in this order, with no dates promised:

  1. OAuth sign-in, so Microsoft 365 and other accounts without app passwords can connect.
  2. General macros and multi-key bindings. Today only save-to-mailbox macros work.
  3. More of NeoMutt's options and commands, working down the compatibility table.

Later, if people need them: local Maildir mailboxes, and PGP signing and encryption.

It needs macOS 14 and Neovim

macOS
14 Sonoma or later, Apple silicon or Intel
Editor
Neovim, for example brew install neovim
Mail
An IMAP account with SMTP sending and password login
Config
A (Neo)Mutt muttrc
Preview price $9.99

Paid once. It includes a year of free upgrades while Mutt Desktop catches up with Mutt's features. No subscription, no account, no tracking.

One disk image for Apple silicon and Intel, signed and notarized by Apple. Payment and download go through Buy Me a Coffee.

It works alongside (Neo)Mutt

(Neo)Mutt stays the better choice in a terminal.
Mutt Desktop is for when you want a Mac window: HTML mail rendered properly, links that open in your browser, files dropped onto a draft, and Cmd-Tab to your mail.
Mutt Desktop is independent of Mutt and NeoMutt.
It follows NeoMutt's behavior and configuration, and neither project makes or endorses it.
Mutt Desktop never changes your muttrc.
It only reads it. Options that only Mutt Desktop understands start with my_muttdesktop_, which (Neo)Mutt ignores, so one file works for both.
Selecting a message does not open it.
As in (Neo)Mutt, press Return or Space to read the message in the pager, which marks it read. To show the selected message beside the index as you move, add set my_muttdesktop_autopreview = yes; each message the cursor stops on is then marked read.
You could build this yourself with an LLM.
You can. The tokens will cost more than $9.99.