Files
STaurtomation/docs/research/notes/windmill.md
T

30 KiB

Ported from earlier research (2026-10-29) and sanitized for clean-room use: source-code-derived details removed. Not legal advice.

Windmill (windmill-labs/windmill) as a self-hosted n8n alternative, as of late October 2026

Research date: 2026-10-29. "Verified" means read directly from a primary source on that date: the windmill.dev pricing or docs page, or the GitHub repo and API. Vendor marketing claims are labeled as vendor claims. Third-party aggregators are labeled as such.

1. License: exact terms, Enterprise Edition (EE) scope, changes from 2023 to 2026

Takeaway

Windmill has an open-core, split license. The source in backend/ and frontend/ is AGPLv3. API clients and the OpenAPI/OpenFlow spec are Apache-2.0. Code behind the enterprise compile flag, and frontend code that needs a positive license check, is proprietary. The prebuilt "Community Edition" (CE) Docker images are not pure AGPL: they contain proprietary, non-public code under a freeware-style grant. You may use them free internally, but you may not sell, resell, modify, wrap, or offer them as a managed service. The proprietary carve-out first appeared in September 2023. The CE-binary terms were spelled out in March 2025. White-labeling and embedding restrictions were added to the LICENSE file in October 2026.

Cited Findings

  • LICENSE (verbatim): "Source code in this repository is variously licensed under the Apache License Version 2.0 (see file ./LICENSE-APACHE), or the AGPLv3 License (see file ./LICENSE-AGPL) and a proprietary license for certain enterprise features." The repo root contains LICENSE, LICENSE-AGPL, LICENSE-APACHE, and NOTICE. GitHub's SPDX field reports "NOASSERTION". — LICENSE file, windmill-labs/windmill; verified via the GitHub API on 2026-10-29.
  • "The files under backend/ are AGPLv3 Licensed, except any snippets of code under the compile flag 'enterprise'. Those snippets and files are under a proprietary and commercial license. The files under frontend/ are AGPLv3 Licensed, except any snippets of code that require a positive license check to be activated... Private and public forks MUST not include any of the above proprietary and commercial code." — LICENSE file, windmill-labs/windmill
  • Apache-2.0 covers python-client/, deno-client/, go-client/, powershell-client/, and "the openapi files, including the OpenFlow spec". — LICENSE file, windmill-labs/windmill
  • "The binary compilable from source code in this repository without the 'enterprise' feature flag is open-source under the AGPLv3 License." — LICENSE file, windmill-labs/windmill
  • On the CE images: "The 'Community Edition' of Windmill available in the docker images hosted under ghcr.io/windmill-labs/windmill and the github binary releases contains the files under the AGPLv3 and Apache 2 sources but also includes proprietary and non-public code and features which are not open source... Windmill Labs, Inc. grants a right to use all the features of the 'Community Edition' for free without restrictions other than the limits and quotas set in the software and a right to distribute the community edition as is but not to sell, resell, serve as a managed service, modify or wrap under any form without an explicit agreement." — LICENSE file, windmill-labs/windmill
  • "To use Windmill 'Community Edition' as is internally in your organization, or to use its APIs as is, you do NOT need a commercial license." Re-exposing Windmill parts to your own users (white-labeling) needs a commercial license, except for iframed public apps. So does building a commercially sold feature on CE or embedding CE in a distributed product. — LICENSE file, windmill-labs/windmill
  • EE is unlocked by a LICENSE_KEY entered in instance settings. One key can be used on multiple instances, and dev instances should set the "Non-prod instance" flag. The Helm chart uses a different EE image (windmill-ee) when enterprise.enabled: true. — Self-host docs; README
  • License history, taken from the commit history of the LICENSE file (verified via the GitHub API):
    • 2022-05-05: first commit. Backend and frontend were AGPL, and python-client/ and community/ were Apache-2.0.
    • 2023-03-01: the Apache scope was extended to the deno and go clients and the OpenAPI/OpenFlow spec.
    • 2023-09-11: this is the key change. The proprietary carve-out was added for enterprise-flagged backend code and license-checked frontend code, together with the clause "Private and public forks MUST not include" that code.
    • 2024-04-18: the PowerShell client was added to the Apache scope.
    • 2025-03-07: the header now names "a proprietary license for certain enterprise features". The explicit CE-binary terms were added (proprietary, non-public code, no reselling, managed service, modifying, or wrapping), along with the AGPL statement for binaries built without the flag. The earlier sentence offering "tools to clean the codebase from those snippets upon demand" was removed.
    • 2026-10-25: the white-labeling and embedding commercial-license paragraph and the "internal use does NOT need a commercial license" paragraph were added to LICENSE. The commit message reads "trim env vars and license" from the README, which suggests the text moved from the README into LICENSE. — LICENSE commit history
  • A third-party view: "the AGPL license is stricter than n8n's fair-code: any modifications served over a network must be open-sourced." — automationatlas.io
  • Windmill's own comparison page calls Windmill "AGPLv3 (true OSS)" and n8n's Sustainable Use License "source-available, not OSS". — windmill.dev/compare/n8n (vendor claim)

