Skip to content

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

BumpWhenExample
0.x.0 (minor)New featuresWebhooks, Bounce ingestion
0.x.y (patch)Bug fixes, doc updatesLicense gate hotfix
1.0.0 (major)First stableWhen 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 Workspace with 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 402 and 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.Tier is exposed and AllowsFeature(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 suppressions table; /send, /send/batch and /broadcast skip 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-log and 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 bounced in the email log, added to the suppression list and dispatched as email.bounced webhooks.
    • 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 INBOX for unread DSNs, extracts recipients (RFC 3464 Final-Recipient first, then 5xx-line fallback), adds them to the suppression list and marks the messages \Seen.
  • Standardized UI primitives. AppCheckbox and AppConfirmModal replace inconsistent checkbox styles and native confirm() calls.

Changed

  • Suppressed sends are now a distinct outcome end-to-end — bounced and suppressed are tracked separately from sent and failed in stats and the broadcast result.
  • Import results modal widened so the outcome cards and rejected-rows table fit without overflowing.

Fixed

  • AppCheckbox is now clickable outside <label> wrappers (the off-screen peer sr-only input 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 returns LockedFree for an empty key in every deployment mode. Core stays fully usable; Pro endpoints return 402 Payment Required until 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. /version returns enabled: false when DEPLOYMENT_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/pricing switched to senddock.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; :dev builds moved to a private package.
  • Per-project rate limits on /send, /send/batch and /broadcast.
  • SMTP test endpoint with bounded 5s connect / 10s session timeouts.
  • AppButton size="sm" and variant="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.

Released under the AGPL-3.0 License.