Favicon of Windmill

Windmill

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.

LicenseOpen source (copyleft)· AGPL-3.0
DeploymentSelf-hostedManaged
PricingFreeSubscription
Operational complexityMedium
WorkloadBatch
LanguageRust

Use it when

  • The unit of work is a script, not a DAG: TypeScript, Python, Go, SQL, Bash, and more become runnables with generated UIs, composed into flows.
  • Many small, latency-sensitive steps dominate; the Rust engine's instant starts are the pitch against the Python-framework orchestrators.
  • Internal tools and pipelines should share a platform; the app builder sits on the same runnables.
  • Webhooks and HTTP routes should exist automatically for every script and flow.

Think twice when

  • Free must mean unlimited: the self-hosted free tier caps workspaces, users, and SSO, and event triggers like Kafka and SQS sit behind Enterprise.
  • AGPL-3.0 on the engine concerns your legal team.
  • You want a data orchestrator's vocabulary: assets, lineage, and dbt-centric workflows; Dagster is built around those.

How it runs

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.

Details

Compare

How Windmill answers the questions Workflow Orchestration turns on.

Workflow Orchestration
How it works
Authoring modelPolyglot scripts (TypeScript, Python, Go, Bash, SQL, Java and more) composed into flows by a low-code builder or YAML
Unit of workA 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 dataA 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
TriggersCron 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 guaranteeA worker claims a job from the queue and marks it running before executing
Caching and rerunsA 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 runA fleet of workers pulling one job at a time from a queue, routed by worker-group tags
Connections
Task languagesThe 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
Connectors200+ 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 unitSeats 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

Share:

Alternatives to Windmill

Favicon

 

  
  
Favicon

 

  
  
Favicon