Inferences

  • The "true OSS" marketing applies only to a self-built binary without the enterprise flag. The official CE images, which are what most self-hosters run, include proprietary code and carry no-modify and no-managed-service terms. That puts their practical freedom closer to "free-to-use freeware on an AGPL core". For internal use in place of n8n this barely matters. It matters a lot for MSPs and SaaS embedding: offering Windmill CE to clients as a hosted service needs a commercial agreement, much like n8n's SUL.
  • I found no relicensing away from AGPL, unlike the moves of HashiCorp or n8n. The changes were additive carve-outs that tightened terms on the binary and the proprietary code.
  • Which CE limits a pure AGPL build enforces, compared with the official CE image, is not documented. Per the LICENSE text, a self-built AGPL binary would be legally modifiable, and the LICENSE says enterprise-flagged code is proprietary and must not be included in forks.

Gaps

  • I did not verify whether the AGPL build without the enterprise flag has the same quotas as the CE image (50 users, 10 SSO users, 3 workspaces), or whether those quotas can be legally patched out under AGPL.
  • I found no public EE license text or EULA.

2. Plans and pricing: CE vs. Enterprise/Cloud, exact CE limits

Takeaway

The self-hosted CE is $0 with unlimited executions. Its limits are 50 users max, 10 SSO users, 3 workspaces, 4 groups, git sync for up to 2 users, job retention of 30 days or less, 100 email triggers per day, and 10 GiB of object storage. Enterprise starts at $120/mo. It is priced at $20/mo per builder seat, $10/mo per non-builder (half a seat), and about $50/mo per compute unit (CU = 2 worker-GB-month). Nonprofits and universities get 40% off. A "Pro" variant exists for very small companies and seed-stage startups.

Cited Findings

  • The pricing page lists "Free and Open-source": $0/mo, self-hosted, unlimited executions, community support on Discord. "Enterprise": "from $120/mo", with Pro, Nonprofit, and Enterprise variants. — Pricing (verified 2026-10-29)

  • Unit prices: Builder seat $20/mo, where a builder writes code, builds flows or apps, or is a workspace admin. Non-builder or external JWT user: $10/mo (half a seat). One compute unit = 2 worker-GB-month. A 2 GB worker is 1 CU, self-hosted workers above 2 GB count as 2 CU, and native workers count as 1 CU. Totals round up to a whole CU. The page's worked example: 2 standard workers ($100) + 8 native subworkers ($50) + 1 builder ($20) = $170/mo, which implies about $50 per CU. — Pricing

  • Guests: the first 100 distinct guest emails per 30 days are free. Beyond that, 4 guests count as 1 seat. Guests are not available on the cloud Free and Team plans. — Pricing

  • Pro tier: self-hosted only, for individuals, businesses under 10 employees and $250k revenue, and seed-stage startups. — Pricing

  • Nonprofits and universities get the regular Enterprise plan at a 40% discount. — Pricing

  • CE limits from the pricing table:

    Limit CE value
    Workspaces 3
    Users 50 max
    Groups 4 max
    SSO users 10
    Git sync up to 2 users
    Job run retention 30 days or less
    Email triggers 100/day
    Object storage 10 GiB
    Workspace forks and dev workspaces count toward the 3-workspace limit

    — Pricing

  • A cloud "Team" plan is mentioned as billed on actual usage, but the pricing page did not give its price. A third party reports Windmill Cloud Team at "roughly $10 per user per month with included compute credits" and Enterprise as "per-worker, custom-priced". That conflicts with the vendor page's $20 builder seat and may be stale. — automationatlas.io vs. Pricing

  • The self-host docs state no CE limit on worker count or native workers. — Self-host docs

