Changelog Everything we shipped, dated and tagged

The actual history
of what we ship.

New features, behavioural changes, and fixes, in the order they reached production. No marketing language, no rewrites of older entries, no quiet deletions.

Latest releases

The latest production work.

The 3 most recent merged pull requests. Each entry links straight to the PR it shipped in.

3 / 24 total
2026-09-12
shipped

Plans an operator can grant, visible in the admin panel

New Features. Administrators can grant, update, view, and revoke managed plans for workspaces without requiring Stripe billing.. Managed plans support reasons, optional expiry dates, status badges, and plan entitlement details.. Organization lists can filter by managed-plan status and display lapsed grants.. CSV…

#467
2026-09-12
shipped

AI is a paid feature, so take it off the free plan

Changes. AI features now require an active paid plan.. Free trials no longer include AI credits, and AI features remain locked until upgrading.. Updated plan documentation to show free-trial availability and renamed credit plans to Grow and Business.. Self-hosted installations continue to have unrestricted AI access.…

#466
2026-09-12
fixed

Mailbox onboarding accepts connections that cannot work, and hides why

It does not treat a broader grant as a denial. Gmail scopes nest: gmail.modify confers reading and sending, gmail.compose confers sending. Someone who granted the broad permission but not the narrow one has the capability and is let through.. It does not treat an absent scope field as a denial. A provider that returns…

#465
All releases

Every entry, in order.

New features, behavioural changes, and fixes, in the order they reached production. No marketing language, no quiet deletions.

Shipped 15 Changed 0 Fixed 9
2026-09-12
shipped

Plans an operator can grant, visible in the admin panel

#467

New Features. Administrators can grant, update, view, and revoke managed plans for workspaces without requiring Stripe billing.. Managed plans support reasons, optional expiry dates, status badges, and plan entitlement details.. Organization lists can filter by managed-plan status and display lapsed grants.. CSV…

2026-09-12
shipped

AI is a paid feature, so take it off the free plan

#466

Changes. AI features now require an active paid plan.. Free trials no longer include AI credits, and AI features remain locked until upgrading.. Updated plan documentation to show free-trial availability and renamed credit plans to Grow and Business.. Self-hosted installations continue to have unrestricted AI access.…

2026-09-12
fixed

Mailbox onboarding accepts connections that cannot work, and hides why

#465

It does not treat a broader grant as a denial. Gmail scopes nest: gmail.modify confers reading and sending, gmail.compose confers sending. Someone who granted the broad permission but not the narrow one has the capability and is let through.. It does not treat an absent scope field as a denial. A provider that returns…

2026-09-12
shipped

