Changelog
All notable changes to SendDock are documented here. The format is based on Keep a Changelog and the project follows Semantic Versioning.
For the canonical source, see CHANGELOG.md in the repo. Each release also has matching notes on GitHub Releases and the ghcr.io/arkhe-systems/senddock image carries the same tag.
How versions work
| Bump | When | Example |
|---|---|---|
0.x.0 (minor) | New features | Webhooks, Bounce ingestion |
0.x.y (patch) | Bug fixes, doc updates | License gate hotfix |
1.0.0 (major) | First stable | When the API surface is frozen |
Pre-1.0 minor releases may contain breaking changes — check the version's notes before upgrading. Database migrations are forward-only and applied automatically by goose on container startup; rollback steps are documented in Updating.
[Unreleased]
Nothing here yet. Track upcoming work on the open issues.
[0.6.0] — 2026-04-30
Added
- Workspaces. Multi-user collaboration with workspace-scoped projects. Existing single-user installs were backfilled — every user got a
My Workspacewith their projects under it. See Workspaces guide. - Roles & capabilities. Four roles (
owner,admin,developer,viewer) with a fixed capability matrix. Developers can call/send(transactional) but cannot broadcast or edit templates; viewers are read-only; admins do everything except member management. - Team plan tier. Multi-member workspaces, role management and the admin "Create user" flow belong to a new Team plan above Pro. Without a Team license the endpoints return
402and the Members page shows a paywall; single-user organization stays free. - In-app Subscribe links to Lemon Squeezy. Pro and Team paywalls jump straight to checkout for the right tier; Pro pre-applies the launch promo while it is active.
- Pro vs Team gating in the validator.
Status.Tieris exposed andAllowsFeature(feature)consults a feature → tier matrix, so a Pro license can no longer unlock Team-only endpoints. - Email validation on import (#43). CSV/JSON imports now check syntax, MX records and a built-in disposable-domain list. Rejected rows surface in the import results modal with a per-row reason.
- File picker and drag-and-drop for CSV imports.
- Per-project suppression list (#42). New
suppressionstable;/send,/send/batchand/broadcastskip suppressed recipients and account for them in the result counts. Existing unsubscribed subscribers are backfilled. Manage entries from the Suppressions tab inside a project. - Per-project audit log (#47, Pro). Records 12 sensitive actions (project create/delete, SMTP/IMAP/bounce updates, API key create/revoke, webhook create/delete, suppression add/remove, login). Exposed at
GET /audit-logand surfaced in the Audit Log tab. Pro-gated. - Bounce ingestion (#38).
- Part A — in-session 5xx detection. RCPT TO failures with 5xx are classified, marked
bouncedin the email log, added to the suppression list and dispatched asemail.bouncedwebhooks. - Part B — public webhook endpoint.
POST /webhooks/bounces/{projectId}?token=<bounce-token>accepts generic JSON or Mailgun event payloads. Each project gets a rotatable token; the URL is shown in the Settings tab. - Part C — IMAP poller. Configure a bounce mailbox per project; a 5-minute poller logs in over TLS, scans
INBOXfor unread DSNs, extracts recipients (RFC 3464Final-Recipientfirst, then 5xx-line fallback), adds them to the suppression list and marks the messages\Seen.
- Part A — in-session 5xx detection. RCPT TO failures with 5xx are classified, marked
- Standardized UI primitives.
AppCheckboxandAppConfirmModalreplace inconsistent checkbox styles and nativeconfirm()calls.
Changed
- Suppressed sends are now a distinct outcome end-to-end —
bouncedandsuppressedare tracked separately fromsentandfailedin stats and the broadcast result. - Import results modal widened so the outcome cards and rejected-rows table fit without overflowing.
Fixed
AppCheckboxis now clickable outside<label>wrappers (the off-screenpeer sr-onlyinput did not catch clicks inside table cells).
[0.5.2] — 2026-04-30
Security
- Critical: license bypass closed. Versions 0.5.0 and 0.5.1 auto-unlocked every Pro feature on any self-hosted deployment with an empty
SENDDOCK_LICENSE_KEY. The validator now returnsLockedFreefor an empty key in every deployment mode. Core stays fully usable; Pro endpoints return402 Payment Requireduntil a valid key is set.
Changed
- Documentation swept (README, configuration, installation, environment, analytics, webhooks, API webhooks) to remove the obsolete "self-hosted unlocks Pro locally" wording.
- Releases v0.5.0 and v0.5.1 marked as deprecated on GitHub.
[0.5.1] — 2026-04-29
Deprecated — contains the v0.5.0 license bypass. Upgrade to 0.5.2.
Fixed
- Hide the update modal in cloud deployments.
/versionreturnsenabled: falsewhenDEPLOYMENT_MODE=cloud. - Render release notes as Markdown instead of raw text inside a
<pre>block. - Default upgrade command points to
docker compose pull && docker compose up -d. - Pricing links resolve again — three references to
senddock.com/pricingswitched tosenddock.dev/pricing.
Added
- The current-version label is always clickable, opening the same modal with the upgrade section hidden.
[0.5.0] — 2026-04-29
Deprecated — contains a license bypass. Upgrade to 0.5.2.
Added
- Webhooks (Core + Pro). HMAC-SHA256 signed dispatcher with six event types, exponential backoff retries (30s → 2m → 10m → 30m → 2h, 5 attempts), full management UI in Pro.
- Click tracking (Core). Every
<a href>in outgoing emails routes through/c/{logId}/{payload}with HMAC-protected tokens. - Pro Analytics dashboard. Funnel, opens-over-time, top templates, top clicked links, auto-generated insights, date presets, trend pills.
- One-click unsubscribe (RFC 8058).
- Pro license validator against Lemon Squeezy.
- Container registry split. Public tagged releases stay on
ghcr.io/arkhe-systems/senddock;:devbuilds moved to a private package. - Per-project rate limits on
/send,/send/batchand/broadcast. - SMTP test endpoint with bounded 5s connect / 10s session timeouts.
AppButtonsize="sm"andvariant="ghost".- Docs overhaul with hand-crafted SVG diagrams that follow the VitePress theme toggle via
currentColor.
[0.4.0] — 2026-04-15
Foundation for the open-core release. Highlights:
- BYO SMTP per project with encrypted password storage.
- Subscribers, templates, sends, broadcasts, campaigns.
- API keys with hashed secrets and per-key rate limits.
- Open-tracking pixel and unsubscribe links.
- Initial dashboard, project switcher, settings UI.