Skip to main content

Kestra vs n8n vs Windmill: Open Source Workflow Automation in 2026

·OSSAlt Team
kestran8nwindmillworkflow automationorchestrationopen sourceself-hostedzapier2026

The Workflow Automation Pricing Problem

Zapier charges $20/month for 750 tasks, $49/month for 2,000 tasks, $69/month for multi-step workflows. For data engineering teams, Make (formerly Integromat) charges $9-29/month with scenario limits. At any meaningful automation volume, costs compound quickly.

Open source workflow automation tools flip this model: self-host once, run unlimited automations for the cost of your server.

Three tools cover different points on the developer spectrum: n8n for teams wanting a visual no-code/low-code builder with 400+ integrations, Kestra for data engineers who prefer declarative YAML orchestration, and Windmill for developers who want to write actual code (Python, TypeScript, Go) and compose it into workflows.

TL;DR

  • n8n (174K+ stars): Best for teams that want visual workflow building with pre-built integrations. Closest to Zapier/Make in UX. Source-available (not fully open source). Massive community.
  • Kestra (26K+ stars, Apache 2.0): Best for data engineers and complex orchestration. Declarative YAML workflows, 600+ plugins, event-driven architecture. True open source.
  • Windmill (15K+ stars, AGPL-3.0): Best for developers who want to write code. Scripts in Python/TypeScript/Go compose into workflows. Also serves as an internal app builder.

Quick Comparison

Featuren8nKestraWindmill
GitHub Stars174K+26K+15K+
ApproachVisual low-codeDeclarative YAMLCode-first
LanguagesJavaScriptAny (via plugins)Python, TypeScript, Go, Bash
Pre-built integrations400+600+ pluginsGrowing
Visual builderExcellentYesYes
Data pipeline supportLimitedExcellentGood
Internal app builderLimitedNoYes
Event-driven triggersYesYesYes
Git integrationYesYesYes
Kubernetes readyYesYesYes
Open source licenseSustainable UseApache 2.0AGPL-3.0

License note: n8n uses a "Sustainable Use License" — self-hosting is permitted but usage restrictions apply for commercial products embedding n8n. Kestra (Apache 2.0) and Windmill (AGPL-3.0) are true open source. Check licenses before building a commercial product on top of them.

n8n — Best Visual Workflow Builder

n8n (174K+ GitHub stars) is the most widely deployed self-hosted workflow automation tool. Its node-based visual editor connects services through a drag-and-drop interface — familiar territory for anyone who's used Zapier or Make.

What Makes It Stand Out

400+ integrations (nodes): n8n ships with pre-built connectors for Google Workspace, Slack, GitHub, Salesforce, HubSpot, databases, HTTP requests, webhooks, and hundreds of other services. Most Zapier/Make workflows can be replicated in n8n without writing code.

Visual workflow canvas: Build workflows by connecting nodes visually. See data flow from trigger to action, branch on conditions, loop over lists, and merge paths. Non-technical team members can build and modify workflows after an initial setup.

JavaScript code nodes: When pre-built nodes don't cover your use case, write JavaScript directly in a code node. Access the full Node.js ecosystem via npm packages.

Webhook triggers: Expose workflows as HTTP endpoints. External services can trigger workflows via webhook — Stripe payment webhook → create invoice record → send Slack notification.

AI agent nodes: n8n has integrated AI nodes for OpenAI, Anthropic, and other LLM providers. Build AI-assisted workflows without separate orchestration.

n8n Cloud vs self-hosted: n8n Cloud starts at $24/month for 2,500 workflow executions. Self-hosted is free with no execution limits.

Self-Hosting n8n

docker run -d \
  --name n8n \
  -p 5678:5678 \
  -e N8N_BASIC_AUTH_ACTIVE=true \
  -e N8N_BASIC_AUTH_USER=admin \
  -e N8N_BASIC_AUTH_PASSWORD=yourpassword \
  -v n8n_data:/home/node/.n8n \
  n8nio/n8n

For production with PostgreSQL:

