Last verified:
Windmill turns scripts into webhooks, workflows, cron jobs and internal UIs - an open-source alternative to Retool and Temporal. Choosing a VPS for it works differently from most self-hosted apps, because capacity is measured in workers, and workers are bought with cores.
Why Core Count Decides This Comparison
Windmill does not get faster when you give one process more memory. It gets faster when you add worker containers, and the practical ceiling is roughly one standard worker per vCPU, at 1-2 GB of RAM each.
That inverts the usual advice. For most self-hosted apps you look for RAM first and treat cores as secondary. Here, a 4 vCPU plan runs about twice the concurrent job load of a 2 vCPU plan at the same memory-per-worker ratio, so the plan with more cores at the same price is simply the better machine.
Two other architectural facts shape the requirements:
- PostgreSQL is the queue. There is no Redis and no separate broker, so the database is on the hot path for every job dispatch and wants fast disk.
- Native workers are nearly free. They run lightweight jobs at about 0.1 CPU and 128 MB, which is why the stock stack ships one without needing another core.
Top VPS Choices for Hosting Windmill
| Provider | Plan | vCPU | RAM | Storage | Price | Approx. parallel workers | Link |
|---|---|---|---|---|---|---|---|
| Contabo | Cloud VPS 4 | 4 | 8 GB | 100 GB SSD | 5.50 EUR/mo net | ~4 | Contabo |
| Hetzner Cloud | CX23 | 2 | 4 GB | 40 GB NVMe | 5.49 EUR/mo net | ~2 | Hetzner |
| DigitalOcean | Basic 4 GB | 2 | 4 GB | 80 GB SSD | 24 USD/mo | ~2 | DigitalOcean |
Contabo Cloud VPS 4 - twice the workers for the same money
At 5.50 EUR net you get 4 vCPU, 8 GB RAM and 100 GB SSD. Against Hetznerโs CX23 at one cent less, that is double the cores and double the memory, which translates almost directly into double the concurrent job capacity. For a workload made of many short jobs - scheduled syncs, webhook handlers, small ETL steps - this is the plan that does the most work per euro.
Contaboโs known weaknesses apply: slower provisioning and more variable network performance than Hetzner or DigitalOcean. Neither is on the critical path for a job runner that mostly talks to your own systems on a schedule.
Hetzner CX23 - fine for the default stack
CX23 gives 2 vCPU, 4 GB RAM and 40 GB NVMe at 5.49 EUR net. That comfortably runs the stock compose stack - server, one standard worker, one native worker, indexer and Postgres - and the NVMe disk suits Postgres doing queue duty. The limit is parallelism: you are running about two workers, so a burst of simultaneous jobs queues rather than spreads. CX33 (4 vCPU, 8 GB, 80 GB NVMe) at 8.49 EUR fixes that, but costs more than Contaboโs equivalent.
DigitalOcean Basic 4 GB - the tooling premium
24 USD a month buys 2 vCPU, 4 GB and 80 GB SSD: the same specification as CX23 at roughly four times the price. What you get for it is the best snapshot workflow and documentation of the three, plus monitoring that works untouched. That is a reasonable trade if your team already lives on DigitalOcean and values one control panel. As a standalone choice for a job runner, the maths is hard to defend.
Matching the Plan to Your Workload
| Workload | Recommended plan | Reason |
|---|---|---|
| Many small scheduled jobs | Contabo Cloud VPS 4 | Parallelism scales with cores |
| A handful of jobs, mostly idle | Hetzner CX23 | The default two-worker stack fits |
| Heavy Python jobs with big dependencies | Contabo Cloud VPS 4 or Hetzner CX33 | Dependency installs spike memory |
| Evaluation on 1 GB | Not recommended | Native worker only; no dependency installs |
Deployment Notes
- Use the projectโs own
docker-compose.ymlrather than writing one. Guides that add a Redis service are wrong: Windmill queues through PostgreSQL. - Change the
changemePostgres password in the shipped.envbefore the first start, since the database is created on that boot. - Set
BASE_URLand point DNS at the server before starting, so Caddy can issue a certificate. - Back up the Postgres dump and treat it as a secret - it holds the credentials your jobs use for everything else.
Final Thoughts
The ranking here follows from one architectural fact: Windmill buys throughput with cores. Contabo Cloud VPS 4 delivers about four workers for 5.50 EUR net, Hetzner CX23 about two for 5.49 EUR, and the US providers the same two for four times as much. Unless you need a specific region or already standardise on one platform, the core-per-euro figure is the whole comparison.
For an in-depth comparison of all available VPS options, visit our full VPS comparison.
Frequently asked questions
How much CPU and RAM does Windmill need on a VPS?
Size by worker rather than by application. Each standard worker executes one job at a time and wants roughly one vCPU and 1-2 GB of RAM, on top of Postgres and the server process. The default compose stack with two workers is comfortable on 2 vCPU and 4 GB, while 4 vCPU and 8 GB is the sensible target once several jobs run concurrently.
Which VPS gives the most Windmill throughput for the money?
Contabo Cloud VPS 4 at 5.50 EUR net, because throughput here is a function of core count. Its 4 vCPU supports roughly four parallel workers, where a 2 vCPU plan at the same price supports two. If your workload is many small jobs rather than a few heavy ones, that ratio decides the comparison on its own.
Can I run Windmill on a 1 GB VPS?
Only as a demonstration. A native worker handles lightweight jobs at about 0.1 CPU and 128 MB, so the interface will load and simple jobs will run. You cannot host a standard worker in that space, which rules out any Python or TypeScript job that installs dependencies, and that is most real automation work.