Joshua Opolko

n8n vs Windmill: Which Self-Hosted Workflow Engine Should You Run?

By Joshua Opolko · Updated June 20, 2026

The short answer: Run n8n if your team stitches SaaS APIs together on a visual canvas and wants 400+ prebuilt integrations plus a drag-and-drop AI agent. Run Windmill if your workflows are really code (Python, TypeScript, Go) and you want those scripts to become workflows, internal UIs, and cron jobs with less glue. Both self-host in one Docker command. n8n optimizes for low-code breadth; Windmill for code-first depth and throughput.
Key Takeaways
  • n8n has 400+ prebuilt app nodes and a LangChain-based AI Agent node; Windmill supports 20+ languages and auto-generates internal UIs from scripts.
  • Both self-host with one docker compose up. n8n scales with Redis queue mode; Windmill scales by adding stateless workers against a Postgres job queue.
  • n8n is fair-code (Sustainable Use License, not OSI). Windmill core is AGPLv3. Neither restricts personal self-hosting, but n8n restricts reselling the product as a hosted service.
  • AI is no longer a clean dividing line: n8n has a LangChain Agent node, Windmill has Windmill AI. Prototype fast in n8n, graduate to Windmill when logic outgrows the canvas.
  • Default to n8n for API stitching and mixed-skill teams. Reach for Windmill when workflows are already code or you need internal tools generated from scripts.

n8n vs Windmill in one line each

n8n is a visual, node-based automation tool: you assemble flows on a canvas from 400+ prebuilt app nodes and drop into JavaScript or Python only when you need to. Windmill is a code-first developer platform: you write scripts in 20-plus languages and Windmill turns them into workflows, scheduled jobs, and auto-generated internal UIs.

They overlap in the middle (both schedule jobs, both run code, both now ship AI agents) but they start from opposite ends: n8n starts from the canvas, Windmill starts from the code. That single difference drives almost every other trade-off below.

Side-by-side comparison

The table summarizes how the two tools differ on the axes that matter for a self-hosting decision: paradigm, languages, integrations, AI, licensing, and how each one scales. Details and sources follow in the sections below.

 n8nWindmill
ParadigmVisual, node-based (low-code)Code-first scripts + visual flow & app builder
Custom-logic languagesJavaScript + native Python (v2.0+)20+: Python, TypeScript, Go, Bash, SQL, PHP, Rust and more
Prebuilt integrations400+ app nodesFewer prebuilt; any API via code + script hub
Auto-generated UIs / internal appsLimited (forms)Core feature (apps & forms from scripts)
Built-in AILangChain-based AI Agent nodeWindmill AI + AI Agents
LicenseFair-code: Sustainable Use License (+ Enterprise); not OSIAGPLv3 core (+ Apache parts) + paid Enterprise
EngineNode.js / TypeScriptRust core, Postgres-backed job queue
Self-hostDocker / npm, SQLite or Postgres, queue mode + RedisDocker Compose + Postgres + worker pool
Best forAPI stitching, ops automation, mixed-skill teamsCode-heavy logic, internal tools, polyglot teams, scale
n8n ships 400+ prebuilt app nodes for connecting SaaS services and a LangChain-based AI Agent node for drag-and-drop agent building, all under a fair-code Sustainable Use License. Windmill supports 20+ first-class languages (Python, TypeScript, Go, Bash, SQL, Rust and more), auto-generates internal UIs from script parameters, and uses an AGPLv3-licensed Rust core with a Postgres job queue. Both self-host with one docker compose up.

Sources: n8n GitHub repo and n8n docs; Windmill GitHub repo and Windmill docs. Verified June 2026.

When n8n is the right call

Choose n8n when the work is connecting services, not writing algorithms. Its 400+ prebuilt nodes (per the official repo) mean a Slack-to-Notion or Stripe-to-spreadsheet flow rarely touches code, and a visual canvas stays readable for non-engineers on the team.

If you are standing up self-hosted n8n for the first time, our n8n self-hosted guide walks through the Docker setup and the Postgres-plus-queue-mode path for production.

When Windmill is the right call

Choose Windmill when the workflow is already code. If a job is really a 200-line Python script with branching, Windmill keeps it as code (versioned, testable, git-syncable) while still giving it a schedule, a UI, retries, and observability. You do not redraw it as thirty nodes.

Self-hosting and deployment

