Windmill
Turn scripts into workflows, UIs, and scheduled jobs. Open-source alternative to Retool and Temporal.
Why consider Windmill?
Windmill is an open-source developer platform that converts Python, TypeScript, Go, and SQL scripts into auto-generated web UIs, complex workflows, and scheduled jobs.
Learn Windmill by building
Practical setup notes, real use cases, and copy-ready examples in one focused guide.
In this guide10 sections
What is Windmill?
Windmill is an open-source, high-performance developer platform built with Rust, Svelte, and PostgreSQL that turns scripts (written in Python, TypeScript/Deno/Bun, Go, Bash, Rust, and SQL) into internal web UIs, background workers, scheduled cron jobs, and distributed multi-step workflows.
It acts as an open-source alternative to proprietary internal tool builders like Retool and workflow orchestrators like Temporal, Retool Workflows, and Airplane. Windmill infers JSON schemas directly from script arguments, automatically generating interactive web forms and providing a drag-and-drop app builder with granular permission management.
Who Is It For?
- Backend & DevOps Engineers: Converting operational maintenance scripts into secure, self-service web apps with audit logging for non-technical team members.
- Data Engineering Teams: Orchestrating complex ETL pipelines and database transformations across Python, SQL, and external APIs.
- Platform Teams: Building customized internal administrative portals without writing boilerplate frontend code or API plumbing.
Key Features
- Multi-language script execution: Native runtime support for Python, TypeScript (Bun/Deno), Go, Bash, SQL, and Rust.
- Automatic UI generation: Function signatures and type hints automatically generate input forms and validation logic.
- Visual low-code UI builder: Drag-and-drop buttons, data tables, modals, and charts bound directly to runnable backend scripts.
- Distributed workflow orchestration: Branching logic, parallel loops, approval gates, error retry policies, and suspend-resume hooks.
- Enterprise secret management: Secure credential vaulting with role-based access control and workspace isolation.
Deploying Windmill with Docker Compose
version: '3.7'services: db: image: postgres:15-alpine container_name: windmill_db restart: unless-stopped volumes: - ./db_data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=secure_windmill_db_pass - POSTGRES_USER=windmill - POSTGRES_DB=windmill windmill_server: image: ghcr.io/windmill-labs/windmill:latest container_name: windmill_server restart: unless-stopped ports: - "8000:8000" environment: - DATABASE_URL=postgres://windmill:secure_windmill_db_pass@db:5432/windmill - MODE=server depends_on: - db windmill_worker: image: ghcr.io/windmill-labs/windmill:latest container_name: windmill_worker restart: unless-stopped environment: - DATABASE_URL=postgres://windmill:secure_windmill_db_pass@db:5432/windmill - MODE=worker - WORKER_GROUP=default depends_on: - dbStart the stack:
docker compose up -dOpen http://localhost:8000 in your browser, log in with default credentials admin@windmill.dev / changeme, and immediately set a secure password.
Practical Use Cases
1. Self-Service Customer Refund Portal
A backend engineer writes a 20-line Python script connecting to Stripe API; Windmill auto-generates a web form that customer support agents use to issue refunds with mandatory supervisor approval steps.
2. Multi-Step Data Ingestion Flow
A data team builds an automated pipeline that queries PostgreSQL, runs AI text embedding with a Python script, and uploads structured vectors into Qdrant every night at 2:00 AM.
3. Incident Remediation Playbooks
A DevOps team builds emergency playbooks (e.g. "Restart Kubernetes Ingress", "Flush Redis Cache") with approval steps and one-click execution from mobile browsers.
Troubleshooting and Limitations
- Worker Group Scaling: Heavy data processing jobs should be assigned to dedicated worker groups (
WORKER_GROUP=native) to prevent blocking interactive UI script executions. - Python / Node Package Caching: Windmill caches PyPI and NPM dependencies automatically; configure persistent worker volume mounts to avoid re-downloading packages across container restarts.
Official Resources
- Official Website: https://www.windmill.dev
- GitHub Repository: https://github.com/windmill-labs/windmill
- Documentation: https://www.windmill.dev/docs
Related tools
More options with a similar category or technology profile.
diskus
Minimal, fast alternative to du -sh written in Rust using multi-threaded directory traversal.
peco
Simplistic interactive filtering tool for Unix pipelines, process lists, and file trees.
Dapr CLI
Command-line tool for managing Dapr distributed application runtime environments and sidecars.
Freeze
Generate beautiful image screenshots and SVGs of code snippets and terminal outputs.