Inferences

  • A small self-hosted EE estimate, based on the pricing formula: 5 builders ($100) + 4 workers at 2 GB (4 CU, about $200) comes to about $300/mo. The real minimum is "from $120/mo". These are list prices; actual quotes may differ.
  • For small teams, the binding CE limits are likely git sync (2 users), job retention (30 days), and audit logs (none). The 50-user and 10-SSO-user caps also matter for SSO-based setups.

Gaps

  • The exact cloud Team price and its limits did not render on the pricing page.
  • I could not date when the 50-user cap and 4-group cap were introduced. I recall CE once had more permissive user limits, but I did not verify this; treat it as unconfirmed.
  • I did not find a published per-CU price; $50 is derived from the worked example.

3. Feature gating (CE vs. EE)

Takeaway

CE includes RBAC basics: users, admins, developers, operators, folders, up to 4 groups, overriding default roles, and workspace secret encryption. It also has unlimited executions and horizontal worker scaling. EE gates most n8n-style enterprise items: SAML, SCIM, custom OIDC, uncapped SSO, audit logs, unlimited retention, external secret managers, git sync beyond 2 users, UI deployment between workspaces (staging to prod), Prometheus/OTel, autoscaling, worker group management UI, and multiplayer editing. Log streaming as such is not listed. The closest EE items are service logs to S3, OpenTelemetry, and an instance events webhook.

Cited Findings

Free vs. Enterprise, from the pricing page (Pricing, verified 2026-10-29):

Area CE EE
SSO users 10 uncapped, requires seats
SAML and SCIM with group sync No Yes
Custom OAuth / custom OIDC No / No Yes
Custom workspace roles override default roles only full
Service accounts No Yes
Users / groups / workspaces 50 / 4 / 3 unlimited
Audit logs No unlimited
Job run retention 30 days or less unlimited
Schedule and workspace error handlers No Yes
Queue metrics, Prometheus, OpenTelemetry No Yes
Git sync up to 2 users Yes
Deploy to staging/prod web UI No Yes
"Run on behalf of" across workspaces No Yes
Workspace forks / dev workspaces count toward the 3-workspace limit Yes
External secret backends (Vault, Azure KV, AWS SM) No Yes
Workspace secret custom encryption Yes Yes
Agent workers, SSH execution, Windows workers No Yes
Autoscaling No Yes
Worker group management UI No Yes
Concurrency limits, critical alerts, dedicated workers No Yes
Kafka, NATS, SQS, GCP Pub/Sub, Azure triggers No Yes
Email triggers 100/day unlimited
Object storage 10 GiB unlimited
Support and SOC 2 Type II report community (Discord), no report 24/7, 3-hour response, dedicated Slack channel, SOC 2 report

Other gating sources:

  • Service logs on S3, OpenTelemetry tracing, and the instance events webhook are Enterprise-only. Log streaming and HA are not explicitly listed on the pricing page. — Pricing
  • Multiplayer (real-time collaborative editing) is available only on Cloud and self-hosted EE. — Self-host docs
  • The server can be replicated for HA and workers replicated for throughput. Autoscaling is listed as an EE feature. — Self-host docs
  • Windmill's comparison page also lists dedicated workers, external secret backends, and "extended audit retention" as EE-only. It says n8n gates source control and environments, SSO, custom roles, external secrets, audit logging, and log streaming behind Enterprise. — windmill.dev/compare/n8n (vendor claim)
  • AI: only Anthropic Workload Identity Federation and AWS Bedrock OIDC role assumption are marked EE-only on the AI docs page. — AI docs

Inferences

  • Versioning and history: scripts and flows have built-in version hashes and deployment history, which I believe is in CE. I did not verify this against a docs page in this session, so treat it as unconfirmed. Git sync, which is the git-backed version control, is the gated part.
  • HA does not appear to be license-gated. Server and worker replicas run in CE because state lives in Postgres. Autoscaling and the worker-group UI are what EE adds. I base this on the self-host docs; I found no explicit "HA is CE" statement.
  • Compared with n8n CE, Windmill CE is more generous on multi-user and RBAC: real users, folders, and 4 groups for free. It is roughly equal on SSO, where Windmill CE has 10 SSO users and n8n gates SSO entirely. It is similarly restrictive on audit logs, external secrets, and environments.

