RSS Atom Add a new post titled:

Notmuch 0.38 (2023-09-12)


Support relative lastmod queries (see notmuch-sexp-queries(7) and notmuch-search-terms(7) for details).

Support indexing of designated attachments as text (see notmuch-config(1) for details).


Add options --offset and --limit to notmuch-show(1).


New commands notmuch-search-edit-search and notmuch-tree-edit-search.

Introduce notmuch-tree-outline-mode.

Some compatibility fixes for Emacs 29. At least one issue (hiding images) remains in 0.38.

Support completion when piping to external command.

Fix regression in updating tag display introduced by 0.37.


Fix bug creating database when database.path is not set.

Incremental performance improvements for message deletion.

Catch Xapian exceptions when deleting messages.

Sync removed message properties to the database.

Replace use of thread-unsafe Query::MatchAll in the infix query parser.


Be more careful when clearing the results directory.


Use database_open_with_config, and provide compatible path search semantics.

Bugfix for query.get_sort

Test Suite

Support testing installed version of notmuch.

Adapt to some breaking changes in glib handling of init files.

Replace OpenPGP key used in test suite.

Performance Tests

Update signatures for performance test corpus.

Posted Tue Sep 12 00:00:00 2023

Notmuch 0.37 (2022-08-21)


Fix uninitialized field in message objects.

Improve exception handling and error propagation for message objects.

Sexp Queries

Add one sided lastmod ranges for sexp queries.

Expand macro parameters inside regex and wildcard modifiers.

Command Line Interface

notmuch help now works for external commands.

NOTMUCH_CONFIG is now passed to external commands and hooks.

Promote the development tool nmbug to a user facing tool notmuch-git. See notmuch-git(1) for details.


The function notmuch-mua-mail now moves point depending on the provided arguments.

Restrict what mime types are inlined in replies and on refresh.

The functions in notmuch-query.el are now obsolete and may be removed in a future version of Notmuch.

Add some controls for lazy display of message bodies (See "Dealing with large messages and threads" in the notmuch-emacs documentation).

Allow the user to select (with '%') a different duplicate message file to display.

Use message-dont-reply-to-names in notmuch-message-mode.

Support custom header-line format for notmuch-show mode.

Posted Sun Aug 21 00:00:00 2022

Notmuch 0.36 (2022-04-25)


Add the sexp prefix to the infix (traditional) query parser. This allows specific subqueries to be parsed by the sexp parser (with appropriate quoting). See notmuch-search-terms(7) for details.

Add another heuristic to regexp fields to prevent phrase parsing of bracketed sub-expressions.

Command Line Interface

Envelope from ("From ") headers are now escaped as X-Envelope-From: in input to notmuch-insert. This prevents creating mbox files when calling notmuch-insert from e.g. postfix.

Python (CFFI) Bindings

Use the config_pairs API in ConfigIterator. This returns all matching key-value pairs, not just those that happen to be stored in the database.


Reorganize documentation for notmuch-config. Add a few links from other man pages.


Bind the usual undo key sequences to new command "notmuch-tag-undo". This allows transparent undo of tagging operations.


Fix smime.4 with newer gmime. Unset XDG_DATA_HOME and MAILDIR for tests.

New add-on tool: notmuch-web

The new devel/ tool notmuch-web is a very thin web client. It supports a full search interface for one user: there is no facility for multiple users provided today. See the notmuch-web README file for more information.

Be careful about running it on a network-connected system: it will expose a web interface that requires no authentication but exposes your mail store.

Posted Mon Apr 25 00:00:00 2022

Notmuch 0.35 (2022-02-06)


Implement the date and lastmod fields in the S-expression parser.

Ignore trailing / for pathnames in both query parsers.

Rename configuration option built_with.sexpr_query to built_with.sexp_queries.

Do not assume a default mail root in split (e.g. XDG) configurations.

Fix some small memory leaks in notmuch_database_open_with_config.


Improve handling of leading/trailing punctuation and space for configuration lists.

Only ignore .notmuch at the top level in notmuch new.

Optionally show extra headers in notmuch show. See show.extra_headers in notmuch-config(1).


Drop C-TAB binding in hello mode, document backtab.

Fix visual glitch in search mode by running notmuch-search-hook lazily.

Don't add space to completion candidates, improves compatibility with third party completion frameworks.

Make citation formatting more robust against whitespace.

Use --excludes=false when generating the 'All tags' section.

Use cached copy of message body for Fcc, avoiding variant bodies for signed and/or encrypted messages.

Add notmuch-logo.svg and use it in notmuch-hello view, replacing the .png version.

Make header line in show buffers optional.

Add customizable names for search buffers.


Fix out-of-tree build for python-cffi bindings.

Rearrange position of {C,CXX,CPP,LD}FLAGS, prevent some clashes with installed version of notmuch.

Ignore more configure options.

Test Suite

Replace some uses of gdb in the test suite with LD_PRELOAD based shims.

Use --with-colons for gpgsm, fix compatibility with newer gnupg.

