[0.16.23] - 2026-09-21
If you are upgrading from v0.16.x, replace the binary (or run docker pull). If you are upgrading from v0.15.x and below, please read the upgrading documentation for more information on how to upgrade from previous versions.
Added
- Expressions:
bit_andfunction.
Changed
Fixed
- MTA:
- A mailing list whose recipients include another mailing list is accepted at
RCPT TOand then rejected at local delivery with550 5.5.0 Mailbox not found. - DMARC aggregate reports carry two
spfelements per record and theversionelement of a DMARC aggregate report is written as1instead of1.0. - DSNs generated for an alias rewrite or a list expansion emit a doubled
addr-typeinOriginal-Recipient(rfc822;rfc822;user@example.org). - DSNs that cannot be written to the store are discarded, the recipients are flagged as notified and the original message is removed from the queue, losing both the bounce and the message.
- A mailing list whose recipients include another mailing list is accepted at
- POP3:
TOP msg ncounts thenlines from the first byte of the message instead of from the first byte of the body.- A message whose very first line begins with
.is not byte-stuffed.
- Spam filter: Moving or copying a message from one account into another creates no training sample, so the classifier never learns from it.
- Sieve:
envelope "orcpt"yields the bare address for anORCPTsupplied over SMTP. It now carries theaddr-typeprefix in every case, as required by RFC 6009. - ACME: The
_acme-challengeTXT records published for a DNS-01 authorization are never removed. - DNS: The DNSSEC resolver queries a single nameserver at a time, working around a
hickory-resolverrace that cancels the TCP retry when two nameservers return a truncated response in parallel. - Troubleshoot tool:
- MX records are resolved through the DNSSEC-validating resolver, matching the resolver used by the delivery path.
- A TLSA lookup that fails or returns bogus records stops the delivery attempt for that host, instead of continuing without DANE.
- OIDC: Bearer tokens that carry no
email,preferred_usernameorupnclaim are always authenticated against the default directory. - Meilisearch: A confirmation timeout is treated as a failed write even when
failOnTimeoutis disabled, so an index whose batches take longer thanpollIntervalxmaxRetriesnever completes an indexing task and resubmits the same batch indefinitely. - WebUI: A failed update no longer takes an
Applicationoffline. - FoundationDB: The cached read version is invalidated when any broadcast is received from another node.
- Redis:
- On a cluster, the rate limiter and the blob upload quota issue
INCRandEXPIREas aMULTI/EXECtransaction, whoseMOVEDredirects collapse into a singleEXECABORTthat never refreshes the slot map. - A connection that fails because it is addressing the wrong server is returned to the pool and reused, since the recycle check only issues
PING.
- On a cluster, the rate limiter and the blob upload quota issue