Gaps

  • I did not fetch the plans_details docs page (it rendered empty), so finer CE/EE details could not be cross-checked, such as LDAP support and the granularity of folder permissions.
  • LDAP is not mentioned anywhere I looked.

4. Product model, triggers, integrations, AI

Takeaway

Windmill is a developer-first platform. Scripts are written in many languages and become endpoints, UIs, and cron jobs. Flows are DAGs of scripts built in a visual editor, as YAML, or as code. Apps can be full-code React or Svelte, or built in a legacy low-code drag-and-drop editor. Its integration catalog is small next to n8n's 1,600+ nodes: the vendor counts 50+ resource types plus the Hub, and Windmill instead relies on importing any npm or PyPI package. AI features are extensive and work with your own provider keys.

Cited Findings

  • Script languages: "TypeScript, Python, Go, PHP, Bash, C#, SQL, Rust, Ruby and R, or any Docker image". — Docs intro

  • The README also lists GraphQL, PowerShell, Java, and Ansible. Bun is the default TypeScript runtime, with Deno and PHP on the windmill-full images, and Python uses uv. — README

  • Flows are an orchestrator for chaining scripts, with a visual editor, YAML, or workflows as code. Apps are full-code React or Svelte frontends plus a legacy low-code app editor. Data features include data tables, DuckDB, and DuckLake pipelines (alpha). — Docs intro

  • Target users: engineers who "write code, control what ships through review and promotion", and business teams who "build apps and automations with AI sessions". — Docs intro

  • Triggers: "Native triggers for HTTP, cron, Kafka, NATS, Postgres CDC, SQS, MQTT, SMTP and WebSocket". Every script also gets an HTTP endpoint and webhook URL. — windmill.dev/compare/n8n

  • The pricing page adds GCP Pub/Sub and Azure triggers. Kafka, NATS, SQS, GCP, and Azure triggers are EE-only, and email triggers are capped at 100/day in CE. — Pricing

  • Integrations: the vendor says "50+ pre-built resource types" plus a community Hub with no stated count, and that any npm or PyPI package can be imported. It counts n8n at "1,600+ pre-built nodes". — windmill.dev/compare/n8n

  • A third party says "100+ pre-built integrations and a Hub" and calls the catalog "smaller and closer to developer-leaning targets". — automationatlas.io

  • The vendor page says n8n is better for non-developers on a visual canvas and is "the fastest path when the automation is a chain of mainstream SaaS calls". — windmill.dev/compare/n8n

  • AI features:

    • AI chat: navigates the app, edits workspace items, and inspects database schemas.
    • AI sessions: full-page building with live preview and diff-and-deploy; enabled by default.
    • Script copilot (Cmd/Ctrl+L); code completion requires Mistral Codestral.
    • Flow copilot: builds flows step by step and suggests inputs, loop expressions, and branch predicates.
    • AI app builder.
    • AI form filling and cron generation.
    • AI agent steps with provider selection and reasoning effort.
    • MCP servers can be enabled in chat settings.

    — AI docs

  • Supported AI providers, all bring-your-own-key: OpenAI, Azure OpenAI, Azure AI Foundry, Anthropic, Gemini and Anthropic on Vertex, Mistral Codestral, DeepSeek, Groq, OpenRouter, Together AI, AWS Bedrock, and any OpenAI-compatible endpoint, including Ollama. — AI docs

  • The intro also lists AI agents, AI agent evals, MCP, and an AI sandbox. — Docs intro

Inferences

  • Windmill is not a drop-in no-code n8n replacement. It suits teams where most authors can write Python or TypeScript. AI sessions and copilots partly lower that barrier for business users.
  • The integration gap is real for SaaS-glue use cases. For each SaaS connector an n8n user relies on, a Windmill user typically writes or imports a small script using the vendor's SDK.

Gaps

  • I found no count of Hub scripts or integrations; hub.windmill.dev was not fetched.
  • The dedicated triggers docs page rendered empty, so the trigger list comes from the compare and pricing pages.

