[FIRST-HAND TODO] are reserved for measured numbers (idle and loaded RAM, jobs per second) from running both tools on the same box. They are left blank on purpose rather than filled with vendor or guessed figures.
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.
| n8n | Windmill | |
|---|---|---|
| Paradigm | Visual, node-based (low-code) | Code-first scripts + visual flow & app builder |
| Custom-logic languages | JavaScript + native Python (v2.0+) | 20+: Python, TypeScript, Go, Bash, SQL, PHP, Rust and more |
| Prebuilt integrations | 400+ app nodes | Fewer prebuilt; any API via code + script hub |
| Auto-generated UIs / internal apps | Limited (forms) | Core feature (apps & forms from scripts) |
| Built-in AI | LangChain-based AI Agent node | Windmill AI + AI Agents |
| License | Fair-code: Sustainable Use License (+ Enterprise); not OSI | AGPLv3 core (+ Apache parts) + paid Enterprise |
| Engine | Node.js / TypeScript | Rust core, Postgres-backed job queue |
| Self-host | Docker / npm, SQLite or Postgres, queue mode + Redis | Docker Compose + Postgres + worker pool |
| Best for | API stitching, ops automation, mixed-skill teams | Code-heavy logic, internal tools, polyglot teams, scale |
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.
- You are gluing SaaS tools together. Prebuilt nodes cover the common APIs, so most flows are drag, connect, configure.
- You want an AI agent without writing the plumbing. n8n's AI features are built on LangChain: the AI Agent node ships several agent types and connects to chat models (OpenAI, Anthropic, Gemini, Mistral and others), memory backends, and vector stores (Pinecone, Qdrant, Weaviate, Chroma) on the canvas.
- Mixed-skill teams. A flow diagram is self-documenting in a way a repo of scripts is not; ops people can follow and edit it.
- Connector breadth beats raw runtime. Most automation is I/O-bound API calls, so n8n's Node.js engine is rarely the bottleneck at small to medium scale.
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.
- Your logic is code, not connectors. Windmill turns a script into a webhook, a background job, a flow step, or a cron job without rewriting it visually.
- Polyglot teams. Windmill treats 20-plus languages as first-class (Python, TypeScript, Go, Bash, SQL, PHP, Rust and more), plus arbitrary Docker images, so each step can use the right tool.
- You need internal tools, not just automation. Windmill auto-generates input UIs from script parameters and composes them into apps. That "scripts become internal UIs" story is its real differentiator and has no clean n8n equivalent.
- Throughput and scale matter. The Rust core uses Postgres as the job queue and scales by adding stateless workers (a rule of thumb of one worker per vCPU).
[FIRST-HAND TODO]: measured jobs per second and worker memory under load on a known box. This is the single most useful, hardest-to-find number in this whole comparison; do not fill it with a vendor figure.
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.
Resource reality check [FIRST-HAND TODO]: real idle-versus-loaded RAM and CPU for each on a known VPS (for example a small $12 box). This is exactly the deployment-evaluation data that almost nobody publishes honestly, and it belongs here once measured, not estimated.
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.
- n8n: the AI Agent node wraps LangChain concepts (models, tools, memory, vector stores) into draggable nodes. It is the fastest path to a working agent; you trade some control for speed.
- Windmill: ships Windmill AI and AI Agents, and you can also write LangChain or LangGraph directly in a Python or TypeScript step. More control, more code, better when the agent logic is non-trivial or needs unit tests.
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?
- Default to n8n for API stitching, ops automation, and fast AI-agent prototypes with a team that is not all engineers.
- Reach for Windmill when your workflows are really code, you are polyglot, you need internal tools built from scripts, or throughput is a first-class concern.
- They are not mutually exclusive. A common pattern is n8n at the edges (triggers, connectors) and Windmill for the heavy custom steps.
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.