-
v2.3.1 Stable
released this
2026-09-05 15:20:13 +00:00 | 14 commits to main since this releaseChanges
- Fix: switching light/dark theme on the IP/email check view (
/webui?view=check)
no longer bounces to the pending list or clears the form — the theme now applies
client-side (input preserved), and the fallback links keep?view=check.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Fix: switching light/dark theme on the IP/email check view (
-
v2.3.0 Stable
released this
2026-09-05 14:44:21 +00:00 | 15 commits to main since this releaseChanges
- New web UI view — IP and email check (
/webui?view=check), selectable from
a split header bar beside the pending list. A small form runs an IP lookup
and/or the configured email checks (UserCheck / Reacher) on any address on
demand, reusing the existing providers. - Input is validated server-side on submit: an IP must parse as IPv4/IPv6 and
an email must match a strict character allow-list (only address-necessary
characters are accepted).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- New web UI view — IP and email check (
-
v2.2.0 Stable
released this
2026-09-04 18:51:59 +00:00 | 17 commits to main since this releaseChanges
- New opt-in feature — reject + block signup email domain
(email_domain_block.enabled, default off). Triggers: Matrix reply
reject+block/reject blockor ⛔, plus a third web-UI button "⛔ Reject +
block domain". The reject always runs first; the Mastodon admin email-domain
block is best-effort and never loses the reject (failures are reported in the
notice). Requires token scopeadmin:write:email_domain_blocks(or broad
admin:write) — a non-fatal startup check warns when it's missing.
Per-instance override:domain_block_enabled. See README §7.2. - Webhook replay cache now persists to disk (
webhook_cache.json, override
withWEBHOOK_CACHE_FILE) so the dedup window survives restarts; a startup
log line states which case you're in. - Pending-queue cap policy
on_pending_cap:evict(default — drop the oldest
pending review, ERROR log) orreject(answer 429 to new webhooks). - On SIGTERM the bot logs a WARNING naming any in-flight reviews it abandons.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- New opt-in feature — reject + block signup email domain
-
v2.0.0 Stable
released this
2026-09-03 13:10:46 +00:00 | 19 commits to main since this releaseChanges
- New web UI review surface at
GET /webui(same port as the webhook)
listing pending signups with Accept/Reject; plain HTML + embedded CSS, no JS,
no auth. integrationsblock selects active surfaces (matrixdefault true,
webuidefault false); both disabled → startup error (exit 1).- Shared pending queue + action path across surfaces; state keyed by account ID
with a Matrix event-ID secondary index. - Enrichment stored on the pending review so the web UI matches the Matrix card.
- Manual-action detection works with either/both surfaces.
- Security: the web UI is unauthenticated by design — restrict
/webuiat
the reverse proxy (see README §14).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- New web UI review surface at
-
v2.1.0 Stable
released this
2026-09-03 12:53:05 +00:00 | 19 commits to main since this release⚠ Breaking changes since v1.5.0 — read before upgrading
- Bind default changed to
127.0.0.1(was0.0.0.0). The webhook server
no longer listens on all interfaces; expose it via a reverse proxy (set
webhook_hostexplicitly to change). webhook_secretis now mandatory. A missing/empty secret is a hard
401; the old "skip verification" path is gone./healthno longer leaks state — it returns only{"status": "ok"}and
is IP-restricted (default: private ranges only).- At least one integration must be enabled — with both
integrations.matrixandintegrations.webuioff, the bot exits at startup. - Emails are logged as a fingerprint by default (set
LOG_PII=1for full). - Security headers are now sent on every response.
- New optional config options:
integrations.webui_refresh,health,
matrix.allowed_users,trust_proxy,webui_secure_cookie, and the DoS
limits:# DoS limits (all optional): max_concurrent_reviews: 50 # in-flight review pollers (semaphore) review_queue_wait: 10 # seconds to wait for a slot before 429 max_pending_reviews: 500 # cap on the in-memory pending queue
Changes
- Web UI: theme picker (light/dark/system), background auto-refresh
(integrations.webui_refresh, default 15,0disables), a11y hardening;
fixed theNameErroronGET /webui. - CSRF token is now sticky per browser (no longer rotated by the
auto-refresh poll), so Accept/Reject no longer 403 after ~15 s. account_idvalidated (isdigit) at both the webhook and web-UI
boundaries before any Admin API call (400 / skip otherwise).- Optional
matrix.allowed_usersmoderator MXID allowlist (empty =
legacy behaviour). - IP enrichment over HTTPS; webhook-supplied
ipvalidated with
ipaddressbefore any egress. - Webhook replay protection (sha256 body cache, 600 s TTL → 409);
signature verified before ping detection;webhook_secretmandatory. - Binds
127.0.0.1by default; security-headers middleware on every
response (nosniff, no-referrer,X-Frame-Options: DENY, CSP
frame-ancestors 'none', HSTS over HTTPS). /healthreturns only{"status": "ok"}and is IP-allowlisted
(default private ranges;healthacceptstrue/false/CIDR list).- Matrix card escapes quotes (
_html.escape(…, quote=True)). - Clickjacking headers verified on
/webui. - Theme cookie
Secure(webui_secure_cookie); emails logged as a
fingerprint (LOG_PII=1for full); audit IP honoursX-Forwarded-Foronly
whentrust_proxy: true. requirements.txtpinned to exact versions.- New
bot.yamloptions: the DoS limits (max_concurrent_reviews,
review_queue_wait,max_pending_reviews), plusintegrations.webui_refresh,
health,matrix.allowed_users,trust_proxy,webui_secure_cookie.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bind default changed to
-
v1.5.0 Stable
released this
2026-07-11 13:23:12 +00:00 | 22 commits to main since this releaseChanges
- Reacher as a second email-check provider (
provider: reacher); both can run
together; combined "🔍 Email check" line; Reacher thread detail; "disabled in
config" notice when none enabled.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Reacher as a second email-check provider (
-
v1.4.1 Stable
released this
2026-07-10 11:30:25 +00:00 | 24 commits to main since this releaseChanges
email_checkrefactored to a provider list (multiple providers); startup +
UserCheck INFO logging; redesigned card (user+locale one line, email-check
one-liner, no URLs in body); IP link moved to a thread message.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.4.0 Stable
released this
2026-07-10 06:28:29 +00:00 | 25 commits to main since this releaseChanges
- Optional email validation via UserCheck; runs concurrently with IP lookup;
free + paid tiers; graceful degradation when unavailable/rate-limited.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Optional email validation via UserCheck; runs concurrently with IP lookup;
-
v1.3.0 Stable
released this
2026-07-09 06:04:13 +00:00 | 27 commits to main since this releaseChanges
- Configurable
email_confirmation.on_timeout:notify(default) /reject/
silent, overridable per instance.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Configurable
-
v1.2.0 Stable
released this
2026-07-08 11:40:46 +00:00 | 28 commits to main since this releaseChanges
- Detect manual approvals/rejections done directly in Mastodon (pre-card and
post-card watcher polling everymanual_action_poll_intervals); track the
bot’s own actions to avoid self-misidentification.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Detect manual approvals/rejections done directly in Mastodon (pre-card and