# Kestra

> Declarative orchestration in YAML, whatever language the work is written in

Kestra is an open-source orchestration platform whose workflows are declared in YAML rather than written in a programming language: an event-driven, language-agnostic engine with a large plugin catalogue, a JVM runtime backed by Postgres or MySQL, and Enterprise and Cloud editions above the Apache-2.0 core.

Website: https://kestra.io

## Use it when

- The work is polyglot; YAML declares the flow while script tasks in fifteen languages and 1,900+ plugins run it.
- Mixed-skill teams need a no-code editor and engineers need the same engine underneath.
- Triggers should be event-driven at millisecond latency: Kafka, Pulsar, SQS, Pub/Sub, NATS, or Debezium CDC.
- You want a simple self-hosted start on Postgres or MySQL with an enterprise scale path later.

## Think twice when

- Engineers want pipelines as Python code with tests; Airflow, Dagster, and Prefect fit that culture, and YAML at scale needs discipline.
- Asset-level lineage matters; assets are an Enterprise overlay, not the unit you author.
- Key scale features (the Kafka and Elasticsearch backbone, worker groups, RBAC, SSO) sit behind the Enterprise edition.

## How it runs

A JVM platform (webserver, scheduler, executor, workers) self-hosted with orchestration state in Postgres, MySQL, or H2; only the workers touch your infrastructure. Task outputs pass through the execution context, capped near 1MB, with larger data in internal storage as a URI. The core is Apache-2.0; Enterprise is priced per instance, and Kestra Cloud is the managed option.

## Details

### General

| Attribute | Value |
| --- | --- |
| License | Open source (permissive) |
| SPDX identifier | Apache-2.0 |
| Deployment | Self-hosted, Managed |
| Workload | Batch |
| Operational complexity | Medium |
| Pricing | Free, Subscription |
| Language | Java |
| Repository | https://github.com/kestra-io/kestra |
| Documentation | https://kestra.io/docs |
| Stars | 28.2k |

### Workflow Orchestration

| Attribute | Value |
| --- | --- |
| Authoring model | Declarative YAML: an id, a namespace and a list of tasks; a no-code editor over it |
| Task languages | Dedicated script plugins for fifteen languages (Python, R, Node.js, Shell, PowerShell, .NET, Julia, Ruby, Go, Deno, Lua, Bun, PHP, Perl and Groovy) each with an inline Script and a file-based Commands task; anything else runs through Shell in a container |
| Unit of work | A task inside a flow, and the flow (id, namespace, tasks) is what you deploy; subflows compose them. Assets exist but are an Enterprise lineage overlay declared on a task, not the thing you author |
| Passing data | Outputs in the execution context, read as {{ outputs.task.attribute }} and capped near 1MB because the context is one database row; larger data goes to internal storage as Ion (filesystem, S3, GCS or Azure Blob) and passes as a URI, with a namespace key-value store for state between flows |
| Triggers | Cron schedules with scheduling conditions and backfill, another flow reaching a state, a webhook URL, polling an external system at an interval, and realtime triggers at millisecond latency on Kafka, Pulsar, AMQP, MQTT, SQS, Pub/Sub, Event Hubs, NATS, Redis and Debezium CDC |
| Connectors | 1,900+ plugins across data, cloud, infrastructure, AI and business systems; HTTP and container tasks cover whatever is not packaged |
| Where tasks run | Worker processes: the only component that touches your infrastructure |
| Delivery guarantee | Retries declared per task, per flow or globally, constant, exponential or random |
| Caching and reruns | taskCache stores a runnable task's status and outputs in the database under a ttl and skips it when the same execution runs again with identical inputs; separately, WorkingDirectory caches files by glob so dependency installs are not repeated, but only under the Process runner, and the Docker runner every script task defaults to throws instead |
| Billing unit | Free self-hosted, with unlimited flows, tasks and executions; Enterprise is an annual subscription priced per instance rather than per seat or per run, and Kestra Cloud is usage-based with no unit published |

## Capabilities

- [Workflow Orchestration](https://matca.io/capabilities/workflow-orchestration)

---

Source: https://matca.io/kestra
Last updated: 2026-08-31T11:40:47.266Z
