Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork323
Releases: neomutt/neomutt
NeoMutt 2025-09-05
f4f9e07
Compare
📖 Notes
This is a small release: one new config option and some bug fixes.
💎 Sponsors
Special thanks to oursponsors:
Jakub Jindra @jindraj | Scott Kostyshak @scottkosty | Igor Serebryany @igor47 | Mark Korondi @kmARC | Blunix GmbH Linux support company from Berlin, Germany | |
Bastian Bittorf @bittorf | Nicolas Évrard @nicoe | Mateus Etto @Yutsuten | Robert Ricci @ricci | Farzad Sadeghi @terminaldweller |
- Robert Labudda
- Patrick Koetter (@patrickbenkoetter@troet.cafe)
- Reiko Kaps
- Morgan Kelly
- Izaac Mammadov (@IzaacMammadov)
- 罗昭铭
❤️ Thanks
Many thanks to ournew contributor:
- Gopi Krishna Menon (@gopi487krishna)
and ourregular contributors:
- Pietro Cerutti (@gahr)
- Dennis Schön (@roccoblues)
- Ryan d'Huart (@HomoElectromagneticus)
- Marius Gedminas (@mgedmin)
- Thomas Klausner (@0-wiz-0)
- Róbert Horváth (@r001)
- Rayford Shireman (@rayfordshire)
- Gerrit Rüsing (@kbcb)
- Emir Sari (@bitigchi)
- Alejandro Colomar (@alejandro-colomar)
🔒 Security
- #4623 ncrypt/crypt.c: Protect Message-ID
🎁 Features
- #4644 Provide an option to confirm on an empty To
✨ Contrib
- #4645 Add ayu-dark-256 colorscheme
🐞 Bug Fixes
- #4635 Handle a non-existing message_cache_dir
- #4642 Decouple
$crypt_encryption_info
and$crypt_protected_headers_weed
from$devel_security
- #4650 Return success after querying for config
🔧 Changed Config
- Add:
confirm_empty_to = no
Confirm when sending an e-mail with an empty To:
🏴 Translations
- 100% 🇩🇪 German
- 100% 🇹🇷 Turkish
- 99% 🇭🇺 Hungarian
- 98% 🇱🇹 Lithuanian
- 89% 🇫🇷 French
🏗️ Build
- #4636 Update FreeBSD CI and workaround
pkg
bug - actions: use checkout v5
⚙️ Code
- #4023 tweak observer event types
- #4628 Use the standard countof instead of our mutt_array_size()
- #4637 Update types in test dummy code
- #4638 remove useless const qualifier from log_queue_get()
- #4655 Make sure ctype(3) function arguments are valid
- #4657 Fix warning about unused function and data
- #4659 Include term.h and [n]curses.h consistently
Assets5
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2025-05-10
0eba4ef
Compare
📖 Notes
This is a small Bug-Fix Release.
The only big change is the newcomplete Esperanto Translation.
Thanks Keith!
❤️ Thanks
Many thanks to ournew contributors:
- Keith Bowes (@keithbowes)
- Juris Lambda (@jxlambda)
- Luz Paz (@luzpaz)
and ourregular contributors:
✨ Contrib
- #4616 Fix gpg-json output
🐞 Bug Fixes
- #4600 main: don't stop if /var/spool/mail is missing
- #4602 color: fix quoted maths
- #4604 Don't consider "weed" when writing an email to file
- #4605 help: fix leaks
- #4612 imap: check for incomplete Mailboxes on sync
- #4622 fix label completion crash
🏴 Translations
- #4622 update Esperanto translation
- Update lt_LT translations
📚 Docs
- docs: fix broken functions
🏗️ Build
Assets5
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2025-04-04
f695281
Compare
📖 Notes
This is (mostly) a Bug-Fix Release.
Most of other changes are improving the startup/help, e.g.
neomutt -h # Clearer help
neomutt -h send # Specific help with examples
neomutt -DD # Dump different (changed) config
❤️ Thanks
Many thanks to ournew contributors:
and ourregular contributors:
- Chao-Kuei Hung (@ckhung)
- Pietro Cerutti (@gahr)
- Rayford Shireman (@rayfordshire)
- Gerrit Rüsing (@kbcb)
- Ian Zimmerman (@nobrowser)
- Ryan d'Huart (@HomoElectromagneticus)
- Dennis Schön (@roccoblues)
- Emir Sari (@bitigchi)
- Mateus Etto (@Yutsuten)
- Marius Gedminas (@mgedmin)
🎁 Features
- #4493 config: don't quote enums
- #4493 link config dump to docs
- #4494 refactor the Help Page for clarity
- #4554 CLI:
neomutt -DD
-- Dump Different - #4593 browser: tag select rather than descend
🐞 Bug Fixes
- #3469 source: fix variable interpretation
- #4370
mutt_oauth2
: refactorsasl_string
computation - #4536 expand tabs to spaces in compose preview
- #4537 fix dumping of initial values
- #4538 move
real_name
init - #4542 Remove
MUTT_NEWFOLDER
, fix appending to mbox - #4546 Respect Ignore when modifying an email's headers
- #4549 fix refresh on toggle
hide_thread_subject
- #4550 buffer: fix seek
- #4551 add comma to single
<complete-query>
match - #4595 notmuch: check for parse failure
- #4596 query: allow
<>
s around email addresses - pager: fix normal/stripe colour
- fix colour leaks in pager
- fix array leak in the verify certificate dialog
🏴 Translations
- 100% 🇩🇪 German
- 100% 🇹🇷 Turkish
- 96% 🇱🇹 Lithuanian
- 86% 🇫🇷 French
- 49% 🇹🇼 Chinese (Traditional)
🏗️ Build
- #4552 Deprecate some configure options that aren't used anymore
- build: workaround for unused-result warning
⚙️ Code
- #4492 colour refactoring
- #4543 debug: Chain old SEGV Handler
- #4545 Allow nested
ARRAY_FOREACH()
- #4553 config: API
has_been_set()
- #4557 config: drop ConfigSet from API functions
- #4558 drop obsolete pgp/smime menus
- #4559 array:
foreach_reverse()
- #4560 Change description of verify-key to be crypto-scheme agnostic
- #4561 expando: move EnvList out of library
- #4570 Simplify the management of NeoMutt Commands
- #4571 libcli - parse the command line
- #4580 Split CLI Usage into sections
- #4582 pager: fix lost
NT_PAGER
notifications - #4591 pager: fix refresh on config/colour changes
- array: upgrade
get_elem_list()
- Buffer refactoring
- coverity: fix defects
- improve
localise_config()
- main: drop -B (batch mode) option
- merge init.[ch] into main.c
- refactor version code
- neomutt:
home_dir
,username
,env
- query: unify NeoMutt
-D
and-Q
- refactor
main.c
/init.c
- sidebar: streamline expando callbacks
- test: lots of parse coverage
- window refactoring
- window: force recalc|repaint on new windows
♻️ Upstream
- Update mutt/queue.h
- Fix NULL pointer dereference when calling
imap_logout_all()
Assets5
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2025-01-13
e35b731
Compare
📖 Notes
This is a small Bug-Fix Release.
DO NOT use the 2025-01-09 release.
I'm really sorry, but it had a problem with mbox Mailboxes.
❤️ Thanks
Many thanks to ournew contributors:
- Helge Deller (@hdeller)
and ourregular contributors:
- Ryan d'Huart (@HomoElectromagneticus)
- Pietro Cerutti (@gahr)
- Dennis Schön (@roccoblues)
- Chao-Kuei Hung (@ckhung)
- Страхиња Радић (@Strahinja)
- Gerrit Rüsing (@kbcb)
- Marius Gedminas (@mgedmin)
- Jakub Jindra (@jindraj)
🐞 Bug Fixes
- #4477 fix crash in folder-hook
- #4480 fix memory leak in compose message preview (fixes#4478)
- #4483 query: fix comma-separated names
- #4485 lua: fix
lua_mutt_call()
- #4490 notmuch: refresh the Email if the filename changes
- fix: no new mail message
- fix display of certificate fingerprints
- fix prompt colour
🏴 Translations
- 100% 🇨🇿 Czech
- 100% 🇩🇪 German
- 100% 🇱🇹 Lithuanian
- 100% 🇷🇸 Serbian
- 100% 🇸🇰 Slovakian
- 100% 🇹🇷 Turkish
- 91% 🇫🇷 French
- 41% 🇹🇼 Chinese (Traditional)
🏗️ Build
- #4479 Fix DT_NUMBER entries on 32-bit endian platforms
⚙️ Code
- #4481 Simplify
mutt_file_fopen()
- colour refactoring
- standardise variable names for temporary files
Assets5
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2025-01-09
b0b15eb
Compare
BROKEN - DO NOT USE
Use Release 2025-01-13 or later
Assets2
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2024-12-12
8c5d8a8
Compare
📖 Notes
Compose Message Preview
A new feature this release: Compose Message Preview -- See the email you're about to send.
Thanks Dennis! (@roccoblues)
To enable it:set compose_show_preview = yes
More info:https://neomutt.org/feature/compose-message-preview
Config Changes
Along with a lot of code refactoring there have been some config changes.
They unify the Alias and Query Dialogs -- same behaviour, same format strings.
The changes are backwards compatible.
❤️ Thanks
Many thanks to ournew contributors:
- Chao-Kuei Hung (@ckhung)
- Dmitry Polunin (@frei-0xff)
and ourregular contributors:
- Marius Gedminas (@mgedmin)
- Ryan d'Huart (@HomoElectromagneticus)
- Страхиња Радић (@Strahinja)
- Claes Nästén (@pekdon)
- Alejandro Colomar (@alejandro-colomar)
- Dennis Schön (@roccoblues)
- Scott Kostyshak (@scottkosty)
- Pietro Cerutti (@gahr)
- EC Herenz (@Knusper)
- Carlos Henrique Lima Melara (@charles2910)
- Emir Sari (@bitigchi)
- Gerrit Rüsing (@kbcb)
🎁 Features
🐞 Bug Fixes
- #4444 expando: fix overflow
- #4461 Spaces can be wide
- #4464 Remove BOM from UTF-8 text
- #4467 Bug with wrong fingerprints in certificate_file
- #4470 fix postponed sorting assertion failure
- #4472 fix:
save_attachment_open()
when overwriting - #4473 add text-wrapping to compose message preview pager
- #4475 edit_headers: cleanup temporary file on error
- expando: fix crash on empty %[] date
- expando: fix container formatting
- browser: fix 'tag-' display
- query: fix memory leak
- fix more arrow_cursor + search
🔧 Changed Config
- Config Renames:
$pgp_sort_keys
->$pgp_key_sort
$sidebar_sort_method
->$sidebar_sort
$sort_alias
->$alias_sort
$sort_browser
->$browser_sort
- Changed Defaults:
set alias_format = "%3i %f%t %-15a %-56A | %C%> %Y"
set query_format = "%3i %t %-25N %-25E | %C%> %Y"
🏴 Translations
- 100% 🇩🇪 German
- 100% 🇱🇹 Lithuanian
- 100% 🇷🇸 Serbian
- 100% 🇹🇷 Turkish
- 89% 🇫🇷 French
- 39% 🇹🇼 Chinese (Traditional)
🛡️ Coverity Defects
- Explicit null dereferenced
- Overflowed constant
- Overflowed return value
- Resource leak
📚 Docs
- alias tags
🏗️ Build
- #4452 only use struct tm.tm_gmtoff if available
⚙️ Code
- #4294 refactor memory allocation
- #4442 remove unused fields from ComposeSharedData
- #4447 refactor 'sort' constants
- #4449 add mutt_window_swap()
- unify Menu data
- move config to libraries
- unify Alias/Query
- expando factor out callbacks
- refactor simple_dialog_new()
- test: add TEST_CHECK_NUM_EQ()
- fopen: tidy read-only
♻️ Upstream
- #4448 Update queue.h
Assets5
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2024-11-14
d7884c0
Compare
📖 Notes
This release is mostly bug-fixes.
- Expando handling (
%x
things) should now be robust, including escaping chars like<
- CLI Crypto is no-longer devel
❤️ Thanks
Many thanks to ournew contributors:
- Colin Wee (@googlebleh)
- 李经纬 (@ljw20180420)
- Viacheslav Chimishuk (@vchimishuk)
and ourregular contributors:
- Alejandro Colomar (@alejandro-colomar)
- Jakub Jindra (@jindraj)
- Carlos Henrique Lima Melara (@charles2910)
- Pietro Cerutti (@gahr)
- Emir Sari (@bitigchi)
- Ryan d'Huart (@HomoElectromagneticus)
- Gerrit Rüsing (@kbcb)
- vuori (@vuori)
- James Cook (@falsifian)
🔒 Security
- Fixed:CVE-2024-49393
- Fixed:CVE-2024-49394
- #4300 Read the protected Message-ID
🎁 Features
- #4336 Allow toggling numeric configs, e.g.
:toggle pager_index_lines
- #4427 alias: tag/untag pattern
- query: tag with
<space>
✨ Contrib
- #4400
mutt_oauth2.py
: Fix reference toclient_secret
🐞 Bug Fixes
- #4399 fix duplicate save-hook
- #4403 expando: fix escaping
- #4404 browser: fix enter-quit-enter
- #4405 pager: fix repaint
- #4407 config: warn about deprecated variables
- #4425 Refresh alias/query dialog on alias/query format change
- #4433 compose: fix redraw on attachment
- #4436 compose: fix search with
arrow_cursor
- #4438 autocrypt: fix
copy_normalize_addr()
- alias: fix cli crash
- expando: fix relative dates
- expando: padding default to space
🏴 Translations
- 100% 🇩🇪 German
- 100% 🇹🇷 Turkish
- 99% 🇨🇿 Czech
- 99% 🇸🇰 Slovak
- 82% 🇫🇷 French
📚 Docs
- drop refs to always-enabled features
- fix typo in unmacro
- fix broken link
- ncrypt: fix typo in
config.c
🏗️ Build
- #4409 Use FreeBSD 14.1 in Cirrus CI
⚙️ Code
Assets5
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2024-10-02
5250aee
Compare
📖 Notes
This is mostly a bug-fix release, but there are two bigger changes to note.
First, it features the start of some work to improve message security.
(if you're knowledgeable and brave, see$devel_security
below)
Second, it removes support for Mixmaster -- an anonymous remailer.
That was quite a lot of code that nobody used for many years.
❤️ Thanks
Many thanks to ournew contributors:
- Daniel Klose
- Herbert J Skuhra
- Ryan d'Huart (@HomoElectromagneticus)
and ourregular contributors:
- Marius Gedminas (@mgedmin)
- Alejandro Colomar (@alejandro-colomar)
- Pietro Cerutti (@gahr)
- Страхиња Радић (@Strahinja)
- James Cook (@falsifian)
- Gerrit Rüsing (@kbcb)
- Doron Behar (@doronbehar)
- Roberto Alvarado (@Robdres)
- Dennis Schön (@roccoblues)
🔒 Security
- #4243 - security: kill unnecessary blank lines
- #4251 - more security improvements
- #4282 - improve NeoMutt bailout handling
🎁 Features
🐞 Bug Fixes
- #3945 - do not force username in addition to client certificate
- #4341 - Fix '%z' and '%Z in '%{...}' expando
- #4356 - Allow longer maildir filename suffixes
- #4357 - Don't force mbox stats calculations on startup
- #4365 - Fix sorting INBOX and its subfolders
- #4367 - Let
~Y
match each tag individually - #4371 - ignore macro events during autocrypt initialization
- #4383 - Generate the Message-ID earlier
- compose: fix
$compose_confirm_detach_first
🔧 Changed Config
set crypt_encryption_info = yes
Add an informative block with details about the encryptionset crypt_protected_headers_weed = no
Controls wether NeoMutt will weed protected header fieldsset devel_security = no
Devel feature: Security --#4251$mixmaster
is deprecated$mix_entry_format
is deprecated
🏴 Translations
- 100% 🇩🇪 German
- 100% 🇱🇹 Lithuanian
- 100% 🇷🇸 Serbian
- 100% 🇪🇸 Spanish
- 81% 🇫🇷 French
📚 Docs
- #4350 - Fix configure script name in INSTALL.md
- fix para ordering
🏗️ Build
- #4280 - Update autosetup
- #4281 - Update acutest to the latest upstream commit
- #4289 - don't treat stddef.h specially
- #4306 - Add -std to CFLAGS too
- #4307 - require C11
- #4347 - Support BerkeleyDB 18.1
- #4362 - Assume 'struct timespec' exists
- fix idn2 typo
⚙️ Code
- #4113 - Close the hcache handle on failure to open the store
- #4214 - upgrade
assert()
- #4283 - mutt/list.c: Use
STAILQ_FOREACH_SAFE()
in stailq deallocators - #4296 - Use
wmem*()
functions with wide-character strings - #4297 - ncrypt/crypt.c: Fix allocation size calculation
- #4305 - remove
mutt_expand_path()
- #4308 - fix
-Wdouble-promotion
warnings - #4310 - scanf: initialise out-vars
- #4312 - Allow opening the header cache in non-
O_CREAT
mode - #4337 - Fix function pointer types
- #4348 - Check
mutt_date_parse_date()
s return value - #4366 - Fix up slashes in
imap_fix_path()
- #4378 - Fix padding with an empty string
- tidy expando library
Assets5
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2024-04-25
2110f50
Compare
📖 Notes
This is a small Bug-Fix Release.
In particular, it fixes a few small quirks in the new Expando code.
❤️ Thanks
Many thanks to ourregular contributors:
- Pietro Cerutti (@gahr)
- Carlos Henrique Lima Melara (@charles2910)
- Enno Nagel (@Konfekt)
- Dennis Schön (@roccoblues)
🐞 Bug Fixes
- #4263 fix: cache naming
- #4261 expando: fix conditional padding
- #4261 expando: fix container
- #4261 expando: add lower-case operator
- #4261 expando: add external filter
- imap: add mailboxes more directly
🏴 Translations
- trans: tidy messages
📚 Docs
- doxy: add missing params
🏗️ Build
- #4268 Filter out CFLAGS with paths from the output of '-v'
- #4273 guard truecolor functions in tests
- #4275 use homebrew in macOS build
⚙️ Code
- use Buffer rather than strcat()
- ncrypt: use gpgme types consistently
Assets5
Uh oh!
There was an error while loading.Please reload this page.
NeoMutt 2024-04-16
08ac858
Compare
📖 Notes
This is a feature release, sort of :-)
There are lots of bug fixes too.
The biggest change is to how NeoMutt handles format strings.
Thanks János!
Format strings are now parsedwhen they are set, rather thanevery time they are used.
This means we can check for errors, e.g.
set index_format ="%Q"
Option index_format: Unknown expando: %Q
Next, 8 config strings have been Localized.
Localization (L10N) allows translators to provide language-specific defaults,
e.g.$attribution_intro
- English: "On %d, %n wrote:
- Serbian: "Дана %d, %n написа:"
- German: "Am %d, schrieb %n:"
These are thedefaults: they can still be overridden.
❤️ Thanks
Many thanks to ourregular contributors:
- Alejandro Colomar (@alejandro-colomar)
- Gerrit Rüsing (@kbcb)
- Emir Sari (@bitigchi)
- Dennis Schön (@roccoblues)
- Tóth János (@g0mb4)
- Marius Gedminas (@mgedmin)
- Страхиња Радић (@Strahinja)
- Mateus Etto (@Yutsuten)
- Pierre Colin (@Pierre-Colin)
- Jakub Jindra (@jindraj)
and oursharp-eyed testers:
- Scott Kostyshak (@scottkosty)
- Jörg Sommer (@jo-so)
- William Casarin (@jb55)
- @dorsiflexion
- Horacio Sanson (@hsanson)
🎁 Features
- #4216 Compose: Hide MixMaster chain if chain is empty
- Expando upgrade
- version: bold labels
✨ Contrib
- mutt_oauth2.py: Detect recipient for oauth automatically
- mutt_oauth2.py: imap_oauth_refresh_command does not need options
🐞 Bug Fixes
- #4210 mbox: fix sorting for
mbox_resync()
- #4241 only wrap after first address in header lines
- status: reset Buffer before reuse
- history: truncate file before writing over it
- notmuch: strip leading / from short path
- Fix smtp client
$envelope_from_address
possible dangling pointer - Fix non-printable keyname printing to use
<octal>
syntax - Filter Arabic Letter Mark due to display corruption
- Loosen
imap_open_mailbox()
SELECT response data parsing - Change
mailto_allow
to be exact match only - Fix
mutt_read_rfc822_line()
to useis_email_wsp()
- Improve pattern compiler whitespace skipping
- Fix gpgme crash when listing keys in a public key block
- Add SigInt handler for pattern functions
- Fix some mailbox prompts to use mailbox history ring
- Improve GPGME inline processing
- Reset SIGPIPE signal handler in child process before
exec()
- Filter headers passed via the command line
- Remove trailing slashes when opening maildir/mh mailboxes
- Fix
mutt_paddstr()
to properly filter unprintable chars - Minor fixes to
match_body_patterns()
- Fix
mutt_ts_capability()
fallback list loop - Ensure SIGALRM interrupts connect() in batch mode
- Tighten
$query_command
parsing to allow empty name field
🔧 Changed Config
- #4224 config: add L10N support
- New:
set compose_confirm_detach_first = yes
Prevent the accidental deletion of the composed message - Changed:
set reply_regex = "^((re)(\\[[0-9]+\\])*:[ \t]*)*"
Regex to match message reply subjects like 're: ' - Changed:
set pager = ""
External command for viewing messages, or empty to use NeoMutt's
🏴 Translations
- 100% 🇨🇿 Czech
- 100% 🇩🇪 German
- 100% 🇱🇹 Lithuanian
- 100% 🇷🇸 Serbian
- 100% 🇸🇰 Slovak
- 99% 🇹🇷 Turkish
- l10n: document functions
- config: add L10N support
📚 Docs
- Clarify the manual section on POP3 support
- Document the
<1234>
key syntax for bind - Document
$sendmail
invocation behavior - Clarify -H usage in batch mode is not a "pass through" option
🏗️ Build
- test: remove unnecessary setting of TZ var
- build: make
conn/getdomain.c
dependent on DOMAIN - Improve w3m invocation for manual.txt generation
- Include
<term.h>
before invokingtigetstr()
andtigetflag()
- Enable CodeQL for python
⚙️ Code
- factor out
buf_make()
- drop dupe
signal_init()
on startup - Convert
mutt_create_alias()
and helpers to use buffer pool - Factor out
match_body_patterns()
to makeresolve_types()
simpler - Rewrite
mutt_apply_replace()
to use buffers
Assets5
Uh oh!
There was an error while loading.Please reload this page.