Independent testing Updated August 2026 387 self-hosting guides 5 VPS providers tested

guide

Windmill VPS Requirements: RAM, CPU & Storage Guide

Windmill sizes by worker, not by app: roughly 1 vCPU and 1-2 GB per worker. Here is what the real compose stack needs and which VPS specs match it.

Windmill is an open-source developer platform that turns scripts into webhooks, workflows, cron jobs and internal UIs - positioned against Retool and Temporal rather than against a static-site host. It is licensed AGPL-3.0 for the community edition, with an enterprise build behind a licence key.

Sizing it is unlike sizing a typical web app, because the unit of capacity is the worker, not the application.

The Architecture That Decides Your Specs

The official docker-compose.yml brings up seven services:

ServiceImageRole
dbpostgres:16Database and job queue
windmill_serverghcr.io/windmill-labs/windmill:mainAPI and web UI, port 8000
windmill_workersame image, MODE=workerExecutes jobs
windmill_worker_nativesame image, NATIVE_MODE=trueLightweight jobs only
windmill_indexersame image, MODE=indexerFull-text job search
windmill_extraghcr.io/windmill-labs/windmill-extra:latestLanguage servers for the editor
caddyghcr.io/windmill-labs/caddy-l4:2.11.4-1Reverse proxy on port 80

Two things in that table matter more than the rest.

There is no Redis. Windmill uses PostgreSQL as its queue. Plenty of third-party guides add a Redis container and a REDIS_URL; the official compose file has neither, and copying such a guide leaves you running a service Windmill never talks to.

The workers are the cost centre. The server is comparatively idle. Everything you actually pay for is worker capacity.

RAM and CPU: Size by Worker

The practical rule is one worker per vCPU, 1-2 GB of RAM each, plus overhead for Postgres and the server.

SetupvCPU / RAMWhat it gives you
Trial, one worker2 / 2 GBWorks, but one job at a time and no headroom for a heavy dependency install
Default stack, 1-2 workers2-4 / 4 GBThe practical minimum for real use
Several concurrent jobs4 / 8 GBThe comfortable target for a small team

Native workers are the exception worth knowing: they run lightweight jobs at roughly 0.1 CPU and 128 MB, which is why the default stack can ship one alongside a standard worker without demanding another core.

The variable nobody predicts is dependency installation. A Python job that pulls pandas or a TypeScript job with a large lockfile spikes memory well above the steady-state figure. If jobs fail only on first run and then succeed, you are watching the dependency cache being built on too little RAM.

Storage: The Dependency Cache Is the Growth

The database stays modest for a long time - job metadata, scripts, flows and logs are text. The volume that grows is worker_dependency_cache, where every Python wheel and npm package your jobs import is kept so later runs skip the install.

Start at 40 GB. Watch the cache volume rather than the database when deciding whether to resize, and prefer NVMe or SSD, since Postgres is doing queue duty as well as storage and is sensitive to I/O latency.

VPS Plans That Match These Requirements

ProviderPlanvCPU / RAM / DiskPriceVerdictLink
ContaboCloud VPS 44 / 8 GB / 100 GB SSD5.50 EUR/mo netFour workersโ€™ worth of headroom at the price of an entry planContabo
Hetzner CloudCX232 / 4 GB / 40 GB NVMe5.49 EUR/mo netFine for the default two-worker stackHetzner
DigitalOceanBasic 4 GB2 / 4 GB / 80 GB SSD24 USD/moSame specs as CX23, four times the priceDigitalOcean
VultrRegular 4 GB2 / 4 GB / 80 GB SSD20 USD/moWidest region choiceVultr
LinodeLinode 4 GB2 / 4 GB / 80 GB SSD24 USD/moPredictable performance, strong APILinode

Windmill is one of the few self-hosted apps where a 1 GB plan is not automatically disqualified - a single native worker genuinely fits. But you cannot run a standard worker there, which means no Python or TypeScript jobs with dependencies, so it is a demo rather than a deployment.

Scaling Up

Windmill scales horizontally by adding worker containers rather than by making one process bigger. To double throughput, add a second windmill_worker service pointed at the same DATABASE_URL and give the box another core.

That has a practical consequence for VPS choice: more cores beat faster cores here. Contaboโ€™s 4 vCPU at 5.50 EUR net buys four workersโ€™ worth of parallelism, where Hetznerโ€™s CX23 buys two at essentially the same price. If your workload is many small jobs rather than a few heavy ones, that ratio is the whole decision.

For a wider look at plans across providers, see our full VPS comparison.

Frequently asked questions

How much RAM does a self-hosted Windmill instance need?

Size by worker rather than by app. The rule of thumb is one worker per vCPU with 1-2 GB of RAM each, on top of Postgres and the server process. A single-worker instance runs on 2 GB, the default compose stack with two workers is comfortable on 4 GB, and 8 GB with 4 vCPU is the sensible target once you run several jobs concurrently.

How many CPU cores should I allocate to Windmill?

Start with 2 vCPU and add cores as you add workers, since each standard worker executes one job at a time and is billed its own core in practice. Native workers are the exception: they handle lightweight jobs at roughly 0.1 CPU and 128 MB, so the default stack ships one alongside the standard worker without needing an extra core.

Does Windmill need Redis or any other message broker?

No. Windmill uses PostgreSQL as both its database and its job queue, which is unusual and worth knowing because many third-party guides add a Redis service that the official compose file does not contain. PostgreSQL 14 or newer is the only datastore required, and adding Redis gains you nothing but a wasted container.