5. Tech stack and operations

Takeaway

Windmill has a Rust backend with stateless API servers and workers, a Svelte 5 frontend, and PostgreSQL as the only stateful dependency. Postgres also holds the job queue, so there is no Redis. It deploys with Docker Compose (Caddy, server, workers, native workers, LSP, and optional multiplayer) or the official Helm chart. The rule of thumb is about 1 worker per vCPU with 1-2 GB of RAM.

Cited Findings

  • Stack: Rust backend, PostgreSQL (which also holds the job queue), Svelte 5 frontend, and sandboxing via nsjail and PID namespace isolation. — README
  • "Postgres holds the entire state of Windmill." Redis is not mentioned. — Self-host docs
  • Compose ships postgres:18. A data volume from Postgres 16 or earlier blocks startup until you migrate or pin the version. Managed options: AWS Aurora, GCP Cloud SQL, Azure, Neon. — Self-host docs
  • Compose services: db, windmill_server, windmill_worker (example: 3 replicas, each limited to 1 CPU and 2048M), windmill_worker_native (example: 2 replicas, each limited to 0.1 CPU and 128M), lsp, multiplayer, and caddy. — Self-host docs
  • Helm: helm repo add windmill https://windmill-labs.github.io/windmill-helm-charts/. The chart is recommended for production. An S3-compatible global cache is recommended above 20 workers. — Self-host docs
  • Rule of thumb: "1 worker per 1vCPU and 1-2 GB of RAM". — Self-host docs
  • Performance, per the vendor: "~10ms cold starts", queue-based and horizontally scalable. — windmill.dev/compare/n8n
  • A third party reports "sub-100ms cold-start overhead for hot workers". Teams "often end up with one worker pool per language", and worker sizing "matters more" than on n8n. For 5 engineers, it estimates about half a day of setup and half a day per quarter of maintenance, the same as n8n. — automationatlas.io

Inferences

  • A minimal home or small-team instance needs Postgres, 1 server, and 1-2 workers. Based on the Compose resource limits, that probably fits in about 4 GB of RAM. I found no official minimum.
  • With no Redis, the stack is ops-simpler than n8n in queue mode. However, it has more containers than single-process n8n: LSP, native workers, and Caddy.

Gaps

  • I found no official minimum spec for the server and database, and no independent memory benchmarks.

6. Community health

Takeaway

The project is very active: 18.3k stars, about 1.1k forks, and about 170 contributors. Releases come out almost daily; v1.853.1 shipped on 2026-10-29, with about 30 releases in October 2026 alone. The company is small and lightly funded: YC S22, Paris, 7 employees per YC, and a solo founder (Ruben Fiszel). Public funding data is sparse and conflicting.

Cited Findings

  • GitHub API, 2026-10-29: 18,315 stars, 1,131 forks, 875 open issues, last push 2026-10-29, repo created 2022-05-05. The contributors endpoint paginates to 172, including anonymous contributors. — GitHub repo
  • Releases: v1.853.1 (2026-10-29), v1.853.0 (2026-10-28), v1.852.0 (2026-10-28), and so on. 30 releases between 2026-10-09 (v1.830.0) and 2026-10-29. — GitHub releases
  • YC: Summer 2022 batch, founded 2022, team size 7, Paris, sole founder Ruben Fiszel (formerly distributed systems at Palantir). — YC company page
  • Funding conflicts between aggregators: CB Insights reports $500K over 3 rounds, with a convertible note that includes YC. Startups.fm reports a $5M total. Neither cites a press release. Several search hits for "Windmill" funding ($12M seed, $5M Series A) belong to unrelated companies: an AI performance-review startup and Windmill Air. — CB Insights; startups.fm

Inferences

  • The release cadence is very fast, with several releases a day. That is good for velocity but implies frequent upgrades and possible churn. Operators should pin versions.
  • The bus factor is a consideration: a solo founder and a small team, though the company is revenue-generating through EE and Cloud customers such as CFA Institute.

Gaps

  • I found no verified funding round amounts or investor list beyond YC, and no confirmed current headcount beyond YC's listed 7, which may be stale.

7. Migration from n8n

Takeaway

