Windmill
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:latest4 container_name: windmill5 restart: unless-stopped6 environment: 7 DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}8 BASE_URL: http://localhost:80009 ports: 10 - "8000:8000"11 depends_on: 12 - postgres13 networks: 14 - windmill1516 postgres: 17 image: postgres:16-alpine18 container_name: windmill-postgres19 environment: 20 POSTGRES_DB: ${DB_NAME}21 POSTGRES_USER: ${DB_USER}22 POSTGRES_PASSWORD: ${DB_PASSWORD}23 volumes: 24 - postgres_data:/var/lib/postgresql/data25 networks: 26 - windmill2728volumes: 29 postgres_data: 3031networks: 32 windmill: 33 driver: bridge.env Template
.env
1DB_NAME=windmill2DB_USER=windmill3DB_PASSWORD=changemeUsage Notes
- 1Docs: https://www.windmill.dev/docs/
- 2Web UI at http://localhost:8000, default admin: admin@windmill.dev / changeme
- 3Write scripts in Python, TypeScript, Go, Bash, SQL
- 4Auto-generate UIs from script parameters
- 5Approval flows and human-in-the-loop workflows
- 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 file2cat > docker-compose.yml << 'EOF'3services:4 windmill:5 image: ghcr.io/windmill-labs/windmill:latest6 container_name: windmill7 restart: unless-stopped8 environment:9 DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}10 BASE_URL: http://localhost:800011 ports:12 - "8000:8000"13 depends_on:14 - postgres15 networks:16 - windmill1718 postgres:19 image: postgres:16-alpine20 container_name: windmill-postgres21 environment:22 POSTGRES_DB: ${DB_NAME}23 POSTGRES_USER: ${DB_USER}24 POSTGRES_PASSWORD: ${DB_PASSWORD}25 volumes:26 - postgres_data:/var/lib/postgresql/data27 networks:28 - windmill2930volumes:31 postgres_data:3233networks:34 windmill:35 driver: bridge36EOF3738# 2. Create the .env file39cat > .env << 'EOF'40DB_NAME=windmill41DB_USER=windmill42DB_PASSWORD=changeme43EOF4445# 3. Start the services46docker compose up -d4748# 4. View logs49docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/windmill/run | bashTroubleshooting
- 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
Components
windmillpostgres
Tags
#windmill#scripts#workflows#automation
Category
Message Queues & BrokersAd Space
Shortcuts: C CopyF FavoriteD Download