Python bindings

Add matched property to message objects.

Users are reminded that the old python bindings in bindings/python are deprecated; this will probably be the last major release that ships them.


Use database.mail_root for path completion in bash/zsh.

Posted Sun Feb 6 00:00:00 2022

Notmuch 0.34.3 (2022-01-09)


Do not crash when presented with a .notmuch directory without a xapian/ subdirectory.

Python Bindings (notmuch2)

Database constructor now searches for configuration by default. Pass config=Database.CONFIG.EMPTY to disable.

The Message.replies() method now returns OwnedMessage objects, to prevent certain memory de-allocation errors.

Fix for importing notmuch2 module when building bindings documentation.

Posted Sun Jan 9 00:00:00 2022

Notmuch 0.34.2 (2021-12-09)


Fix a bug that wrongly resolved conflict between the database_path parameter to notmuch_database_open_with_config and configuration item database.path in favour of the latter.

Python Bindings (notmuch2)

When building the documentation for the notmuch2 python module, import from the built module, not a system wide installed one.

The notmuch2.Database constructor now uses the library function notmuch_database_open_with_config to support the same configuration and database location options as the library does.

Fix some unprintable exception objects.

Posted Thu Dec 9 00:00:00 2021

Notmuch 0.34.1 (2021-11-03)


Fix for deallocation and nulling of output parameter for notmuch_database{open_with,create_with,load}config when errors occur. This change fixes a potential use-after-free bug that has been present since 0.32. This release also improves the documentation of status returns for the same 3 functions.

Posted Wed Nov 3 00:00:00 2021

Notmuch 0.34 (2021-10-20)


An optional new s-expression based query parser is available if notmuch is built with the sfsexp library. See notmuch-sexp-queries(7) for syntax, and use notmuch config get built_with.sexpr_query to check if notmuch is compiled with s-expression query support.


Support multiple Delivered-To headers in notmuch-reply(1).


Functions are now allowed in notmuch-search-result-format.

Improvements to unthreaded view on large threads.

Tolerate bad/missing working directory for most commands.

Allow customization of tree drawing symbols in notmuch-tree mode.

Posted Wed Oct 20 00:00:00 2021

Notmuch 0.33.2 (2021-09-30)


Improve reliability of T355-smime by changing gpgsm initialization.

Posted Thu Sep 30 00:00:00 2021

Notmuch 0.33.1 (2021-09-10)


Replace the fully-qualified-domain-name of the host with "localhost" in the default email address. This should fix two flaky subtests in T590-libconfig.

Posted Fri Sep 10 00:00:00 2021

Notmuch 0.33 (2021-09-03)


Correct documentation about transactions.

Add a configurable automatic commit of transactions. See database.autocommit in notmuch-config(1).

Document the algorithm used to find a database.


Define format version 5, which supports sorting the output of notmuch-show.


notmuch no longer sets mail-user-agent on load. To restore the previous behaviour of using notmuch to send mail by default, customize mail-user-agent to notmuch-user-agent.

notmuch-company now works in org-msg.

Improve the display of messages from long threads in unthreaded mode.

Prefer email addresses over User ID when showing valid signatures.

Define a new face notmuch-jump-key.

New commands in notmuch-tree view: notmuch-tree-filter and notmuch-tree-filter-by-tag.

Honour notmuch-show-text/html-blocked-images when using w3m to render html.

Support toggling sort order in notmuch-tree mode.


Memory management of allocated notmuch objects (database, messages, etc...) is now done via the Ruby GC. This removes all constraints on the order of object destruction. Database close and destroy are split, following an old library API change.


Respect excluded tags when showing a thread.


Fix doc build for Sphinx 4.0.

Improve the markup and linking of the documentation.

Posted Fri Sep 3 00:00:00 2021

Notmuch 0.32.3 (2021-08-17)


Restore location of database via MAILDIR environment variable, which was broken in 0.32.

Bump libnotmuch minor version to match the documentation in notmuch.h.

Correct documentation for deprecated database opening functions to point out that they (still) do not load configuration information.


Restore "notmuch config get built_with.*", which was broken in 0.32.

Posted Tue Aug 17 00:00:00 2021

Notmuch 0.32.2 (2021-06-27)


Fix a bug from 2017 that can add duplicate thread-id terms to message documents.


Fix small memory leak in notmuch new.


