Linux

Where Does Self-Hosted Windmill Store Data?

Windmill keeps its entire state in Postgres. The server and workers are stateless; the db_data volume plus .env is the backup.

Last updated

Windmill concentrates everything in one database. Workspaces, scripts, flows, schedules, job history, and the queue all live in Postgres, typically a db_data volume beside the compose file. The server, workers, and LSP containers hold no durable state: pull a new image and they resume against the same database.

Connection details come from .env (DATABASE_URL plus secrets), which is the second backup item. Upgrades are pull and restart with automatic migrations, except across Postgres majors, where the official image stops rather than risk the cluster. Dump before major moves. Workspace object storage for volumes-based file state sits outside this only when you configure external S3.

Where Windmill stores this, by platform

Linux
db_data (Postgres volume)

Workspaces, scripts, flows, schedules, history, and queue. Dump on schedule. Major Postgres upgrades need dump and restore of the whole cluster; same-major image bumps are safe in place.

Linux
.env (compose dir)

DATABASE_URL, secrets, and service wiring beside docker-compose.yml and Caddyfile. Keep with the database dump. Default credentials ([email protected] / changeme) must be replaced immediately.

Frequently asked questions

how do i back up self-hosted windmill

Dump the Postgres database and save .env (DATABASE_URL, secrets) with it. Server, workers, and LSP containers are stateless and rebuild from the image. Restore means a fresh stack pointed at the dump.

can i upgrade the windmill postgres version in place

Same major version is safe; the volume persists and migrations run on startup. Major jumps (for example 16 to 18) make the container refuse to start until you dump and restore the whole cluster. Pin the image or plan the migration, never force it.

Notice an outdated path? Let us know.