Kestra is the open-source, declarative, event-driven orchestration platform for data, AI, and infrastructure workflows.
GitHub: kestra-io/kestra · Website: kestra.io · Docs: kestra.io/docs
1400+ plugins · SOC 2 Certified · Built for enterprise scale
What Is Kestra?
Kestra is a universal workflow orchestration engine — write workflows in YAML, run tasks in any language, trigger by events, schedule by cron, and observe everything from one place.
Core Philosophy
Philosophy
What It Means
Declarative
Write WHAT you want (YAML), not HOW to do it
Language-agnostic
Python, Bash, Node.js, Go, or containers — no lock-in
Event-driven
Cron, webhooks, messages, API triggers — all in one engine
API-first
Everything controllable via REST API
GitOps-native
CI/CD pipelines for workflow deployment
Three Core Use Cases
graph TD
Kestra["⚡ Kestra Platform"]
D["📊 Data Workflows\nIngestion · dbt · Airbyte · Spark\n10x faster pipeline delivery\n90% fewer manual backfills"]
I["🔧 Infrastructure Automation\nTerraform · Ansible · CI/CD\n6x faster infra delivery\n90% lower legacy tooling cost"]
A["🤖 AI Workflows\nAgents · RAG · Eval · Retraining\n50x less pipeline maintenance\n3x faster AI delivery cycles"]
Kestra --> D
Kestra --> I
Kestra --> A
Core Concepts
Workflow = Flow in Kestra
A flow is the fundamental unit in Kestra — a YAML file defining tasks, triggers, and their relationships.
id: my-first-workflownamespace: company.teamdescription: "Basic ETL pipeline example"# Triggers — when to run this flowtriggers: - id: daily-schedule type: io.kestra.plugin.core.trigger.Schedule cron: "0 9 * * *" # Every day at 9am# Tasks — what to dotasks: - id: extract-data type: io.kestra.plugin.scripts.python.Script script: | import requests data = requests.get("https://api.example.com/data").json() print(data) - id: transform-data type: io.kestra.plugin.scripts.python.Script script: | # Transform logic here print("Transforming...") - id: load-data type: io.kestra.plugin.jdbc.postgresql.Query sql: "INSERT INTO table SELECT * FROM staging"
Key Concepts Table
Concept
Description
Flow
A workflow definition — YAML file with tasks and triggers
Task
A single unit of work (run script, call API, query DB)
Trigger
What starts a flow — schedule, webhook, event, message queue
Namespace
Logical grouping for flows — like folders (e.g., company.team)
Execution
A single run of a flow — has a unique ID and full trace
Plugin
Integrations — 1400+ available (AWS, GCP, dbt, Airbyte, Slack, etc.)
Blueprint
Pre-built flow templates for common use cases
Tenant
Isolated environment for multi-tenancy (Enterprise)
tasks: # Run multiple tasks in parallel - id: parallel-ingest type: io.kestra.plugin.core.flow.Parallel tasks: - id: ingest-source-a type: io.kestra.plugin.scripts.python.Script script: | print("Ingesting from source A") - id: ingest-source-b type: io.kestra.plugin.scripts.python.Script script: | print("Ingesting from source B") - id: ingest-source-c type: io.kestra.plugin.scripts.python.Script script: | print("Ingesting from source C") # All 3 run at the same time, next task waits for all to finish - id: merge-results type: io.kestra.plugin.scripts.python.Script script: | print("All sources ingested, merging...")
# Trigger a flow execution via APIcurl -X POST \ http://localhost:8081/api/v1/executions/company.team/my-workflow \ -H "Content-Type: application/json" \ -d '{"key": "value"}'# List all executionscurl http://localhost:8081/api/v1/executions?namespace=company.team# Get execution detailscurl http://localhost:8081/api/v1/executions/{executionId}# Pause a running executioncurl -X POST \ http://localhost:8081/api/v1/executions/{executionId}/pause
Kestra vs Alternatives
Kestra vs Apache Airflow
Dimension
Kestra
Apache Airflow
Workflow language
YAML (declarative)
Python (imperative)
Learning curve
Low — any YAML editor works
High — Python + Airflow concepts
Code/UI
Both — YAML + full UI in sync
Code-first, limited UI
Language support
Any (Python, Bash, Node.js, Go, containers)
Python-centric
Event-driven
Native
Requires plugins/workarounds
Plugin ecosystem
1400+ built-in
3rd party providers, inconsistent
Scaling workers
Independent horizontal scaling
Complex worker scaling
Multi-tenancy
Built-in (Enterprise)
External solutions needed
Self-hosted
Yes — Docker or K8s
Yes — more complex setup
Kestra vs n8n
Dimension
Kestra
n8n
Primary user
Data/Platform engineers
Non-technical users
Workflow definition
YAML (code)
Visual drag-and-drop
Scale
Enterprise, millions of executions
Mid-scale automation
Data pipelines
First-class (ETL, dbt, Spark)
Limited
Infrastructure automation
First-class (Terraform, Ansible)
Limited
Observability
Deep execution tracing, SLAs
Basic logs
Real-World Use Case Patterns
Pattern 1 — Daily ETL Pipeline
graph LR
T["⏰ Cron Trigger\n2:00 AM daily"]
E["📥 Extract\nAPI → raw S3 bucket"]
Tr["🔄 Transform\nPython/Polars → clean data"]
L["📤 Load\nPostgres / Snowflake / BigQuery"]
V["✅ Validate\nRow counts · null checks"]
N["🔔 Notify\nSlack success / failure"]
T --> E --> Tr --> L --> V --> N