Open-source cold email and mailbox warmup you can self-host.
Your sending IPs, your database, your servers.
Mailboxes · Integrations · Quick start · Warmup · How it works · Self-hosting · Docs · Contributing
What is Warmbly
Warmbly is a cold outreach platform you run yourself: your sending IPs, your Postgres, your servers, nothing tied to a vendor's database. Connect your mailboxes, write sequenced campaigns, and it sends the mail, tracks the replies, and keeps your sender reputation healthy.
https://github.com/user-attachments/assets/378a510a-bb99-425f-925e-04300184938b
Everything a sending team needs sits in one dashboard, collaborative in real time so teammates see each other's presence and edits with no refresh:
- Campaigns send multi-step sequences with per-mailbox daily caps and spacing.
- The unified inbox pulls every connected mailbox and its replies into one view.
- A built-in CRM tracks contacts, pipelines, deals, tasks, and meetings.
- Deliverability surfaces bounces, complaints, suppression, and inbox placement.
- Automations run branching reply playbooks on a visual canvas, with AI steps that read a reply and act on it.
- Integrations sync the CRM and automations out to HubSpot, Slack, and more.
- Warmup builds real sender reputation through a pool of monitored mailboxes.
The same code runs on a single VPS or across a fleet of cheap servers, so you add capacity by adding machines.
Star the repository ⭐
Connect your mailboxes
Connect Gmail and Google Workspace with one-click OAuth, Microsoft 365 over its own OAuth, or any other provider (Zoho, Fastmail, a self-hosted server) over SMTP + IMAP. Each mailbox warms, sends, and syncs on its own, with its own daily cap and spacing, and credentials sealed with per-organization envelope encryption. See Mailboxes.
Integrations
Automations and the built-in CRM connect out to the tools you already run: ping Slack on a positive reply, push a won deal to your CRM, or book meetings straight from replies.
| Category | Providers |
|---|---|
| CRM | HubSpot, Salesforce, Pipedrive, Close |
| Automation | Zapier, Make, n8n |
| Notifications | Slack, Discord |
| Meetings | Calendly, Cal.com |
| Data | Google Sheets |
Everything is also reachable through a scoped REST API, HMAC-signed webhooks, and a realtime WebSocket. See the API reference.
Warmup
Warmup only produces real results with a pool of real mailboxes warming against each other, and Warmbly maintains that pool. Volume starts low and ramps gradually per mailbox, replies happen at a natural rate, and mailboxes that show spam patterns or forged tokens are scored and auto-blocked so the pool stays clean for everyone. See Warmup.
Quick start
You need Docker, Go 1.25, and pnpm.
git clone https://github.com/warmbly/warmbly && cd warmbly
make dev
One command brings up the backing services in Docker, applies migrations, seeds
demo data, and starts the backend, worker, and dashboard natively. Open
http://localhost:5173 and log in with dev@warmbly.com / password123.
Full setup, seeding, and troubleshooting live in the
local development guide.
How it works
Warmbly splits into a control plane (backend API, consumer, Postgres, Redis, and the event bus) that owns every piece of state, and an execution plane of interchangeable Go workers that send and sync mail. Workers never connect to Postgres, and outbound mail leaves through each mailbox's own provider (Gmail API, Microsoft Graph, or SMTP relay), not the worker's IP, so you add throughput by running more workers. Secrets use envelope encryption, with a local AES master key by default or AWS KMS if you prefer. Full write-up in the architecture docs.
Self-hosting
Warmbly runs with no cloud account of any kind: no AWS, no GCP, no Stripe, no Kafka. One command brings up the whole platform on local, open-source pieces:
git clone https://github.com/warmbly/warmbly && cd warmbly
make up # or: docker compose up --build
Dashboard on :5173, admin on :5174, API on :8080. Every external dependency
is picked by an environment variable, so you swap in a cloud service only if you
want one:
| Concern | Self-host default | Optional / cloud |
|---|---|---|
| Database | PostgreSQL 16 | RDS / Cloud SQL, any Postgres |
| Cache | Redis (or Valkey) | ElastiCache |
| Event bus | NATS JetStream (~15 MB, one binary) | Kafka (-tags kafka) |
| Blob storage | Filesystem | S3, MinIO, R2, B2 |
| KMS / root key | Local AES master key | AWS KMS |
| Task scheduler | In-process Postgres poller | GCP Cloud Tasks |
| Codec | JSON | Avro + Schema Registry |
| Captcha | Off | Cloudflare Turnstile |
| Payments | Off (everything unlocked) | Stripe |
Scaling is by mailboxes and workers, not IPs: add throughput by connecting more mailboxes and running more workers. Reaching it from another machine, connecting Gmail mailboxes, the secrets you must set, and day-2 operations are all in the deployment guide.
Tech stack
| Component | Tech |
|---|---|
| Backend API | Go 1.25 + Gin |
| Consumer | Go (event-bus driven) |
| Worker | Go (Kafka / NATS subscriber) |
| Tracking | Rust + Axum |
| Realtime | Elixir + Phoenix Channels |
| Dashboard | React 19 + Vite + Tailwind v4 |
| Admin UI | React 19 + Vite + Tailwind v4 |
| Database | PostgreSQL 16 |
| Cache | Redis 7 (or Valkey / KeyDB) |
| Event bus | NATS JetStream (default) or Kafka |
Documentation
The full docs live at docs.warmbly.com: product guides, the API reference, and the engineering docs. Start here:
| Read this | To learn |
|---|---|
| Local development | Every make target, the native services, and how seeding works |
| Sandbox | One command spins up a full demo org that sends, replies, opens, clicks, and warms itself |
| Architecture | How the control plane and the workers split the job, plus the encryption model |
| Deployment guide | Taking it to production and scaling the worker fleet |
| API reference | Endpoints, auth, permissions, and webhooks |
Contributing
Pull requests are welcome. Keep each one to a single logical change, and open an
issue first for larger design or product changes. Before you open a PR, run the
checks for the tree you touched (make fmt and make lint for Go, pnpm typecheck and pnpm lint for the frontends). See CONTRIBUTING.md.
Security
Found a vulnerability? Email team@warmbly.com instead of opening a public issue.
We prefer responsible disclosure and credit reporters in the release notes.
License
Apache License 2.0. Copyright 2026 Mindroot Ltd. See LICENSE.