docker.recipes

Windmill

intermediate

Developer platform for scripts and workflows.

Overview

Windmill is a modern developer platform that transforms scripts and code into production-ready workflows with automatically generated UIs, approval systems, and enterprise-grade orchestration. Born from the need to bridge the gap between quick scripts and robust automation platforms, Windmill supports multiple programming languages including Python, TypeScript, Go, Bash, and SQL, making it accessible to diverse development teams. Unlike traditional workflow engines that require proprietary DSLs, Windmill lets developers write in familiar languages while providing enterprise features like audit trails, scheduling, and human-in-the-loop approvals. This stack combines Windmill with PostgreSQL 16 to create a complete automation platform where PostgreSQL serves as both the execution engine for SQL scripts and the persistent storage layer for workflow definitions, execution history, and user data. The database handles Windmill's complex scheduling requirements, stores detailed execution logs with full audit capabilities, and manages the platform's robust permission system that controls script access and workflow approvals. Development teams, DevOps engineers, and data analysts who need to quickly deploy internal tools, automate business processes, or create approval workflows will find this combination particularly valuable. The stack excels in environments where multiple stakeholders need to interact with automated processes through generated UIs, where compliance requires detailed audit trails, and where scripts need to evolve from individual tools into organization-wide workflows with proper governance.

Key Features

  • Multi-language script execution with Python, TypeScript, Go, Bash, and SQL support in a single platform
  • Automatic UI generation from script parameters with type inference and validation
  • Human-in-the-loop workflows with customizable approval processes and notification systems
  • Git synchronization for version control of scripts, flows, and resources with branch-based deployments
  • Advanced scheduling engine with cron expressions, event triggers, and dependency management
  • Real-time execution monitoring with detailed logs, performance metrics, and error tracking
  • Role-based access control with fine-grained permissions for scripts, resources, and workflow execution
  • PostgreSQL integration for complex data operations, analytics queries, and persistent workflow state management

Common Use Cases

  • 1Internal tool development where business users need UI access to developer-written scripts
  • 2DevOps automation requiring approval workflows for infrastructure changes and deployments
  • 3Data pipeline orchestration with mixed SQL queries, Python transformations, and API integrations
  • 4Business process automation where non-technical stakeholders trigger and monitor automated workflows
  • 5Compliance-heavy environments requiring detailed audit trails and approval processes for system changes
  • 6Rapid prototyping of workflow automation before migrating to enterprise platforms
  • 7Cross-team script sharing with governance, documentation, and controlled access to organizational tools

Prerequisites

  • Minimum 2GB RAM recommended for Windmill execution environments and PostgreSQL operations
  • Port 8000 available for Windmill web interface access
  • Basic understanding of at least one supported language (Python, TypeScript, Go, Bash, or SQL)
  • Familiarity with workflow concepts like triggers, scheduling, and approval processes
  • PostgreSQL knowledge for database maintenance, backup strategies, and performance tuning
  • Git repository access if planning to use version control synchronization features

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 windmill:
3 image: ghcr.io/windmill-labs/windmill:latest
4 container_name: windmill
5 restart: unless-stopped
6 environment:
7 DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}
8 BASE_URL: http://localhost:8000
9 ports:
10 - "8000:8000"
11 depends_on:
12 - postgres
13 networks:
14 - windmill
15
16 postgres:
17 image: postgres:16-alpine
18 container_name: windmill-postgres
19 environment:
20 POSTGRES_DB: ${DB_NAME}
21 POSTGRES_USER: ${DB_USER}
22 POSTGRES_PASSWORD: ${DB_PASSWORD}
23 volumes:
24 - postgres_data:/var/lib/postgresql/data
25 networks:
26 - windmill
27
28volumes:
29 postgres_data:
30
31networks:
32 windmill:
33 driver: bridge

.env Template

.env
1DB_NAME=windmill
2DB_USER=windmill
3DB_PASSWORD=changeme

Usage Notes

  1. 1Docs: https://www.windmill.dev/docs/
  2. 2Web UI at http://localhost:8000, default admin: admin@windmill.dev / changeme
  3. 3Write scripts in Python, TypeScript, Go, Bash, SQL
  4. 4Auto-generate UIs from script parameters
  5. 5Approval flows and human-in-the-loop workflows
  6. 6Git sync for version control of scripts and flows

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

windmill
windmill:
  image: ghcr.io/windmill-labs/windmill:latest
  container_name: windmill
  restart: unless-stopped
  environment:
    DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}
    BASE_URL: http://localhost:8000
  ports:
    - "8000:8000"
  depends_on:
    - postgres
  networks:
    - windmill
postgres
postgres:
  image: postgres:16-alpine
  container_name: windmill-postgres
  environment:
    POSTGRES_DB: ${DB_NAME}
    POSTGRES_USER: ${DB_USER}
    POSTGRES_PASSWORD: ${DB_PASSWORD}
  volumes:
    - postgres_data:/var/lib/postgresql/data
  networks:
    - windmill

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 windmill:
5 image: ghcr.io/windmill-labs/windmill:latest
6 container_name: windmill
7 restart: unless-stopped
8 environment:
9 DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}
10 BASE_URL: http://localhost:8000
11 ports:
12 - "8000:8000"
13 depends_on:
14 - postgres
15 networks:
16 - windmill
17
18 postgres:
19 image: postgres:16-alpine
20 container_name: windmill-postgres
21 environment:
22 POSTGRES_DB: ${DB_NAME}
23 POSTGRES_USER: ${DB_USER}
24 POSTGRES_PASSWORD: ${DB_PASSWORD}
25 volumes:
26 - postgres_data:/var/lib/postgresql/data
27 networks:
28 - windmill
29
30volumes:
31 postgres_data:
32
33networks:
34 windmill:
35 driver: bridge
36EOF
37
38# 2. Create the .env file
39cat > .env << 'EOF'
40DB_NAME=windmill
41DB_USER=windmill
42DB_PASSWORD=changeme
43EOF
44
45# 3. Start the services
46docker compose up -d
47
48# 4. View logs
49docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/windmill/run | bash

Troubleshooting

  • Windmill container fails to start with database connection error: Verify PostgreSQL container is fully initialized before Windmill starts, check DATABASE_URL format and credentials
  • Scripts fail with import errors or package not found: Windmill requires explicit dependency declarations in script metadata, install packages through the Windmill UI or requirements specification
  • Generated UI shows incorrect parameter types: Review script function signatures and type hints, Windmill relies on proper type annotations for UI generation
  • Workflow executions appear stuck in pending state: Check Windmill worker processes and resource allocation, verify PostgreSQL connection pool isn't exhausted
  • Git sync fails with authentication errors: Ensure proper SSH keys or personal access tokens are configured in Windmill's Git settings
  • PostgreSQL container runs out of disk space: Monitor postgres_data volume usage, implement log rotation and consider PostgreSQL maintenance tasks for large execution history

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space