Windmill
Windmill is an open-source developer infrastructure platform that allows you to quickly build production-grade multi-step automations and internal apps from minimal Python, TypeScript, Go, Bash, SQL scripts.
Features
- Multi-Language Support: Write scripts in Python, TypeScript, Go, Bash, SQL
- Auto-Generated UIs: Automatic UI generation from scripts
- Visual Workflow Builder: Build complex workflows with code execution
- Scheduling: Built-in cron-based scheduling
- Webhooks: Trigger scripts via HTTP webhooks
- Version Control: Built-in Git sync and audit logs
- Multi-Tenant: Workspace-based multi-tenancy
Quick Start
-
Copy
.env.exampleto.env:cp .env.example .env -
IMPORTANT: Edit
.envand change:WINDMILL_SUPERADMIN_EMAIL- Your admin emailWINDMILL_SUPERADMIN_PASSWORD- A strong passwordPOSTGRES_PASSWORD- A strong database password
-
Start Windmill:
docker compose up -d -
Wait for services to be ready
-
Access Windmill UI at
http://localhost:8000 -
Log in with your configured superadmin credentials
Default Configuration
| Service | Port | Description |
|---|---|---|
| Windmill Server | 8000 | Web UI and API |
| PostgreSQL | 5432 | Database (internal) |
| Windmill LSP | 3001 | Language Server (dev profile) |
Default Credentials (Change these!):
- Email:
admin@windmill.dev - Password:
changeme
Environment Variables
Key environment variables (see .env.example for full list):
| Variable | Description | Default |
|---|---|---|
WINDMILL_VERSION |
Windmill image version | main |
WINDMILL_PORT_OVERRIDE |
Host port for UI | 8000 |
WINDMILL_BASE_URL |
Base URL | http://localhost:8000 |
WINDMILL_SUPERADMIN_EMAIL |
Superadmin email | admin@windmill.dev |
WINDMILL_SUPERADMIN_PASSWORD |
Superadmin password | Must change! |
POSTGRES_PASSWORD |
Database password | changeme |
WINDMILL_NUM_WORKERS |
Number of workers | 3 |
WINDMILL_LICENSE_KEY |
Enterprise license | (empty) |
TZ |
Timezone | UTC |
Resource Requirements
Minimum:
- CPU: 1 core
- RAM: 1GB
- Disk: 5GB
Recommended:
- CPU: 3+ cores (1 for server, 2+ for workers)
- RAM: 3GB+
- Disk: 20GB+
Volumes
postgres_data: PostgreSQL database datawindmill_server_data: Windmill server datawindmill_worker_data: Worker execution data
Using Windmill
Creating a Script
-
Access the UI at
http://localhost:8000 -
Create a workspace or use default
-
Go to "Scripts" and click "New Script"
-
Write your script (Python example):
def main(name: str = "world"): return f"Hello {name}!" -
Save and run
Creating a Workflow
- Go to "Flows" and click "New Flow"
- Use the visual editor to add steps
- Each step can be a script, flow, or approval
- Configure inputs and outputs between steps
- Deploy and run
Using the API
Example: List scripts
curl -H "Authorization: Bearer YOUR_TOKEN" \
http://localhost:8000/api/w/workspace/scripts/list
Scheduling
- Open any script or flow
- Click "Schedule"
- Set cron expression or interval
- Save
Profiles
dev: Include LSP service for code intelligence (port 3001)
To enable dev profile:
docker compose --profile dev up -d
Security Considerations
- Change Default Credentials: Always change superadmin credentials
- Database Password: Use a strong PostgreSQL password
- Docker Socket: Mounting Docker socket grants container control
- SSL/TLS: Use reverse proxy with HTTPS in production
- License Key: Keep enterprise license key secure if using
Upgrading
To upgrade Windmill:
-
Update
WINDMILL_VERSIONin.env -
Pull and restart:
docker compose pull docker compose up -d -
Check logs:
docker compose logs -f windmill-server
Troubleshooting
Service won't start:
- Check logs:
docker compose logs windmill-server - Verify database:
docker compose ps postgres - Ensure Docker socket is accessible
Cannot login:
- Verify credentials in
.env - Check server logs for authentication errors
- Try resetting password via CLI
Workers not processing:
- Check worker logs:
docker compose logs windmill-worker - Verify database connection
- Increase
WINDMILL_NUM_WORKERSif needed
References
- Official Website: https://windmill.dev
- Documentation: https://docs.windmill.dev
- GitHub: https://github.com/windmill-labs/windmill
- Community: https://discord.gg/V7PM2YHsPB
License
Windmill is licensed under AGPLv3. See LICENSE for more information.