services:
  n8n:
    image: n8nio/n8n
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: n8n
      N8N_ENCRYPTION_KEY: your-encryption-key
    volumes:
      - n8n_data:/home/node/.n8n

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: n8n
    volumes:
      - pg_data:/var/lib/postgresql/data

Limitations

  • "Sustainable Use License" — not fully open source; review before embedding in commercial products
  • JavaScript only for code nodes (no Python, Go, etc.)
  • Less suited for data engineering and complex pipeline orchestration
  • Performance at very high volume requires horizontal scaling

Best for: Teams migrating from Zapier/Make, non-technical teams who need visual workflow building, and integration-heavy automation workflows.

Kestra — Best for Data Engineering and Complex Orchestration

Kestra (26K+ GitHub stars, Apache 2.0) approaches automation differently from n8n. Rather than a visual node editor, Kestra uses declarative YAML configuration files — the same philosophy as infrastructure-as-code tools like Terraform.

This makes Kestra excellent for data engineers who want version-controlled, reviewable workflow definitions and complex orchestration patterns.

What Makes It Stand Out

YAML-first workflows: Every Kestra workflow is a YAML file. Workflows live in your Git repository alongside your application code — version controlled, reviewable via pull requests, and deployable via CI/CD pipelines.

id: data-pipeline
namespace: analytics

tasks:
  - id: extract
    type: io.kestra.plugin.jdbc.postgresql.Query
    url: "{{ secret('DB_URL') }}"
    sql: SELECT * FROM events WHERE date = '{{ trigger.date }}'

  - id: transform
    type: io.kestra.plugin.scripts.python.Script
    script: |
      import pandas as pd
      df = pd.read_json('{{ outputs.extract.uri }}')
      df['processed'] = True
      df.to_json('{{ outputFiles.result }}')

  - id: load
    type: io.kestra.plugin.gcp.bigquery.Load
    from: "{{ outputs.transform.outputFiles.result }}"
    table: my_dataset.processed_events

600+ plugins: Kestra's plugin library covers databases (PostgreSQL, MySQL, BigQuery, Snowflake, Redshift), cloud storage (S3, GCS, Azure Blob), APIs, scripts (Python, R, Julia, Bash), messaging (Kafka, Pulsar), and ML tools.

Event-driven triggers: React to file arrivals in S3, messages in Kafka, webhooks, database changes, or time schedules. Complex trigger logic with conditions and filters.

Parallel task execution: Run tasks in parallel with configurable concurrency limits. Fan-out to multiple downstream tasks, wait for all to complete before proceeding.

Backfills: Re-run historical workflow executions for a date range — essential for data pipeline recovery and historical data processing.

Namespaces: Organize workflows into namespaces with separate access controls. Keep analytics, ML, and operations workflows separated.

Built-in code editor: Kestra's UI includes an editor with YAML syntax highlighting and validation. Build and test workflows from the browser without a local development environment.

Self-Hosting Kestra

services:
  kestra:
    image: kestra/kestra:latest
    pull_policy: always
    entrypoint: /bin/bash
    command: -c 'exec /app/kestra server standalone'
    volumes:
      - kestra-data:/app/storage
      - /var/run/docker.sock:/var/run/docker.sock
      - /tmp/kestra-wd:/tmp/kestra-wd
    environment:
      KESTRA_CONFIGURATION: |
        datasources:
          postgres:
            url: jdbc:postgresql://postgres:5432/kestra
            username: kestra
            password: k3str4
        kestra:
          server:
            basic-auth:
              enabled: false
          repository:
            type: postgres
          storage:
            type: local
            local:
              base-path: "/app/storage"
    ports:
      - "8080:8080"
      - "8081:8081"

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: kestra
      POSTGRES_USER: kestra
      POSTGRES_PASSWORD: k3str4
    volumes:
      - pg_data:/var/lib/postgresql/data

Kestra also deploys on Kubernetes via Helm chart for production high-availability deployments.

Limitations

  • YAML-first approach has a learning curve for non-developers
  • Less suitable for simple point-and-click automation
  • Fewer pre-built UI integrations than n8n
  • Smaller community than n8n (though growing rapidly)