Fix the Warmbly Cloud pool link across both roles (#262)

#463

New Features. Cloud-managed mailboxes can identify cloud warmup messages even when verification headers are missing.. Linked instances exclude cloud-managed mailboxes from local warmup handling.. Connection completion displays the linked workspace name.. Broker authentication supports a dedicated node token for…

2026-09-12
shipped

Make tags, categories and folders workspace assets instead of the creator's

#457

New Features. Added API support for creating, updating, deleting, and reordering workspace folders, tags, and categories.. Workspace labels are shared across teammates and available consistently in mailboxes, campaigns, contacts, and conversations.. Workspace exports now include complete folders, tags, categories, and…

2026-09-12
shipped

Fix the six self-host defects reported in issue #439

#456

New Features. CAPTCHA is now skipped automatically for deployments that do not require it.. Plain-text campaign and sequence content now generates formatted HTML with clickable links when no HTML is supplied.. Campaigns using explicit sender lists no longer fall back to all active mailboxes.. Bug Fixes. Campaigns…

2026-09-12
fixed

A joining node is told an image tag that does not exist

#455

Heartbeat: an unresolved release stays "". A node already running something must be left alone, or one control-plane hiccup rolls the fleet. That invariant is unchanged and now has a test pinning it. Join: a machine with nothing installed cannot act on "no opinion", so it is told prod, with the variant suffix applied…

2026-09-12
fixed

Realtime cannot complete either of its TLS connections

#452

New Features. Added optional CA bundle support for verified PostgreSQL TLS connections, including Amazon RDS.. Added improved hostname verification for secure Redis connections using rediss://.. Documentation. Documented the DATABASESSLCAFILE setting, its default behavior, and the configuration required for Amazon…

2026-09-12
fixed

The tracking Kafka build has no OpenSSL, so SASL_SSL is refused at runtime

#451

Rdkafka gains the ssl feature, which is ["openssl-sys"]. gssapi is deliberately left out: it drags in cyrus-sasl, and PLAIN and SCRAM are built into librdkafka without it. Every managed broker speaks SASLSSL with PLAIN or SCRAM, so ssl is what makes the Kafka build usable at all rather than an optional extra. The…

2026-09-12
fixed

The tracking service must not write Avro to a JSON consumer

#450

Json (the default) serializes with serdejson::tovec, byte for byte what the NATS path writes, so the consumer decodes Kafka and NATS identically and no Schema Registry is involved. Avro keeps the existing encoder, and is now refused at boot with a clear message when SCHEMAREGISTRYURL is empty, instead of starting…

2026-09-12
shipped

Hand fleet nodes the image variant their bus needs

#449

An empty version stays empty. "No opinion" must never become a bare -kafka, which the node would dutifully try to pull. It is idempotent, so a pin already written as v1.4.1-kafka does not become v1.4.1-kafka-kafka. Join.sh writes the resolved version to WARMBLYVERSION in node.env and to target-version. Cmd/worker and…

2026-09-12
shipped

Publish Kafka-linked image variants

#448

The arm64 Kafka consumer image was built end to end locally (builder plus runtime stage), which is the combination this PR relies on: alpine, musl, cgo, -tags "musl kafka", arm64. Actionlint on both workflows reports the same six pre-existing shellcheck findings as main and no new ones; the matrix object references…

2026-09-12
shipped

The Kafka bus creates the topics it uses

#447

New Features. Kafka topics are now created automatically when publishing or subscribing, improving support for dynamically generated worker topics.. Kafka topic creation uses the configured authentication settings and handles existing topics safely.. Documentation. Clarified that Kafka credentials require topic…

2026-09-12
shipped

A stream size ceiling, and a latent bug in the retry path

#446

A managed NATS account can require every stream to declare a size. Synadia's Max Bytes Required does exactly that, and ensureStream never set MaxBytes — so against such an account Warmbly fails to create its stream on first publish, with a server error naming a policy the operator has probably never heard of.

2026-09-12
shipped

Clickable images and a call-to-action button in the campaign body editor

#443

New Features. Added customizable call-to-action buttons to the email editor, including label, link, color, size, alignment, width, and corner-radius controls.. Added support for linking images, with automatic HTTPS completion and safe-link handling.. Plain-text email versions now preserve destinations for links…

2026-09-12
shipped

Fix scheduled sending time drifting and campaigns that never send (issue #437)

#442

ESP-strict finds no mailbox for that recipient's provider. The lead is bound to a mailbox that is inside its minimum gap, or waiting for its hours to reopen. Send-time optimization puts that recipient's preferred hours hours away. TestLiveRefusedLeadDoesNotParkTheCampaign — the lead behind a refused one sends on the…

2026-09-11
shipped

Per-step open, click, reply and bounce rates in Step performance

#441

New Features. Campaign analytics now include per-step send, open, click, reply, and bounce rates.. Step metrics are calculated against each step’s own sends, with automated opens and clicks identified separately.. Campaign step-performance tables display counts, percentages, and automated-activity indicators.…

Want the full detail? Merged pull requests on GitHub Each entry links to the pull request that shipped it.

Ship faster. Tell the world.

Connect a mailbox, warm it up, and put your first campaign in the next changelog entry.