0.18.0 (2026-10-28)
Features
Add throttle for transactional emails and workflows (f228961)
api: let headless senders point List-Unsubscribe at their own one-click link (50be3c9)
let headless senders point List-Unsubscribe at their own one-click link (d5c5f89)
Verify SES configuration sets on startup (2f3cb50)
Bug Fixes
api: encode non-ASCII headers and attachment filenames (ea3e7ae)
api: encode non-ASCII headers and attachment filenames (de90dae)
api: honour data-plunk-one-click for headless sends only (6f9cebf)
api: verify request origin on session-authenticated routes (00177cc)
api: verify request origin on session-authenticated routes (6eacbfc)
Cancel workflow executions and scheduled campaigns when a project is disabled (cf2d384)
contacts: honour the status filter in select-all bulk actions (0fe3b07)
contacts: honour the status filter in select-all bulk actions (d794c5a)
Correctly end job if last step of workflow is delay (18f18c1)
landing: Remove inbound attachment and threading claims (beac2e3)
mcp: page through campaigns and templates with page/pageSize (e720913)
mcp: page through campaigns and templates with page/pageSize (28e0aa4)
mcp: read the bare array GET /segments returns in plunk_list_segments (3de3369)
mcp: read the bare array GET /segments returns in plunk_list_segments (674c2f5)
Only accept SNS messages from topics in our own AWS account (4c84f64)
segments: filter by segment membership without loading members (5848c60)
segments: filter by segment membership without loading members (d44788f)
segments: scope referenced segments to the project (ce58df5)
templates: only accept filters that keep the unsubscribe URL intact (6f2508c)
templates: recognise spaced unsubscribe placeholders in the headless warning (3e7ee20)
templates: recognise spaced unsubscribe variables in the headless warning (dd2c6c0)
webhooks: ignore opens SES marks as automated (3c1af34)
webhooks: ignore opens SES marks as automated (032b868), closes #531
web: refetch project data once the active project is known (537d5a4)
web: refetch project data once the active project is known (b7e1265)
web: start from an empty cache after signing out (1097f0c)
workflows: keep cancelled executions from resuming (189b907)
workflows: keep cancelled executions from resuming (7792d6b)
workflows: mark only the step that failed (2c11c81)
workflows: mark only the step that failed (ee8db3f)
workflows: resume a waiting step once (d0f5471)
workflows: resume a waiting step once (9c333bb)
workflows: treat a zero wait timeout as no limit (0ab8bf9)
workflows: treat a zero wait timeout as no limit (006cc4c)
Performance Improvements
contacts: serve the contact field list from Redis (627f7e9)
contacts: serve the contact field list from Redis (af0007f)
Code Refactoring
web: correct comments around the active project choice (df2f38b)
Documentation
Add open tracking and workflow improvements to the changelog (1fe84b5)
document data-plunk-one-click for sender-hosted one-click unsubscribe (77e85b8)
tracking: explain how automatic opens are left out (9805c18), closes #531
workflows: say what cancelling an execution stops (cf264fa)
workflows: suggest the email event names workflows receive (bf6a6ef)
workflows: suggest the email event names workflows receive (2eac0dd)