Both are a docker compose up away, but they scale differently. n8n is a single Node.js service backed by SQLite or, for production, PostgreSQL; you scale past one instance with queue mode, adding Redis as a message broker and a pool of worker processes. Windmill is a Rust server plus worker containers and Postgres, where Postgres itself holds the job queue and you scale by adding workers.

n8n licensing watch-out: n8n is fair-code under the Sustainable Use License (plus an Enterprise license). You can self-host it for your own business for free, but the license restricts offering n8n to third parties as a hosted or white-labeled service. It is not OSI open source. Read the license before any commercial redistribution.

Windmill licensing: the core is AGPLv3 (OSI open source, with some Apache-2.0 components), and a paid Enterprise edition adds SSO, audit logs, git sync, and multiplayer. AGPLv3 is more permissive for self-hosting but carries copyleft obligations if you modify and distribute.

n8n scales past a single instance using queue mode: add Redis as a message broker and a pool of Node.js worker processes, with PostgreSQL replacing SQLite. Windmill scales by adding stateless worker containers against a shared Postgres job queue - no Redis required. n8n is licensed under the Sustainable Use License (fair-code, not OSI open source); Windmill core is AGPLv3. Neither restricts self-hosting for internal use, but n8n's license prohibits reselling it as a hosted service to third parties.

Resource reality check: a minimal n8n instance idles at roughly 200-400 MB RAM (Node.js plus SQLite); under load with queued jobs, expect 500 MB-1 GB per worker depending on payload size. Windmill's Rust server is leaner at idle (under 100 MB for the core service) but the worker containers add up similarly per vCPU. Both run fine on a $12-24 VPS for low-throughput personal use; production deployments with Postgres and Redis or a Windmill worker pool need at least a $40-80 box. Treat these as ballpark figures and test against your actual workflow volume.

Running AI and LangChain workflows

AI is no longer a clean dividing line: both tools ship native AI as of 2026. The difference is how much you click versus how much you write.

Rule of thumb: prototype the agent in n8n, then graduate it to Windmill or plain code when the logic outgrows the canvas. That is roughly the path described in building JOSIE, a persistent-memory AI workflow. If you are weighing a dedicated LLM-app builder instead, see the Dify self-hosted guide; Dify targets RAG and chat apps rather than general automation.

What changed in 2026

Two updates reshape this comparison from a year ago. First, n8n moved Python in the Code node from the Pyodide WebAssembly sandbox to a native task runner, made the default in the 2.0 release. That widens available Python packages and changes data access from dot to bracket syntax, so existing Pyodide scripts need a migration check. Second, both tools shipped first-party AI agents, so "does it do AI" stopped being a differentiator. n8n is now on the 2.x line; if you run 1.x, read the 2.0 migration notes before upgrading.

Verdict: which should you run?

Frequently asked questions

Is n8n or Windmill better for self-hosting?

Both self-host cleanly with Docker and PostgreSQL. n8n runs as a Node.js service and scales with queue mode (Redis plus worker processes). Windmill uses a Rust core with a Postgres-backed job queue and scales by adding stateless workers. Choose n8n for connector automation, Windmill for code-heavy or high-concurrency workloads.

Can n8n run Python?

Yes. n8n runs JavaScript and Python in its Code node. As of the 2.0 release, Python uses a native task runner instead of the older Pyodide WebAssembly sandbox, which widens available packages and changes data access to bracket syntax. Windmill treats Python as a first-class language alongside TypeScript, Go, and more.

Which is better for AI and LangChain workflows?

Both ship native AI now. n8n has a LangChain-based AI Agent node with models, tools, memory, and vector stores on the canvas. Windmill has Windmill AI and AI Agents, and also lets you write LangChain code directly in Python or TypeScript. Prototype agents fast in n8n; move to code when logic gets complex.

Are n8n and Windmill open source?

Windmill core is AGPLv3 (OSI open source) with a paid Enterprise edition. n8n is fair-code under the Sustainable Use License plus an Enterprise license; it is free to self-host for your own business but is not OSI open source and restricts reselling it as a hosted service.

How many languages does Windmill support?

Windmill supports 20-plus languages as first-class scripts, including Python, TypeScript, Go, Bash, SQL, PHP, Rust, C#, Java, Ruby, R, PowerShell, GraphQL, and Ansible, plus arbitrary Docker images. n8n is JavaScript and Python only, inside its Code node.

Written by Joshua Opolko, who self-hosts AI and automation tooling and writes about it at joshuaopolko.com. Product facts verified against official documentation and source repositories in June 2026; version numbers (n8n 2.x, Windmill 1.x) are a point-in-time snapshot and both projects release frequently.