Mutt 2.0 Release Notes

Note: this is a review of some of the more interesting features in this release. For a complete list of changes please be sure to read the UPDATING file.

Backward Incompatible Changes

This release was bumped to 2.0, not because of the magnitude of features (which is actually smaller than past releases), but because of a few changes that are backward incompatible. Please read this list carefully to be aware of these changes:

Domain-literal support in email addresses

This feature isn't commonly needed, but see ticket 226 for the reasoning behind the request. This allows the use of literal IP addresses in place of the email address domain. For example user@[IPv6:fcXX:....].

Ability to change directory

The cd command allows the ability to change the working directory inside Mutt.

I believe this wasn't implemented previously because Mutt didn't resolve relative paths internally. So, starting Mutt with something like "mutt -f mymailbox" would cause Mutt to open "mymailbox" in the current directory and continue to refer to it as "mymailbox" internally. If the directory changed, Mutt would still refer (incorrectly) to "mymailbox" in the new directory.

Because of this, Mutt now also tries to resolve relative paths. This isn't as straightforward as you would think. So if you encounter issues, please let us know!

Automatic reconnect to IMAP on error

When an unplanned disconnect occurs, Mutt will try to reconnect automatically, preserving unsaved changes in the mailbox. This isn't bulletproof, but will hopefully at least reduce lost changes due to a mailbox connection freezing or being dropped.

Protected Headers Improvements

$crypt_protected_headers_subject defaults to "..." to comply with the recent recommendations.

Also, Mutt will store the Date, From, To, Cc, and Reply-To headers in protected headers. Mutt currently doesn't display or make use of those headers, but other MUA's may expect them to be there.

XOAUTH2 Support

"xoauth2" is supported as a value in $imap_authenticators, $smtp_authenticators, and $pop_authenticators. Additionally there is a refresh token script under the contrib directory which works with Python 3. (The script is not officially supported by the Mutt team, but has been reported to work.)

Pattern Completion

If you sometimes forget a pattern modifier, you can invoke <complete> (by default bound to the Tab key) after the ~ to get a list of pattern modifiers. Hitting enter on a selection will add it to the line editor.

Decode and Header Weeding

Three new variables, $copy_decode_weed, $pipe_decode_weed, and $print_decode_weed allow you to decouple the operation of "decoding" with the operation of header weeding. Pipe and print operations weed by default, preserving previous behavior. Copy and save operations do not weed by default.


MuttLisp is an experimental feature providing a Lisp-like enhancement to the configuration file. It allows more dynamic decisions about commands or command-arguments; however it is not a full-blown language, and does not take the place of macros or commands.

A simple example is the ability to execute commands conditionally:

      run (if (equal $USER "kevin8t8") \
            "set arrow_cursor")

or, with $muttlisp_inline_eval set, dynamically generate command arguments:

      set muttlisp_inline_eval
      set index_format = (if (equal $sidebar_visible "yes") \
        "short index format" \
        "long index format")

For a more detailed introduction and examples, please see the MuttLisp manual section.

Cursor Overlay

$cursor_overlay can be used to have an "underline" indicator, for instance, that shows the colors of the selected line underneath. default indicator foreground/background colors will be set by the color of the line instead. Attributes (such as bold, underline, reverse) will be merged between the two.

For example:

      color indicator underline default default
      color index red default ~N
      set cursor_overlay

With $cursor_overlay set, the "underline" cursor will show the red foreground of a new message.

Default Attachment Save Directory

$attach_save_dir specifies a directory to use when saving attachments. Note: the prompt will be the same, but relative path files will be saved relative to that directory.