Windmill is an open-source workflow engine and developer platform written in Rust: individual scripts in TypeScript, Python, Go, SQL, Bash and more become reusable runnables, which compose into flows through a low-code builder or YAML, and into internal apps on top.
Self-hosted or cloud: a Rust engine queues jobs to a worker fleet routed by tags, scripts run in their language runtimes or Docker images, and step results pass as JSON with S3, Azure Blob, or GCS integration for large objects. Cron, webhooks, and HTTP routes trigger runs. Enterprise starts at $120 a month; cloud is priced per seat plus compute.
How Windmill answers the questions Workflow Orchestration turns on.
| How it works | |
| Authoring model | Polyglot scripts (TypeScript, Python, Go, Bash, SQL, Java and more) composed into flows by a low-code builder or YAML |
| Unit of work | A script (one runnable in one language) chained into flows as steps through a drag-and-drop builder over the OpenFlow spec, which is Apache-2.0 while the engine running it is AGPL; apps are the third kind of runnable |
| Passing data | A step's result becomes the next step's input as JSON, with states and custom flow states holding small transient payloads and a shared directory passing files between steps on one worker, ephemeral to a single run. The docs are blunt that none of it is a general-purpose persistence layer, large objects belong in the native S3, Azure Blob or GCS integration |
| Triggers | Cron schedules, an auto-generated webhook on every script and flow, custom HTTP routes, WebSocket, MQTT and Postgres; the pricing page puts Kafka, NATS, SQS, GCP Pub/Sub and Azure Event Grid behind Enterprise, and caps email triggers at 100 a day on the free plan |
| Delivery guarantee | A worker claims a job from the queue and marks it running before executing |
| Caching and reruns | A TTL in seconds set on a script, a whole flow, a single flow step or an app inline script; a rerun with identical inputs inside the window returns the stored result rather than executing |
| Running it | |
| Where tasks run | A fleet of workers pulling one job at a time from a queue, routed by worker-group tags |
| Connections | |
| Task languages | The widest list here: TypeScript on Deno, Bun or Node, Python, Go, PHP, Rust, C#, Java, Ruby, R, Bash, PowerShell, Nu, Ansible, dbt, REST and GraphQL, and SQL against Postgres, MySQL, MS SQL, BigQuery and Snowflake; a Docker script covers anything left |
| Connectors | 200+ resource types on the Hub, a resource being a JSON object of connection details validated by a JSON-Schema type, so the integration is a credential shape rather than code; verified types sync into new instances and anything missing is a custom type |
| Cost | |
| Billing unit | Seats and compute together: $20 a developer, $10 an operator, $50 a month per standard worker, Enterprise starting at $120 a month. The free tier runs unlimited executions inside hard caps instead: 3 workspaces, 50 users, 10 of them with SSO, 10 GiB of object storage and 30 days of run history |
vs Windmill: Open source (permissive) · Free · Operational complexity: High · Python, TypeScript
vs Windmill: Open source (permissive) · Self-hosted · Free · Operational complexity: High · Java
vs Windmill: Open source (permissive) · Self-hosted · Free · Operational complexity: High · Go