Best for: Data engineers, platform teams, and anyone who wants Git-versioned workflow definitions and complex orchestration with multi-language script support.

Windmill — Best for Developer-Centric Automation

Windmill (15K+ GitHub stars, AGPL-3.0) sits at the intersection of script management, workflow orchestration, and internal app building. It's less about connecting SaaS services and more about developers writing scripts that compose into automated workflows.

What Makes It Stand Out

Multi-language scripts: Write workflow steps in Python, TypeScript, Go, or Bash. Each script is a self-contained function with typed inputs and outputs. Windmill generates a UI form from your function signature — share the script as an internal tool immediately.

Script composition: Connect scripts into workflows. The output of one script becomes the input of the next. Visual flow editor for composition, code editor for each step.

Internal app builder: Beyond automation, Windmill builds internal CRUD apps. Connect scripts to a UI builder — tables, forms, buttons — and deploy as internal tools. Similar to Retool or AppSmith but built around your scripts.

Hub of community scripts: Windmill Hub contains pre-built scripts for common tasks — database queries, API calls, data transformations. Import and modify community scripts rather than writing from scratch.

Per-script versioning: Each script in Windmill has a version history. Roll back a specific automation step to a previous version without affecting the rest of the workflow.

Resource management: Define resources (database connections, API credentials) centrally and reference them across scripts. No credential duplication across workflows.

Webhook and schedule triggers: Expose workflows as HTTP endpoints or schedule them with cron-like syntax.

Self-Hosting Windmill

services:
  db:
    image: postgres:16
    environment:
      POSTGRES_DB: windmill
      POSTGRES_USER: windmill
      POSTGRES_PASSWORD: windmill
    volumes:
      - db_data:/var/lib/postgresql/data

  windmill_server:
    image: ghcr.io/windmill-labs/windmill:main
    ports:
      - "8000:8000"
    environment:
      DATABASE_URL: postgres://windmill:windmill@db:5432/windmill
      BASE_URL: https://windmill.yourdomain.com
      RUST_LOG: info
    depends_on:
      - db

  windmill_worker:
    image: ghcr.io/windmill-labs/windmill:main
    environment:
      DATABASE_URL: postgres://windmill:windmill@db:5432/windmill
      MODE: worker
      WORKER_GROUP: default
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - db

Windmill separates server and worker processes — run multiple workers for parallel execution capacity.

Windmill Cloud: Managed cloud at $10/user/month. Self-hosted is free (AGPL-3.0 — if you're embedding in a commercial SaaS, review license requirements).

Limitations

  • Smaller integration library than n8n
  • Less suited for non-technical users
  • AGPL-3.0 license has implications for commercial use
  • Less mature than n8n for complex integration workflows

Best for: Developer teams who want to write actual code (Python/TypeScript/Go) and compose it into automated workflows, plus build internal tools from the same codebase.

Choosing Between Them

ScenarioRecommended
Migrate from Zapier/Maken8n
Non-technical teamn8n
400+ pre-built integrations neededn8n
Data engineering pipelinesKestra
Git-versioned workflow definitionsKestra
Complex event-driven orchestrationKestra
Run scripts in Python/TypeScript/GoWindmill
Build internal apps alongside automationWindmill
Full Apache 2.0 open source requiredKestra
Maximum GitHub community supportn8n

Cost Comparison

Commercial Automation Tools (Annual)

ToolTierAnnual
ZapierProfessional (2K tasks)$588
MakeCore (10K ops)$108
n8n CloudPro (10K executions)$288

Self-Hosted (Annual)

ToolServer (Hetzner CPX21)Annual
n8n$6.50/mo$78
Kestra$6.50/mo (+ CPX31 for heavy workloads)$78-120
Windmill$6.50/mo$78

All three tools run comfortably on a $6.50/month Hetzner server for small-to-medium automation workloads. Scale up as execution volume grows.

Find Your Automation Tool

Browse all workflow automation tools on OSSAlt — compare n8n, Kestra, Windmill, Prefect, and every other open source automation platform with deployment guides and feature comparisons.

Comments