Changelog

What’s new in Warmbly.

New features, improvements and fixes, in the order they reached production. Each one links to the change on GitHub, so nothing here is rewritten after the fact.

Every merged change

The full log. Every entry, by month.

November 2026

  1. Nov 3
    New

    Pace SMTP sessions to a server that is limiting the worker's address

    New Features. Sending now backs off when a mail server limits connections from the sending address, including connection or sign-in refusals and dropped encryption handshakes, then gradually resumes sessions.. Sends held during a backoff are retried without contacting the server and do not count as lead attempts or…

    #1141
  2. Nov 3
    New

    Close new self-hosted links to Warmbly Cloud, retire the Warmup plan checkout, keep existing links and paid subscribers unchanged

    StartCode and ApproveCode refuse every new link with poollinkclosed (403), including codes issued before the deploy. The handshake helpers that only served them are removed, along with the two error codes nothing returns anymore (poollinkworkspacerequired, poollinkworkspaceconnected).. A free workspace that is already…

    #1140
  3. Nov 3
    New

    Publish hosted static assets from pinned releases with explicit domains and Pages rollback

    New Features. Added optional publishing of static assets to Cloudflare Workers alongside Pages deployments.. Added a manual workflow to rebuild and publish assets for an existing stable release without creating a new release.. Deployment checks validate release sources and assets before publishing, and retain…

    #1139
  4. Nov 3
    New

    Serve hosted static frontends through explicit HTTPS Pages origin mappings

    Adds an optional hosted Worker that serves public frontend assets from explicitly mapped HTTPS Pages origins. It preserves response headers, assets and redirects, removes application credentials before upstream requests, and limits forwarding to read methods. Existing release uploads and self-hosted deployments keep…

    #1137
  5. Nov 3
    New

    Scope GET /v1/unibox to a campaign_id or contact_id (org-verified, 404 outside the workspace) traced through campaign sends by Message-ID, In-Reply-To, thread root and Gmail thread handle, return each row's campaign_id, accept since/until as YYYY-MM-DD (until keeps the whole UTC day) or RFC 3339 and refuse anything else with 400 invalid_filter, and document address, direction, the new filters and dates in the unibox reference, openapi.json, error codes and both CLIs

    GET /v1/unibox takes campaignid and contactid (malformed: 400 invalidfilter; another organization's: 404). campaignid returns conversations linked to the campaign's sends by Message-ID, In-Reply-To, IMAP thread root or provider thread handle. contactid adds mail from or to the contact's address.. Rows carry campaignid…

    #1136
  6. Nov 3
    New

    Emit campaign.completed, inbox.reply_received, email_account.disconnected/error/synced, automation.run and bulk_operation.* webhooks from their control-plane sources, deprecate the five catalog events nothing can deliver, hide them from pickers, and add a source-scan test that every catalog event is emitted or deprecated

    Part of an external evaluation report.

    #1135
  7. Nov 3
    New

    Record the step A/B arm each contact was sent on campaign_contact_progress (migration 000338), report contact-based per-step arm stats with last-step attribution and a Bonferroni-corrected two-proportion z-test winner in GET /campaigns/:id/ab-analysis, implement ab_testing.auto_promote_winner as an audited consumer loop, and show per-arm results, winner and promotion in the step editor and Settings > Sending

    Migration 000338 (additive): campaigncontactprogress.abarm / abvariantid (CHECK added NOT VALID, no scan), campaignabvariants.promotedat. ReserveSend writes the drawn arm in the reservation's transaction, only when two or more arms are in the draw.. GET /campaigns/:id/ab-analysis gains steps: contact-based per-step…

    #1134
  8. Nov 3
    New

    Lift the reply-gated cold ceiling once warmup is stopped (not paused) by reading warmup_stopped_at in ColdRampStateForAccounts through one ColdRampState.CeilingApplies gate shared by the scheduler, send plan, projection and mailbox status notice, correct the Stop comments, let an explicit batch warmup Off win over per-row warmup columns in mailbox import with a three-way warmup choice in the import dialog, and document both in the campaigns, warmup and mailbox import guides

    New Features. Mailbox imports now offer clearer warmup choices: follow each file row, turn warmup on, or turn it off. For imports from inbox providers or administrator grants, you can leave existing warmup settings unchanged.. Stopping warmup now lifts the cold-sending limit while retaining ramp history. Pausing keeps…

    #1133
  9. Nov 3
    New

    Decide bounce suppression from the DSN status code and server reply through a shared dsn.Blame rule so mailbox-full, policy, reputation and system bounces keep the address and lead while address-invalid ones suppress, carry the per-recipient status and diagnostic in inbound bounce reasons, reuse the rule in emailverify, and add an optional TYPESAFE_ENDPOINT

    New Features. Bounce handling now distinguishes invalid addresses from mailbox-capacity, sender-policy, reputation, and temporary delivery issues. Only address-related failures suppress an address; other failures can remain eligible for later campaign steps.. TypeSafe judgments support a configurable endpoint. HTTPS…

    #1131
  10. Nov 3
    New

    Treat a reply that is only an opt-out command (STOP, remove, unsubscribe) as an opt-out, add opt-in stop_all_campaigns_on_reply holding a replying contact in their other campaigns, and add skip_active_in_other_campaigns to CSV import, bulk add and segment add-to-campaign with dashboard controls and docs

    New Features. Campaign enrollment can optionally skip contacts with a queued, sending, or held sequence in another unfinished campaign when adding contacts individually, in bulk, through imports, or from a segment. Skipped contacts are still imported or updated.. Enable a setting to hold contacts in other unfinished…

    #1130
  11. Nov 3
    New

    Document the completed NATS handoff and ordered Kafka rollback

    Document the final NATS-only bus configuration after every old Kafka publisher has stopped and all required consumer groups have reached stable final offsets. Keep dual-codec reads, compatible images and credentials through the retained-data and rollback window, and distinguish retained stream messages from consumer…

    #1129
  12. Nov 3
    New

    Monitor NATS stream capacity independently of disk usage

    The NATS stream has a logical byte limit separate from the brokers' disk capacity. Publish stream usage from the existing minute health job and alert above 75 percent for three periods, including missing metrics, so operators can review retention, backlog and storage headroom before the limit rejects writes.

    #1128
  13. Nov 3
    New

    Preserve mailbox sync coverage and accurate notification and authenticator status

    New Features. Added clearer two-factor reauthentication messages, including guidance when a code has already been used or verification is temporarily unavailable.. Clarified that mailbox review alerts concern unverified message claims and are not connection checks.. Improved mailbox sync coverage tracking and…

    #1127
  14. Nov 3
    New

    Add private AWS NATS operations and a compatible Kafka migration

    New Features. Added support for running services with NATS, including configurable stream settings, replica counts, capacity limits, and TLS certificates.. Added options to read from Kafka and NATS concurrently and to read both JSON and Avro formats.. Added NATS health checks, backups, monitoring, and scheduled…

    #1125
  15. Nov 3
    New

    Enforce issued password format and scope private attachment downloads

    New Features. Campaign attachment downloads can optionally use private, short-lived API links. Links are scoped to a single attachment and expire after 15 minutes.. Admin-issued initial passwords now include a randomly generated digit.. Security. Attachment downloads include protections against caching and MIME-type…

    #1124
  16. Nov 3
    New

    Honor selected warmup days and explain effective mailbox schedules

    New Features. Choose warmup days independently of campaign working days: follow the sending plan, select weekdays or individual days, or warm up every day. Cloud-linked mailboxes require explicit day selections.. Warmup schedules respect applicable work hours and breaks. Explicit weekend warmups can run without…

    #1123
  17. Nov 2
    New

    Hold mailbox warmup reply share to its configured target within existing send budgets

    New Features. Warmup replies now track each mailbox’s target share over the last seven days. When a mailbox is behind target, eligible incoming warmup mail may be answered in place of a planned new message.. Replies prioritize recovery-related mail while respecting each recipient’s reply share.. Documentation…

    #1122
  18. Nov 1
    New

    Gate private TLS recovery archives with an opt-in scoped writer

    New Features. Added an optional, disabled-by-default role for securely uploading TLS recovery evidence to designated storage locations. It grants upload-only access and does not enable recovery.. Changes to this role or its permissions require infrastructure approval.. Documentation. Added guidance on configuring the…

    #1118
  19. Nov 1
    New

    Gate partial TLS cleanup with reviewed evidence and protected recovery

    New Features. Added a reviewed, manual workflow for partial TLS recovery, with safeguards and checks before and after recovery.. The workflow can archive private recovery evidence and redeploy the planned release before final verification.. Deployment workflows can accept an optional bake duration override.…

    #1117
  20. Nov 1
    New

    Validate TLS recovery resource and workflow evidence

    Recovery identity/state/plan, lineage and S3 input fixture suites passed.. Mocked collection covers wrong identity/version/hash/encryption, changed latest state, wrong deployment/stage, historical release relabeling, changed tag/ancestry, incomplete jobs, API failures and overwrite refusal.. Existing normal TLS…

    #1116
  21. Nov 1
    New

    Require complete HTTP group cleanup in scoped runtime TLS plans

    Documentation. Updated TLS finalization guidance to require a plan that removes exactly four service HTTP target groups.. Clarified that a partially completed transition requires a separately reviewed recovery plan.. Bug Fixes. TLS plan checks now reject plans that omit or alter any of the four expected target-group…

    #1115
  22. Nov 1
    New

    Keep visible mailbox health aligned with current server evidence

    New Features. Mailbox health and error reports refresh every minute, when you return to the tab, and when relevant live events occur.. Cached measurements remain visible as “Last observed” during refreshes or failed reads. Recent issues remain labeled “Last reported issue” for up to five minutes while recovery is…

    #1114
  23. Nov 1
    New

    Align realtime loopback HTTP listener socket family

    Bug Fixes. Fixed HTTP listener configuration for IPv4 loopback addresses, improving local connections while preserving existing transport and protocol options.

    #1113
  24. Nov 1
    New

    Hide temporary mailbox failures on working mailboxes and explain warmup skipping persona off-days

    New Features. The Warmup tab identifies warmup days skipped because they fall outside your sending schedule. If you can manage email settings, you can add those days to the schedule from the notice.. Recoverable mailbox warnings show Retrying while automatic retries are underway. Critical errors continue to show…

    #1112

Try what just shipped.

Start free on Warmbly Cloud, or pull the latest release and run it on your own server.