Hi all,
I just open-sourced a tool that lets end-users manage their server-side
Sieve filters in mailcow directly from Thunderbird/Betterbird, without
leaving the mail client.
The problem I had. mailcow exposes Sieve through the admin UI’s raw
textarea (not friendly for non-technical users) or through SOGo/Roundcube
(separate browser tab). Existing Thunderbird add-ons like Quick Filters
manage local TB filters, not server-side Sieve. There was a gap.
What it is. Two GPL-3.0 components:
Thunderbird WebExtension (Manifest V3, TB 128+) — UI inspired by
Quick Filters: rule manager, wizard-from-selected-message, run-on-folder,
multi-account, multi-select, import of existing local TB filters,
English + Russian locales.
expor-sieve-proxy — a small FastAPI middleware that sits next to
mailcow. Each user authenticates with their own mailcow password
(Dovecot SASL bind). The admin API key never leaves the server.
Failed auth federates into mailcow’s Fail2Ban via Redis publish.
Architecture note for the curious. All of a user’s rules collapse
into one combined Sieve script in one sieve_filters row — this works
around mailcow’s “only one active filter per type” cascade behavior, so
per-rule on/off actually works.
Install (3 commands on the mailcow host):
git clone fanstarwars/sieve-filters
cd sieve-filters/expor-sieve-proxy
sudo MAILCOW_API_KEY="" ./install.sh
Plugin .xpi is in Releases.
Detailed deploy notes in expor-sieve-proxy/DEPLOYMENT.md.
Repo: fanstarwars/sieve-filters
License: GPL-3.0-or-later
Tested on: mailcow 2026-03b, Thunderbird 140 ESR, Linux
Test count: 310 unit tests across plugin + middleware
Status. This is fresh — production-tested on one deployment so far.
Bug reports and PRs are very welcome.
If anyone wants help wiring it up to their stack, drop me a DM here or
open an issue on GitHub. Curious to hear what you think.
— Ivan