Add (require 'seq) for seq-some.


Fix man page build for Sphinx 4.x. Fix variable name in emacs docs.


Fix backup creation in perf-test/T00-new. Check openssl prerequisite in add_gpgsm_home.

Posted Sun Jun 27 00:00:00 2021

Notmuch 0.32.1 (2021-05-15)


Restore handling of relative values for database.path that was broken by 0.32. Extend this handling to database.mail_root, database.backup_dir, and database.hook_dir.

Reload certain metadata from Xapian database in notmuch_database_reopen. This fixes a bug when adding messages to the database in a pre-new hook.

Fix default of $HOME/mail for database.path. In release 0.32, this default worked only in "notmuch config".


Restore the dynamically bound variables tag-changes and query in in notmuch-before-tag-hook and notmuch-after-tag-hook.

Add notmuch-jump-key face to fontify keys in notmuch-jump and related functions. To ensure backward compatibility, the new face inherits from minibuffer-prompt.

Posted Sat May 15 00:00:00 2021

Notmuch 0.32 (2021-05-02)


This release includes a significant overhaul of the configuration management facilities for notmuch. The previous distinction between configuration items that can be modified via plain text configuration files and those that must be set in the database via the "notmuch config" subcommand is gone, and all configuration items can be set in both ways. The external configuration file overrides configuration items in the database. The location of database, hooks, and configuration files is now more flexible, with several new configuration variables. In particular XDG locations are now supported as fallbacks for database, configuration and hooks. For more information see notmuch-config(1).


To support the new configuration facilities, several functions and constants have been added to the notmuch API. Most notably:

  • notmuch_database_create_with_config
  • notmuch_database_open_with_config
  • notmuch_database_load_config
  • notmuch_config_get

A previously requested API change is that notmuch_database_reopen is now exposed (and generalized).

The previously severe slowdowns from large numbers calls to notmuch_database_remove_message or notmuch_message_delete in one session has been fixed.

As always, the canonical source of API documentation is lib/notmuch.h, or the doxygen formatted documentation in notmuch(3).


The notmuch config set subcommand gained a --database argument to specify that the database should be updated, rather than a config file.

The speed of notmuch new and notmuch reindex in dealing with large numbers of mail file deletions is significantly improved.


Completion related updates include: de-duplicating tags offered for completion, use the actual initial input in address completion, allow users to opt out of notmuch address completion, and do not force Ido when prompting for senders.

Some keymaps used to contain bindings for unnamed commands. These lambda expressions have been replaced by named commands (symbols), to ease customization.

Lexical binding is now used in all notmuch-emacs libraries.

Fix bug in calling notmuch-mua-mail with a non-nil RETURN-ACTION.

Removed, inlined or renamed functions and variables:

notmuch-documentation-first-line, notmuch-folder,
notmuch-hello-trim, notmuch-hello-versions => notmuch-version,
notmuch-remove-if-not, notmuch-search-disjunctive-regexp,
notmuch-sexp-eof, notmuch-split-content-type, and

Keymaps are no longer fset, which means they need to be referred to in define-key directly (without quotes). If your Emacs configuration has a keybinding like:

(define-key 'notmuch-show-mode-map "7" 'foo)

you should change it to:

(define-key notmuch-show-mode-map "7" 'foo)
Posted Sun May 2 00:00:00 2021

Notmuch 0.31.4 (2021-02-18)


Fix include bug triggered by glib 2.67.


Fix race condition in T568-lib-thread.

Posted Thu Feb 18 00:00:00 2021

Notmuch 0.31.3 (2020-12-25)


Fix for exclude tags in notmuch2 bindings.


Portability update for T360-symbol-hiding.


Fix for memory error in notmuch_database_get_config_list.

Posted Fri Dec 25 00:00:00 2020

Notmuch 0.31.2 (2020-11-08)


Catch one more occurrence of "version" in the build system, which caused the file to be regenerated in the release tarball.

Posted Sun Nov 8 12:00:00 2020

Notmuch 0.31.1 (2020-11-08)


Fix a memory initialization bug in notmuch_database_get_config_list.


Rename file 'version' to 'version.txt'. The old file name conflicted with a C++ header for some compilers.

Replace use of coreutils realpath in configure.

Posted Sun Nov 8 00:00:00 2020

Notmuch 0.31 (2020-09-05)


Notmuch now supports Emacs 27.1. You may need to set mml-secure-openpgp-sign-with-sender and/or mml-secure-smime-sign-with-sender to continue signing messages.

The minimum supported major version of GNU Emacs is now 25.1.

Add support for moving between threads after notmuch-tree-from-search-thread.

New notmuch-unthreaded mode (added in Notmuch 0.30)

Unthreaded view is a mode where each matching message is shown on a separate line.

The main key entries to unthreaded view are

'u' enter a query to view in unthreaded mode (works in hello, search, show and tree mode)

'U' view the current query in unthreaded mode (works from search, show and tree)

Saved searches can also specify that they should open in unthreaded view.

Currently it is not possible to specify the sort order: it will always be newest first.


The shell pipeline executed by notmuch-mutt, which symlinked matched files to a maildir for mutt to access is replaced with internal perl processing. This search operation is now more portable, and somewhat faster.


Improve exception handling in the library. This should largely eliminate terminations inside the library due to uncaught exceptions or internal errors. No doubt there are a few uncovered code paths still; please report them as bugs.

Add notmuch_message_get_flag_st and notmuch_message_has_maildir_flag_st, and deprecate the existing non-status providing versions.

Move memory de-allocation from notmuch_database_close to notmuch_database_destroy.

Handle relative filenames in notmuch_database_index_file, as promised in the documentation.

Python Bindings

Documentation for the python bindings is merged into the main sphinx-doc documentation tree. The merged documentation can be built with e.g. make sphinx-html


We now support building notmuch against Xapian 1.5 (the current development version).

Test Suite

Test suite fixes for compatibility with Emacs 27.1.

Build System

Man pages are now compressed reproducibly.

Posted Sat Sep 5 00:00:00 2020

Notmuch 0.30 (2020-07-10)


Handle S/MIME (PKCS#7) messages -- one-part signed messages, encrypted messages, and multilayer messages. Treat them symmetrically to OpenPGP messages. This includes handling protected headers gracefully.

If you're using Notmuch with S/MIME, you currently need to configure gpgsm appropriately.

Mixed-up MIME Repair

Detect and automatically repair a common form of message mangling created by Microsoft Exchange (see index.repaired=mixedup in notmuch-properties(7)).

Protected Headers

Avoid indexing the legacy-display part of an encrypted message that has protected headers (see index.repaired=skip-protected-headers-legacy-display in notmuch-properties(7)).


Drop support for python2, focus on python3.

Introduce new CFFI-based python bindings in the python module named "notmuch2". Officially deprecate (but still support) the older "notmuch" module.


Support for Xapian 1.2 is removed. The minimum supported version of Xapian is now 1.4.0.

Posted Fri Jul 10 00:00:00 2020

Notmuch 0.29.3 (2019-11-27)


Fix for use-after-free in notmuch_config_list_{key,val}.

Fix for double close of file in notmuch-dump.


Drop python2 support from shipped debian packaging.

Posted Wed Nov 27 00:00:00 2019

Notmuch 0.29.2 (2019-10-19)


Fix for file descriptor leak when opening gzipped mail files. Thanks to James Troup for the bug report and the fix.

Posted Sat Oct 19 00:00:00 2019

Notmuch 0.29.1 (2019-06-11)


Fix for installation failure with configure --without-emacs.

Posted Tue Jun 11 00:00:00 2019

Notmuch 0.29 (2019-06-07)


Add "body:" field to allow searching for terms that occur only in the message body. Users will need to reindex their mail to take advantage of this feature.

Add support for indexing user specified headers (e.g. List-Id). See notmuch-config(1) for details. This requires reindexing after changing the set of headers to be indexed.

Fix bug for searching in some headers for Xapian keywords in quoted strings.

Add support for gzip compressed mail messages (/not/ multi-message mboxes); e.g. gzip -9 $MAIL/archive/giant-message && notmuch new should work. Note that maildir flag syncing for gzipped messages is currently untested.

Notmuch is now capable of indexing, searching and rendering cryptographically-protected Subject: headers of the form produced by Enigmail and K-9 mail in encrypted messages.

Command Line Interface

notmuch show now supports --body=false and --include-html with --format=text.

Fix several performance problems with notmuch reindex.

notmuch show and notmuch reply now emit per-message cryptographic status in their json and sexp output formats. See devel/schemata for more details about what is included there. This status includes information about cryptographic protections for the Subject header.


Optionally check for missing attachments in outgoing messages (see function notmuch-mua-attachment-check).

Bind B to browse URLs in current message.

Bind g to refresh the current notmuch buffer.

Editing a message as new now includes an FCC header.

Forwarded messages are now tagged as +forwarded (customizable).

Add references header to link forwarded message to thread of original message.

The minimum supported major version of Emacs is now 24.

Support for GNU Emacs older than 25.1 is deprecated with this release, and may be removed in a future release.

Notmuch-emacs documentation is somewhat expanded. More contributions are very welcome.

Build System

Notmuch release tarballs are now compressed with xz.

We now provide conventional detached signatures of the release tarballs in addition to the signed sha256sum files.


Support for GMime 2.6 is removed. The minimum supported version of GMime is now 3.0.3. GMime also needs to have been compiled with cryptography support.

Test Suite

If either GNU parallel or moreutils parallel is installed, the tests in the test suite will now be run in parallel (one per available core). This can be disabled with NOTMUCH_TEST_SERIALIZE=1.

Posted Fri Jun 7 00:00:00 2019

Notmuch 0.28.4 (2019-05-05)

Command line interface

Fix a spurious error when using notmuch show --raw on messages whose size is a multiple of the internal buffer size.

Posted Sun May 5 00:00:00 2019

Notmuch 0.28.3 (2019-03-05)


Fix a bug with the internal data structure _notmuch_string_map_t used by message properties.

Build System

Serialize calls to sphinx-build to avoid race condition.

Posted Tue Mar 5 00:00:00 2019

Notmuch 0.28.2 (2019-02-17)


Invoke gpg with --batch and --no-tty.

Python Bindings

Fix documentation build with Python 3.7. Note that Python >= 3.3 is now needed to build this documentation.

Posted Sun Feb 17 00:00:00 2019

Notmuch 0.28.1 (2019-02-01)

Build System

configure no longer uses the special variable BASH, as this causes problems on systems where /bin/sh is bash.

Posted Fri Feb 1 00:00:00 2019

Notmuch 0.28 (2018-10-12)


Improve threading

The threading algorithm has been updated to consider all references, not just the heuristically chosen parent (e.g. when that parent is not in the database). The heuristic for choosing a parent message has also been updated to again consider the In-Reply-To header, if it looks sensible. Re-indexing might be needed to take advantage of the latter change.

Handle mislabelled Windows-1252 parts

Messages that contain Windows-1252 are apparently frequently mislabelled as ISO 8859-1. Use GMime functionality to apply the correct encoding for such messages.

Command Line Interface

Support relative database paths

Database paths (i.e. parameters to notmuch config set database.path) without a leading / are now interpreted relative to $HOME of the invoking user.


Improve stderr handling

Add a real sentinel process to clean up stderr buffer. This is needed on e.g. macOS.

Call notmuch-mua-send-hook hooks when sending a message

This hook was documented, but not functional for a very long time.


The zsh completion has been updated to cover most of the notmuch CLI. Internally it uses regexp searching, so needs at least Notmuch 0.24.

Build System

The build system now installs notmuch-mutt and notmuch-emacs-mua with absolute shebangs, following the conventions of most Linux distributions.

Test Suite

Fix certain tests that were failing with GMime 2.6. Users are reminded that support for versions of GMime before 3.0.3 has been deprecated since Notmuch 0.25.

Posted Fri Oct 12 00:00:00 2018

Notmuch 0.27 (2018-06-13)


Add support for thread:{} queries

Queries of the form thread:{foo} and thread:{bar} match threads containing (possibly distinct) messages matching foo and bar. See notmuch-search-terms(7) for details.

Command Line Interface

Add the --full-scan option to notmuch new

This option disables mtime based optimization of scanning for new mail.

Add new --decrypt=stash option for notmuch show

This facilitates a workflow for encrypted messages where message cleartext are indexed on first read, but the user's decryption key does not have to be available during message receipt.


An initial manual for notmuch-emacs is now installed by default (in info format).


As of this release, support for versions of Xapian before 1.4.0 is deprecated, and may disappear in a future release of notmuch.

Posted Wed Jun 13 00:00:00 2018

Notmuch 0.26.2 (2018-04-28)

Library Changes

Work around Xapian bug with get_mset(0,0, x)

This causes aborts in _notmuch_query_count_documents on e.g. Fedora 28. The underlying bug is fixed in Xapian commit f92e2a936c1592, and will be fixed in Xapian 1.4.6.

Make thread indexing more robust against reference loops

Choose a thread root by date in case of reference loops. Fix a related abort in notmuch show.

Posted Sat Apr 28 00:00:00 2018

Notmuch 0.26.1 (2018-04-02)

Library Changes

Bump the library minor version. This should have happened in 0.26, but better late than never.

Posted Mon Apr 2 00:00:00 2018

Notmuch 0.26 (2018-01-09)

Command Line Interface

Support for re-indexing existing messages

There is a new subcommand, notmuch reindex, which re-indexes all messages matching supplied search terms. This permits users to change the way specific messages are indexed.

Note that for messages with multiple variants in the message archive, the recorded Subject: of may change upon reindexing, depending on the order in which the variants are indexed.

Improved error reporting in notmuch new

Give more details when reporting certain Xapian exceptions.

Support maildir synced tags in new.tags

Tags draft, flagged, passed, and replied are now supported in new.tags. The tag unread is still special in the presence of maildir syncing, and will be added for files in new/ regardless of the setting of new.tags.

Support /regex/ in new.ignore

Files and directories may be ignored based on regular expressions.

Allow notmuch insert --folder=""

This inserts into the top level folder.

Strip trailing '/' from folder path for notmuch insert

This prevents a potential problem with duplicated database records.

New option --output=address for notmuch address

Make notmuch show more robust against deleting duplicate files

The option --decrypt now takes an explicit argument

The --decrypt option to notmuch show and notmuch reply now takes an explicit argument. If you were used to invoking notmuch show --decrypt, you should switch to notmuch show --decrypt=true.

Boolean and keyword arguments now take a --no- prefix

Encrypted Mail

Indexing cleartext of encrypted e-mails

It's now possible to include the cleartext of encrypted e-mails in the notmuch index. This makes it possible to search your encrypted e-mails with the same ease as searching cleartext. This can be done on a per-message basis by passing --decrypt=true to indexing commands (new, insert, reindex), or by default by running "notmuch config set index.decrypt true".

Encrypted messages whose cleartext is indexed will typically also have their session keys stashed as properties associated with the message. Stashed session keys permit rapid rendering of long encrypted threads, and disposal of expired encryption-capable keys. If for some reason you want cleartext indexing without stashed session keys, use --decrypt=nostash for your indexing commands (or run "notmuch config set index.decrypt nostash"). See index.decrypt in notmuch-config(1) for more details.

Note that stashed session keys permit reconstruction of the cleartext of the encrypted message itself, and the contents of the index are roughly equivalent to the cleartext as well. DO NOT USE this feature without considering the security of your index.


Guard against concurrent searches in notmuch-tree

Use make-process when available

This allows newer Emacs to separate stdout and stderr from the notmuch command without using temporary files.

Library Changes

Indexing files with duplicate message-id

Files with duplicate message-id's are now indexed, and searchable via terms and phrases. There are known issues related to presentation of results and regular-expression search, but in principle no mail file should be completely unsearchable now.

New functions to count files

Two new functions in the libnotmuch API: notmuch_message_count_files, and notmuch_thread_get_total_files.

New function to remove properties

A new function was added to the libnotmuch API to make it easier to drop all properties with a common pattern: notmuch_message_remove_all_properties_with_prefix

Change of return value of notmuch_thread_get_authors

In certain corner cases, notmuch_thread_get_authors previously returned NULL. This has been replaced by an empty string, since the possibility of NULL was not documented.

Transition notmuch_database_add_message to notmuch_database_index_file

When indexing an e-mail message, the new notmuch_database_index_file function is the preferred form, and the old notmuch_database_add_message is deprecated. The new form allows passing a set of options to the indexing engine, which the operator may decide to change from message to message.

Test Suite

Out-of-tree builds

The test suite now works properly with out-of-tree builds, i.e. with separate source and build directories. The --root option to tests has been dropped. The same can now be achieved more reliably using out-of-tree builds.

Python Bindings

Python bindings specific Debian packaging is removed

The bindings have been build by the top level Debian packaging for a long time, and bindings/python/debian has bit-rotted.

Open mail files in binary mode when using Python 3

This avoids certain encoding related crashes under Python 3.

Add python bindings for notmuch_database_{get,set}_config*

Optional decrypt_policy flag is available for notmuch.database().index_file()


nmbug's internal version increases to 0.3 in this notmuch release. User-facing changes with this notmuch release:

  • Accept failures to unset core.worktree in clone, which allows nmbug to be used with Git 2.11.0 and later.
  • Auto-checkout in clone if it wouldn't clobber existing content, which makes the initial clone more convenient.
  • Only error for invalid diff lines in tags/, which allows for READMEs and similar in nmbug repositories.


New man page: notmuch-properties(7)

This new page to the manual describes common conventions for how properties are used by libnotmuch, the CLI, and associated programs. External projects that use properties are encouraged to claim their properties and conventions here to avoid collisions.

Posted Tue Jan 9 00:00:00 2018

Notmuch 0.25.3 (2017-12-08)


Extend mitigation (disabling handling x-display in text/enriched) for Emacs bug #28350 to Emacs versions before 24.4 (i.e. without advice-add).

Command Line Interface

Correctly report userid validity. Fix test suite failure for GMime >= 3.0.3. This change raises the minimum supported version of GMime 3.x to 3.0.3.

Posted Fri Dec 8 00:00:00 2017

Notmuch 0.25.2 (2017-11-05)

Command Line Interface

Fix segfault in notmuch-show crypto handling when compiled against GMime 2.6; this was a regression in 0.25.


Support for GMime before 3.0 is now deprecated, and will be removed in a future release.

Posted Sun Nov 5 00:00:00 2017

Notmuch 0.25.1 (2017-09-11)


Disable handling x-display in text/enriched messages. Mitigation for Emacs bug #28350.

Posted Mon Sep 11 00:00:00 2017

Notmuch 0.25 (2017-07-25)


Add regexp searching for mid, paths, and tags.

Skip HTML tags when indexing

In particular this avoids indexing large inline images.

Command Line Interface

Bash completion is now installed to /usr/share by default.

Allow space as separator for keyword arguments.


Support for stashing message timestamp in show and tree views

Invoking notmuch-show-stash-date with a prefix argument stashes the unix timestamp of the current message instead of the date string.

Don't use 'function' as variable name, workaround emacs bug 26406.

Library Changes

Add workaround for date parsing of bad input in older GMime

In certain circumstances, older GMime libraries could return negative numbers when parsing syntactically invalid dates.

Replace deprecated functions with status returning versions

API of notmuch_query{search,count}{messages,threads} has changed. notmuch_query_add_tag_exclude now returns a status value.

Add support for building against GMime 3.0.

Rename libutil.a to libnotmuch_util.a.

libnotmuch SONAME is incremented to

Posted Tue Jul 25 00:00:00 2017

Notmuch 0.24.2 (2017-06-01)

Command Line Interface

Fix output from notmuch dump --include=properties to not include tags.


Fix filename stashing in tree view.

Posted Thu Jun 1 00:00:00 2017

Notmuch 0.24.1 (2017-04-01)


Fix regressions in non-regexp search for from: and subject:

The regexp search code in 0.24 introduced a regression in the handling of empty queries and wildcards. These are both corrected in this release.

Command Line Interface

Fix several memory leaks in notmuch show

Update NEWS for 0.24 to mention schema changes

Fix bug in dump header

The previous version of the dump header failed to mention the inclusion of tags. This fix bumps the version number of the dump format to 3. There are no other changes to the format.

Library Changes

Fix a read-after-free in the library.

Posted Sat Apr 1 00:00:00 2017

Notmuch 0.24 (2017-03-12)


Regular expression searches supported for from: and subject:

This requires recent Xapian (1.4+) See notmuch-search-terms(7) for details.

Command Line Interface

Run external notmuch- prefixed commands as subcommands

You can now add your own notmuch- prefixed commands in PATH, and have notmuch run them as if they were notmuch commands. See the notmuch(1) man page for details

New default output format to 3

See devel/schemata for details. Users of the structured output format are reminded of the --format-version argument to notmuch show and notmuch search which can prevent breakage when the default format changes.


Postpone and resume messages in notmuch-message-mode (composition)

Notmuch now has built in support for postponing, saving and resuming messages. The default bindings are C-x C-s to save a draft, C-c C-p to postpone a draft (save and exit compose buffer), and "e" in show or tree view to resume.

Draft messages are tagged with notmuch-draft-tags (draft by default) so you may wish to add that to the excluded tags list. When saving a previously saved draft message the earlier draft gets tagged deleted.

Note that attachments added before postponing will be included as they were when you postponed in the final message.

Address Completion

It is now possible to save the list of address completions for notmuch's internal completion between runs of emacs. This makes the first calls to address completion much better and faster. For privacy reasons it is disabled by default, to enable set or customize notmuch-address-save-filename.

Tag jump menu

It is now possible to configure tagging shortcuts (with an interface like notmuch jump). For example (by default) k u will remove the unread tag, and k s will add a tag "spam" and remove the inbox tag. Pressing k twice will do the reverse operation so, for example, k k s removes the spam tag and adds the inbox tag. See the customize variable notmuch-tagging-keys for more information.

Refresh all buffers

It is now possible to refresh all notmuch buffers to reflect the current state of the database with a single command, M-=.

Stop display of application/* parts

By default gnus displays all application/* parts such as application/zip in the message buffer. This has several undesirable effects for notmuch (security, triggering errors etc). Notmuch now overrides this and does not display them by default. If you have customized mm-inline-override-types then we assume you know what you want and do not interfere; if you do want to stop the display of application/* add application/* to your customization. If you want to allow application/* then set mm-inline-override-types to "non/existent".

Small change in the api for notmuch-search-tag

When notmuch-search-tag is called non-interactively and the region is set, then it only tags the threads in the region. (Previously it only tagged the current thread.)

Bugfix for sending messages with very long headers

Previously emacs didn't fold very long headers when sending which could cause the MTA to refuse to send the message. This makes sure it does fold any long headers so the message is RFC compliant.

notmuch emacs-mua command installed with the Emacs interface

We've carried a notmuch-emacs-mua script in the source tree for quite some time. It can be used to launch the Notmuch Emacs interface from the command line in many different ways. Starting with this release, it will be installed with the Emacs interface. With the new external subcommand support, the script transparently becomes a new notmuch command. See the notmuch-emacs-mua(1) man page for details.

Notmuch Emacs desktop integration

The desktop integration file will now be installed with the Notmuch Emacs interface, adding a Notmuch menu item and configuration to allow the user to set up Notmuch Emacs as the mailto: URL handler.

Library changes

notmuch_query_count_messages is now non-destructive

Internally the implementation of excludes has changed to make this possible.

Improved handling of DatabaseModifiedError

Previously uncaught exceptions reading message metadata are now handled.

Posted Sun Mar 12 00:00:00 2017

Notmuch 0.23.7 (2017-02-28)

Test Suite

Drop use of gpgconf --create-socketdir. Move $GNUPGHOME to /tmp.

It turns out the hardcoded use of /run/user in gpg doesn't work out that well in some environments. The more low tech fix is to move all of $GNUPGHOME to somewhere where we can control the length of the paths.

Posted Tue Feb 28 00:00:00 2017

Notmuch 0.23.6 (2017-02-27)

Command Line Interface

Fix read-after-free bug in notmuch new.

Test Suite

Use gpgconf --create-socketdir if available.

GnuPG has a facility to use sockets in /run or /var/run to avoid problems with long socket paths, but this is not enabled by default for GNUPGHOME other than $HOME/.gnupg. Enable it, if possible.

Posted Mon Feb 27 00:00:00 2017

Notmuch 0.23.5 (2017-01-09)

Build system

Fix quoting bug in configure. This had introduced a RUNPATH into the notmuch binary in cases where it was not not needed.

Posted Mon Jan 9 00:00:00 2017

Notmuch 0.23.4 (2016-12-24)

Command Line Interface

Improve error handling in notmuch insert

Database lock errors no longer prevent message file delivery to the filesystem. Certain errors during notmuch insert most likely to be temporary return EX_TEMPFAIL.


Restore autoload cookie for notmuch-search.

Posted Sat Dec 24 00:00:00 2016

Notmuch 0.23.3 (2016-11-27)

Command Line Interface

Treat disappearing files during notmuch new as non-fatal.

Test Suite

Fix incompatibility (related to signature size) with gnupg 2.1.16.

Posted Sun Nov 27 00:00:00 2016

Notmuch 0.23.2 (2016-11-20)


Fix notmuch-interesting-buffer and notmuch-cycle-notmuch-buffers.

notmuch-tree-mode and notmuch-message-mode buffers are now considered interesting by notmuch-interesting-buffer and notmuch-cycle-notmuch-buffers.

Restore compatibility with Emacs 23.

Notmuch support for Emacs 23 is now deprecated.

Posted Sun Nov 20 00:00:00 2016

Notmuch 0.23.1 (2016-10-23)


Require Xapian >= 1.2.6

The ifdef branch for older Xapian (pre-compact API) had bit-rotted.


Fix default colours for unread and flagged messages

In 0.23 the default colours for unread and flagged messages in search view were accidentally swapped. This release returns them to the original colours.

A related change in 0.23 broke the customize widget for notmuch-search-line-faces. This is now fixed.

Fix test failure with Emacs 25.1

A previously undiscovered jit-lock related bug was exposed by Emacs 25, causing a notmuch-show mode test to fail. This release fixes the bug, and hence the test.

Posted Sun Oct 23 00:00:00 2016

Notmuch 0.23 (2016-10-03)

General (Xapian 1.4+)

Compiling against Xapian 1.4 enables several new features.

Support for single argument date: queries

date:<expr> is equivalent to date:<expr>..<expr>.

Support for blocking opens

When opening a database notmuch by default will wait for another process to release a write lock, rather than returning an error.

Support for named queries

Named queries (also known as 'saved searches') can be defined with a query:name format. The expansion of these queries is stored in the database and they can be used from any notmuch client.


Message property API

libnotmuch now supports the attachment of arbitrary key-value pairs to messages. These can be used by various tools to manage their private data without polluting the user tag space. They also support iteration of values with the same key or same key prefix.

Bug fix for notmuch_directory_set_mtime

Update cached mtime to match on-disk mtime.


Support for compile time options

A group of built_with keys is now supported for notmuch config. Initial keys in this group are compact, field_processor, and retry_lock.

Dump/Restore support for configuration information and properties

Any configuration information stored in the database (initially just named queries) is dumped and restored. Similarly any properties attached to messages are also dumped and restored. Any new information in the dump format is prefixed by '#' to allow existing scripts to ignore it.


Make notmuch-message-mode use insert for fcc

Notmuch-message-mode now defaults to using notmuch insert for fcc. The old file based fcc behaviour can be restored by setting the defcustom notmuch-maildir-use-notmuch-insert to nil.

When using notmuch insert, notmuch-fcc-dirs must be a subdirectory of the mailstore (absolute paths are not permitted) followed by any tag changes to be applied to the inserted message. The tag changes are applied after the default tagging for new messages. For example setting the header to "sentmail -inbox +sent" would insert the message in the subdirectory sentmail of the mailstore, add the tag "sent", and not add the (normally added) "inbox" tag.

Finally, if the insert fails (e.g. if the database is locked) the user is presented with the option to retry, ignore, or edit the header.

Make internal address completion customizable

There is a new defcustom notmuch-address-internal-completion which controls how the internal completion works: it allows the user to choose whether to match on messages the user sent, or the user received, and to filter the messages used for the match, for example by date.

Allow internal address completion on an individual basis

There is a new function notmuch-address-toggle-internal-completion (by default it has no keybinding) which allows users who normally use an external completion command to use the builtin internal completion for the current buffer.

Alternatively, if the user has company-mode enabled, then the user can use company mode commands such as company-complete to activate the builtin completion for an individual completion.

Resend messages

The function notmuch-show-resend-message (bound to b in show and tree modes) will (attempt to) send current message to new recipients. The headers of the message won't be altered (e.g. To: may point to yourself). New Resent-To:, Resent-From: and so on will be added instead.

Face customization is easier

New faces notmuch-tag-unread, notmuch-tag-flagged, notmuch-tag-deleted, notmuch-tag-added, notmuch-search-flagged-face and notmuch-search-unread-face are now used by default. Customize notmuch-faces to modify them.

Omit User-Agent header by default when sending mail

Ruby Bindings

Add support for notmuch_database_get_all_tags

Go Bindings

Go bindings moved to contrib

Add support for notmuch_threads_t and notmuch_thread_t

Fixed constant values so they are not all zero anymore

Previously, it was impossible to open writable database handles, because DATABASE_MODE_READ_ONLY and DATABASE_MODE_READ_WRITE were both set to zero. The same issue occurred with sort modes.

Posted Mon Oct 3 00:00:00 2016

Notmuch 0.22.2 (2016-09-08)

Test Suite

Silence gdb more

Have gdb write to a log file instead of stdout, hiding some more (harmless) stderr chatter which causes test failures.

Hardcode fingerprint in PGP/MIME tests

Make the tests more robust against changing GnuPG output formats.

Posted Thu Sep 8 00:00:00 2016