v0.16.21
googleworkspace/cliv0.16.21Sep 6, 2026by github-actions[bot]
Upgrading?
AI Summary
Fixes for JMAP, IMAP, Sieve, and LDAP modules including authentication and property handling.
Key Highlights
- Sieve DKIM signing
- JMAP property returns
- IMAP pipelined command fixes
- LDAP authentication hardening
New Features
- Sieve DKIM signing
- JMAP fixes
- IMAP fixes
- LDAP hardening
Full Release Notes
## [0.16.21] - 2026-09-06 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](https://github.com/stalwartlabs/stalwart/blob/main/UPGRADING/v0_16.md) for more information on how to upgrade from previous versions. ## Added ## Changed - Sieve: Messages generated by user scripts are DKIM signed through the new `SieveUserInterpreter.dkimSignDomain` setting, which defaults to the account's own domain. ## Fixed - JMAP: - `CalendarEvent/set` requests that ask for scheduling messages are rejected with a `forbidden` error when the account cannot send them. - `Calendar/get` and `AddressBook/get` return every property when the `properties` argument is omitted or `null`. - EventSource `ping` events advertise the interval in seconds rather than milliseconds. - Calendar synthetic ids returned when expanding recurrences identify an occurrence by its recurrence id. - IMAP: Every command in a pipelined `STATUS` or `FETCH` batch receives its tagged completion, instead of the first failing command dropping the responses for all commands queued behind it. - WebDAV: Accounts without a storage quota no longer advertise a 4 GiB limit in `DAV:quota-available-bytes`. - MTA: Inbound DMARC and TLS aggregate reports that a reporter sends more than once are imported again as a duplicate entry. - Spam filter: Domain and URL blocklists are queried only for text written as a link. - iTIP: Detaching an occurrence that the recurrence rule already generates is sent as a `METHOD:REQUEST` carrying the `RECURRENCE-ID` instead of a `METHOD:ADD`. - Sieve: `fileinto :specialuse` and `specialuse_exists` accept special-use attributes in the `\Trash` form. - LDAP: Active Directory servers that answer an unauthenticated bind (a non-empty DN with a zero-length password) with success no longer authenticate accounts without a password. - Network: Listeners bound to the unspecified IPv6 address (`[::]`) fall back to IPv4 when socket creation fails with `EPROTONOSUPPORT`. - OpenTelemetry: log exporter does not include the parent span's attributes. <hr /> ### Check binary attestation [here](https://github.com/stalwartlabs/stalwart/attestations/45587073)
Related Repositories
farion1231/cc-switch★ 147,230
A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io
rustdesk/rustdesk★ 126,546
An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.
tauri-apps/tauri★ 112,095
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
ruvnet/RuView★ 99,054
π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.
oven-sh/bun★ 96,338
Incredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one