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.
The full log. Every entry, by month.
October 2026
- Oct 14New
Cut database CPU across warmup selection, Emails tab status and periodic sweeps
Performance. Account status pages now load health, warmup, and delivery signals with fewer repeated database queries.. Live account updates are grouped to reduce redundant refreshes, while existing status data stays available as additional pages load.. Warmup partner selection applies inbound limits across candidate…
#973 - Oct 14New
Coalesce Rust tracking ticket lookups and avoid unused digest encoding
Coalesce concurrent cache fills for the same tracking ticket while preserving successful/negative cache behavior, per-source miss budgets, independent ticket concurrency and retryable backend errors.. Encode only the retained digest prefix in sourcetoken; token bytes are unchanged across IPv4, IPv6, empty/unknown…
#971 - Oct 14New
Reuse scheduler timezone parsing and Go PubSub publisher lifecycles
Reuse timezone locations within one behavior batch/campaign scheduling pass, avoiding repeated timezone file parsing without a cross-request cache.. Retain one Google Pub/Sub publisher per topic and stop retained publishers on close. Topic existence checks, recreation after deletion, publish errors and message…
#970 - Oct 14New
Reduce repeated worker template, mailbox preview and Graph lookup work
Cache immutable raw template preprocessing per source while keeping recipient-specific rendering, spintax and malformed-input fallback.. Stop plaintext preview normalization once the bounded snippet is determined; preserve quote/signature filtering, Unicode whitespace and invalid UTF-8 behavior.. Reuse an…
#969 - Oct 14New
Remove repeated realtime subscriptions, connection scans and event normalization
Remove redundant Phoenix topic registrations in admin/bulk channels, maintaining delivery and cleanup.. Maintain an exact local connection aggregate alongside per-user counts instead of folding the user table for every total read.. Normalize event type once across permission/intent gates, with an unchanged…
#968 - Oct 14New
Avoid rebuilding unchanged dashboard lists and mailbox status query aggregation
Memoize seven paginated dashboard list projections and stabilize mailbox-status query options/combine callbacks using existing React/TanStack structures.. Request keys, freshness, retries, polling, pagination, sorting/filter state, tenant scope and realtime updates are unchanged. No visible redesign or new…
#967 - Oct 14New
Reduce PostgreSQL history scans in task scheduling, warmup health and dashboard analytics
Use existing time indexes for daily task ledgers and per-mailbox latest-send lookups; share duplicate warmup-health aggregate scans; restrict dashboard history to its requested send cohort.. Preserve UTC/session-day boundaries, DST, dispatch evidence, reserved-send clocks, all counts and tenant/campaign/mailbox scope…
#966 - Oct 13New
Respect gateway warmup schedules with a main-compatible upgrade migration
New linked SMTP/IMAP and externally credentialed Google/Outlook accounts create their behavior profile disabled. Ordinary and managed Cloud mailboxes retain enabled defaults; the routing flag stays internal (json:"-").. Migration 000295 conservatively disables only identifiable untouched linked defaults. Creation-time…
#965 - Oct 13New
Batch linked-instance mailbox status and warmup reads while preserving partner limits
ListMailboxes no longer loads accounts, detailed partner cohorts and seven-day statistics serially for every association. It batches organization-scoped account/status reads and warmup summaries, shares tier-cohort scans for partner limits, and bounds residual mailbox-specific analytics to four concurrent reads…
#964 - Oct 13New
Reduce mailbox sync database round trips and task/folder scans
ImapApply resolves up to 200 envelope Message-IDs through one node-authenticated batch endpoint and one scoped messageid = ANY(...) query. Same-batch duplicate arrivals still re-read their canonical mapping after admission; misses are never cached across passes.. Preserve old GET endpoints and optional repository…
#962 - Oct 13New
Stop Cloud participation when individually removing managed mailbox links
Confirmation text distinguishes local removal from Cloud data erasure and whole-instance disconnect. Single and bulk disconnect wait for Cloud ownership to be confirmed rather than showing unmanaged destruction terms during loading or connection failures. Customer and API docs cover retries, existing enrollments…
#961 - Oct 13New
Remove whole-task scans from warmup dispatch and mailbox sync
Restrict budget counting to the combined day/hour time range, and fetch the most recent send separately with LIMIT 1, in the same statement snapshot. Preserve excluded-task handling, active/completed authority, timestamp fallback, exact window boundaries and historical last-send spacing.. Add concurrent migration…
#957 - Oct 12New
Rework iOS dark mode (charcoal palette, night sky photo, solid tab bar)
New Features. Added Light, Dark, and System appearance options in iPhone app settings, including before sign-in. The app now defaults to Light, and the selection is saved on the device without syncing to the dashboard.. Updated dark-mode visuals with charcoal and zinc tones, a dark sky image, and refined sheet and…
#955 - Oct 12New
Redesign the iOS app and ship it to TestFlight from GitHub Actions
Redesigned app: inbox with the inbox agent's drafted replies edited in the full composer, Remie, home, analytics, CRM, contacts, settings hubs, and a mailbox connect flow covering every dashboard source.. Sign-in, onboarding, workspace picker and server-unreachable screens drawn with Liquid Glass on the sky photo.…
#954 - Oct 12New
Restore receiving-authorized warmup spam rescue and engagement
Preserve provider-specific implementations, verified-message ownership, worker/organization admission, safety holds, volume limits and randomized engagement rates/dwell. Recheck current admission after acquiring the mailbox execution context, before provider dispatch. Add regressions for receive revocation, Off…
#953 - Oct 12New
Preserve destination-local send protection during workspace archive overwrites
Preserve destination-local send identities, typed payloads, uncertain-send holds, applied results and warmup accounting during workspace archive overwrites. Source-only imported history remains visible without acquiring execution or result authority. An incompatible restrictive hold aborts the import atomically…
#950 - Oct 11New
Retain current-generation privacy-safe IMAP failure reasons and publish persisted warnings
Classify native IMAP dial, TLS and STARTTLS failures into fixed privacy-safe categories without hostnames, credentials, provider replies or raw transport errors. Propagate AddWorkerEmail.TransportGeneration into initial mailbox-load errors; automatic retries and legacy ErrMailServerUnreachableAt compatibility remain.…
#952 - Oct 11New
Restrict stale backfill warnings to active unheld mailboxes without losing history
Scope backfillstalerunning to active mailboxes while retaining inactive/revoked running-backfill history. Reactivation does not erase that history or claim recovery; an unchanged stale running state warns again.. Align the admin Sync stalled filter, row indicator and summary with the same…
#951 - Oct 11New
Require current warmup dispatch identity for generic execution and cancellation
Require generic warmup execution and cancellation to match the current unstarted, unresulted dispatch nonce and worker. BeginOutbound locks task identity and requires exactly one dispatch-start transition before recording executor start or an outbound attempt. CancelOutbound checks that same claim before releasing the…
#949 - Oct 11New
Add Apollo (list imports, hourly sync, enrichment) and two-way Clay integrations with dashboard pages and docs
Connect checks the key against every endpoint the integration uses and records the Apollo account it acts as. A refused key moves the connection to reconnect-required and pauses imports and enrichment.. Imports from saved Apollo lists: a three-step dialog (list, preview, options), campaign and labels…
#948 - Oct 11New
Compare monitoring evidence against a statement-local database clock
MonitoringStatement captures one clocktimestamp() in a materialized CTE for the existing UNION ALL statement. Every time predicate, metric window and successful source/metric ObservedAt uses it; the MVCC snapshot, query/connection count, cache lifetime and collection-start CheckedAt remain unchanged.. Genuine future…
#946 - Oct 11New
Isolate mailbox transport recovery by operation and restore generation
EmailErrorEvent records operation, observation provenance and receipt time. RecordTransportSuccess reconciles only native, matching-operation evidence from the current mailbox generation: a completed provider sync or an applied sent task. Operator confirmations do not become transport-health proof. Legacy/imported…
#945 - Oct 11New
Stop campaigns sharing a mailbox pool from throttling each other, and hold the per-mailbox gap across campaigns with an atomic send claim
New Features. Campaigns sharing a mailbox now respect its minimum send gap and daily cap, with mailbox rotation helping distribute sends across campaigns.. Competing campaign sends wait and retry when another send has recently claimed the mailbox.. Bug Fixes. Campaign wake-ups no longer count as booked sends when…
#944 - Oct 11New
Exclude retired and cancelled sync attempts from provider-failure diagnostics
SyncOnce preserves the original MailError but skips provider-unreachable diagnostics, transport-failure accounting, and misleading provider warnings after local retirement or caller cancellation. No provider was contacted in the reproduced retired-startup case.. Seven native regressions cover retired/cancelled…
#943
Try what just shipped.
Start free on Warmbly Cloud, or pull the latest release and run it on your own server.
