v0.1.1 — Advanced Spam Filtering (Pro)
Released: 2026-05 · Channel: stable · Series: 0.1.x
v0.1.1 introduces Advanced Spam Filtering — the first new Pro capability since v0.1.0 GA. Every install (Free or Pro) gets the underlying schema and routing; Pro licenses unlock the API surface, the admin UI controls, and the rspamd-side enforcement.
Highlights
Section titled “Highlights”- Per-domain reject threshold. Override the global Rspamd reject score for an individual domain — tighten one tenant without changing the rest. Editable inline on the Domains page.
- Per-domain greylisting toggle. Disable greylisting on a domain where the first-message delay is unacceptable, leave it enabled everywhere else.
- Per-domain allow / block lists. Two scopes (sender email,
sender domain) × two kinds (allow, block) per recipient domain, edited
on a new Spam Lists page (
/admin/domains/<id>/spam-lists). Block-list hits reject before delivery; allow-list hits short-circuit scoring. Edits take effect within seconds — no restart, no config file editing.
How it ships
Section titled “How it ships”- New schema in migration
000016_per_domain_spam_config. Addsdomains.reject_threshold,domains.greylist_enabled, and thedomain_spam_liststable withON DELETE CASCADEfromdomains. - API surface gated by the
advanced_spamfeature flag from ValidonX. Free-tier callers get403 FEATURE_NOT_AVAILABLEwhen they touch a gated field; the existing ungatedspam_thresholdPATCH continues to work on Free. - Rspamd integration uses a small Lua extension at
/etc/rspamd/rspamd.local.luaplus four flat map files (one per kind × scope combination) keyed by recipient domain. Enforcement is a prefilter — block hits short-circuit withset_pre_result('reject'), allow hits short-circuit withset_pre_result('accept'). No selector acrobatics, no per-domain rule generation. - Per-domain reject thresholds and greylist toggles flow through
local.d/settings.confas standard Rspamd settings rules keyed on the recipient envelope.
Upgrade
Section titled “Upgrade”Standard orchestrator flow: Updates → Plan → Apply from the admin UI. Migration 16 applies automatically when the API container starts on the new image; the rspamd config regenerator backfills empty map files on first apply so the bind mounts are always valid.
Free installs get the new schema and routes (which 403) but no
behavioural change. To use the feature, activate a Pro license on the
License page — the advanced_spam flag flips on and the new
controls appear immediately, no restart required.
Operational notes
Section titled “Operational notes”- The four map files always exist on disk, even with zero entries configured. This keeps the docker-compose bind mounts valid on every install. An empty file = the prefilter is a no-op for that scope.
- Spam-list edits trigger a partial regenerate +
rspamd reload— the reload window is sub-second; existing in-flight scans are not cancelled. - Domain delete cascade-removes spam list rows via FK. The rspamd config is regenerated immediately after the delete so the maps stop referencing the gone domain.
- Existing per-domain
spam_threshold(Starter) is unchanged and ungated — set it on Free or Pro alike.
Downgrade behaviour
Section titled “Downgrade behaviour”Per the v0.1.0 policy, existing data is never lost on Pro→Free
downgrade. A customer who configured per-domain reject thresholds,
greylist toggles, and allow/block lists under Pro keeps every row in
the database after cancelling. The API gates editing those fields
behind the Pro flag (Free PATCHes that touch them get
403 FEATURE_NOT_AVAILABLE), but the existing rspamd maps and
settings stay on disk and continue to be enforced. Re-activating Pro
returns full editing capability without re-entering data.
New self-hosting guides, in your inbox
Occasional email when we publish a new guide or ship a release. No spam, unsubscribe anytime.