There is no importer. Windmill itself states: "No, there is no automated n8n-to-Windmill converter... Porting is a rewrite, not a conversion." The concept mapping is direct: workflows become flows, nodes become steps or scripts, and credentials become resources and variables. The effort depends on how much of each n8n workflow uses prebuilt SaaS nodes, which must become code.

Cited Findings

  • "No, there is no automated n8n-to-Windmill converter." "Porting is a rewrite, not a conversion." — windmill.dev/compare/n8n

  • Mapping, as inferred from the vendor page:

    • An n8n JSON graph becomes a Windmill flow of scripts.
    • Each node becomes a flow step or script.
    • Code-node logic becomes regular scripts.
    • Credentials become typed JSON "resources", and secrets become "variables".
    • {{ $json.field }} expressions and connection topology must be reimplemented.

    — windmill.dev/compare/n8n

  • The CFA Institute case study (vendor-published, January 2026): the SRE team evaluated Windmill for about a year and fully migrated off n8n in early 2025. "We were very quickly able to get our scripts out of n8n and transitioned over"; "only brief training sessions" were needed. Their reasons for leaving were wanting real programming capabilities and Git workflows. They run 25 synthetic tests every 5 minutes on Windmill Cloud EE. No workflow count or effort figure is given. — CFA Institute case study

  • n8n workflows can be exported as JSON via the CLI (--backup = --all --pretty --separate), but credential secrets stay encrypted in the n8n database. — n8n CLI import/export

  • One third-party anecdote: Windmill's rollout took 9 days including SSO, against 3 days for n8n, for two UK clients. The author flags the small sample. — automationatlas.io

Inferences

  • The effort is low for n8n workflows that are mostly Code or HTTP nodes, since they map to scripts almost 1:1. It is high for workflows built on many app nodes such as Gmail, Slack, or Sheets triggers, because each needs SDK code and app-specific polling triggers have no native equivalent.
  • An AI-assisted route is plausible but unvalidated: feed the n8n JSON to Windmill's flow copilot or an external LLM to draft Windmill flow YAML. I found no documented tool for this.

Gaps

  • I found no community-built n8n-to-Windmill converter, and no quantitative migration effort data.

8. Known limitations and criticisms

Takeaway

The recurring criticisms are these: it is a developer-only tool with a steeper learning curve than n8n; it has a much smaller prebuilt integration catalog; its positioning is confusing (Retool vs. Airflow vs. Temporal); worker sizing and per-language pools need tuning; and the "open source" claim comes with caveats because of the proprietary CE binary and gated features. Reddit could not be accessed directly; Reddit search is blocked for this tool, so the sentiment here comes from blogs, HN mirrors, and vendor pages.

Cited Findings

  • On HN, an early commenter could not tell whether Windmill competes with Retool, Airflow, or Temporal. The founder replied: "The critics is more than fair and our positioning is not very clear." — HN mirror (brianlovin.com) (older, around 2023)
  • On HN commentary about Windmill's benchmark claims, commenters said predictable per-job performance under concurrency matters more than raw speed. — GeekNews summary (2023-11) (secondhand, older)
  • An unverified community anecdote describes a problematic workflow affecting a broader instance. The source suggests checking worker isolation and resource limits. — airframe.ai analysis (low reliability)
  • "Windmill's curve is steeper"; the integration catalog is "smaller and closer to developer-leaning targets"; teams need per-language worker pools. — automationatlas.io
  • Self-hosting is a "slightly more complex due to multi-service architecture" setup. The question is framed as "do you want to click or do you want to type?", and for non-developers setting up webhooks, "n8n wins". — Railway compare (dead link as of 2026-10-30) (promotional)
  • Postgres 18 is the default, and older data volumes (16 or earlier) block startup until you migrate. This is an upgrade friction point. — Self-host docs
  • The legacy low-code app editor is now labeled "legacy" in favor of full-code React or Svelte apps. — Docs intro

Inferences

  • Upgrade churn is likely, given multiple releases per day and Postgres major-version changes.
  • The CE caps (git sync for 2 users, 30-day retention, no audit logs, 3 workspaces) will push growing teams toward EE much as n8n's gating does, though Windmill's per-seat and per-CU pricing is public and comparatively cheap.

Gaps

  • I could not access Reddit (r/selfhosted, r/n8n). No first-hand Reddit sentiment is included.
  • I found no G2 or Capterra review data.