Windmill Review: Open-Source Workflow Automation with AI Flows
What it is: Windmill is an open-source code-first workflow platform — write Python, TypeScript, Go, or SQL scripts and Windmill auto-generates a UI, schedule, and REST endpoint. AI flows let you orchestrate LLM steps inside the same execution graph as your normal scripts.
Quick answer: Windmill is an open-source (AGPL-3.0), self-hostable workflow platform where flows are real Python/TypeScript code instead of a visual DSL. Pick it over n8n when your team writes code and wants versioned, testable automation; pick it over Airflow when you need instant UIs, webhooks, and low-latency jobs rather than heavyweight batch DAGs. It self-hosts with a single docker compose up.
Why it matters for data work
Data teams keep needing one-off internal tools — backfills, manual data corrections, dashboards for ops. Windmill lets you ship them as scripts (no separate frontend project) and then layer AI steps on top, all source-controlled and self-hostable.
Is Windmill open source?
Yes — the core platform is AGPL-3.0 on GitHub, and you can self-host the whole thing (server, workers, UI) for free with no hard usage caps in the community edition. An Enterprise Edition adds SSO/SAML, audit logs, distributed worker groups, and dedicated support under a commercial license, and Windmill Labs also runs a paid cloud. The AGPL license matters only if you fork and resell Windmill itself; running your company's workflows on it is the normal, uncomplicated case.
Windmill vs n8n — which for data teams?
Windmill, in most data-team cases. n8n is node-and-wire automation aimed at connecting SaaS apps with minimal code — excellent for "when a form is submitted, post to Slack." Windmill treats code as the source of truth: every step is a Python or TypeScript function with typed arguments, versioned in git, unit-testable, and reviewable in a PR. If your automation involves pandas, SQL, or anything you'd rather diff than drag, Windmill fits better; if marketing ops needs to self-serve integrations, n8n and its AI nodes are the friendlier tool. Plenty of teams run both.
Windmill vs Airflow — is it an orchestrator?
They overlap less than they look. Airflow is built for scheduled batch DAGs over a data platform — heavyweight, battle-tested, with a huge operator ecosystem. Windmill is lighter and broader: sub-second job starts, webhook triggers, auto-generated UIs and approval steps, suitable for event-driven and human-in-the-loop work Airflow handles awkwardly. If your world is nightly warehouse pipelines with hundreds of interdependent tasks, keep Airflow (or Dagster). If it's operational scripts, internal tools, and API-triggered jobs, Windmill replaces both the cron box and the Flask app you were about to write.
What are Windmill's AI features?
Three distinct things: an AI code generator in the editor that writes and fixes flow steps from a prompt; native LLM steps you can drop into a flow (calling OpenAI, Anthropic, or any provider) with the output piped into downstream typed steps; and, because steps are just code, first-class use of any AI SDK inside your scripts. The practical pattern is the classifier-then-act flow — an LLM step labels or extracts, a Python/SQL step acts on the result, with retries, branching, and approval gates handled by the flow engine instead of your own glue code.
Can you self-host Windmill, and what does it take?
Yes, and it's genuinely easy by orchestrator standards: one Postgres database plus stateless server and worker containers. docker compose up runs everything on a laptop or single VM; scaling out is adding worker replicas (Helm charts exist for Kubernetes). Because workers are language-agnostic, one deployment runs your Python, TypeScript, Go, Bash, and SQL jobs side by side.
Install & configure
git clone https://github.com/windmill-labs/windmill && cd windmill
docker compose up
Browse to http://localhost:8000, write a Python script that takes typed arguments, save it. You instantly have a UI, schedulable cron, and webhook endpoint.
Example usage
Build a "data ticket triage" flow: webhook from Slack → LLM classifies the request → Python script runs the corresponding parameterized SQL fix → response posted back. Each step is normal code, not a YAML DSL.
Author & links
Author: Windmill Labs
Repo: github.com/windmill-labs/windmill
License: AGPL-3.0 (with Enterprise Edition for commercial)
← Back to Workflow Automation