- 数据工程团队已有大量脚本(Python、SQL、Shell、Node)散落在 cron 和 CI 里:Kestra 把这些脚本包成 YAML task,触发、重试、依赖、回填都在控制平面统一管,不用为每个脚本写 DAG 文件
- 需要事件驱动而非纯定时的流水线:比如对象存储落地文件、webhook、消息队列事件触发下游任务,这类场景 Airflow 的 scheduler 模型要绕,Kestra 的 trigger 是一等公民
- 多团队共用一套编排但语言栈不统一:Java 团队写 Java task、数据团队写 Python、运维写 Shell,都在同一份 YAML 里声明,不用强迫所有人学 Python DAG
- 需要把 AI agent 步骤嵌进已有批处理流程:比如先跑 ETL 再调 LLM 做摘要再写回数据库,agent 只是流程里的一个 task,而不是另起一套 agent 框架
kestra
kestra-ioApache-2.0活跃维护 有专家点评用声明式 YAML 编排数据管道、基础设施、业务流程和 AI Agent 的开源控制平面,事件驱动、支持任意语言、可 Git 版本化,能扛住百万级执行。
Orchestrate everything, everywhere. The open-source control plane for workflows across data, infrastructure, business processes and AI agents. Declarative YAML, event-driven, any language, Git-versioned, scalable to millions of executions.
专家点评
上手难度:进阶更新于 2026-11-11用 YAML 声明式编排数据管道、基础设施任务和 AI agent 步骤,替代 Airflow 这类 Python 代码即 DAG 的调度器
适用场景
踩坑
- 默认镜像不含全部插件,第一次跑非内置 task 会因插件缺失失败,必须设 KESTRA_PLUGINS_AUTO_INSTALL_ENABLED=true 或预构建带插件的镜像;离线/受限网络环境这一步会卡住
- 本地 docker run 模式挂载了 /var/run/docker.sock 且要求 --user=root,本质是把宿主机 Docker 控制权交给容器,只适合本地试用,别照搬到共享开发机
- issue 里并发控制(限制并发执行数)和 worker 按 runnerTags 区分负载被反复提出,说明大规模多租户场景下资源隔离和并发上限需要自己设计,不能指望开箱即用
同类对比
Airflow 生态和 Python 算子更成熟、团队已深度用 Python 写 DAG 时没必要换;Dagster/Prefect 在资产建模和开发体验上更偏代码优先,纯数据管道且不介意写 Python 的话分流过去更顺
docker run --pull=always --rm -it -p 8080:8080 --user=root -v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp kestra/kestra:latest server localREADME 未说明具体 CPU、内存或 GPU 要求;提供 Docker 镜像及 AWS CloudFormation、Azure/GCP Terraform 部署模板。
项目说明
由 README 自动翻译提炼开源事件驱动编排平台,用声明式 YAML 统一调度数据、AI 与基础设施工作流
用声明式 YAML 编排数据管道、基础设施、业务流程和 AI Agent 的开源控制平面,事件驱动、支持任意语言、可 Git 版本化,能扛住百万级执行。
核心能力
- 用声明式 YAML 定义工作流,UI、No-Code 与 AI Copilot 编辑同一份流程
- 支持定时与事件驱动触发,通过 trigger 定义实时或周期任务
- 内置数百插件,可连接数据库、云存储与 API 并运行任意语言脚本
- Worker 通过 gRPC 与控制平面通信,可跨区域或受限网络部署
- 集成 Git 版本控制,支持草稿修订与 CI/CD 发布流程
容易踩的坑
2.0 将 -no-plugins 镜像后缀改为 -slim,旧命令需相应调整;默认镜像不含全部插件,需设置 KESTRA_PLUGINS_AUTO_INSTALL_ENABLED=true 从 Maven Central 按需拉取;本地模式挂载了 Docker socket,需以 root 运行并确保宿主机 Docker 可用。
- v1.3.472026-11-10 · 2026-11-10 15:16 UTC
查看更新说明
Changelog
📘 Subtasks
version
- be537d7 update to version '1.3.47'
🐛 Bug Fixes
core
- 7c071c9 honour http.nonProxyHosts in the Micronaut HTTP client (backport #22390) (#22393), closes #22390 #22393
- e535f95 clear frontend OpenGrep findings on 1.3.x (#22191), closes #22191
- ccb41c1 copy the history in State(State, Type) instead of sharing it, closes #21366
deps
- 0d344b5 upgrade @opentelemetry/core to 2.8.0 (#22486), closes #22486
- a939b3d patch npm advisories on the 1.3.x ui lockfile (#22155), closes #22155
executions
- e46d178 add the displayName to the overview chart to pass validation (#22220), closes #22220
flows
- 7567a4f add the graphStyle to pass validation (#22218), closes #22218
jdbc
- e4de910 reset the trigger under its row lock when an execution ends (#22260), closes #22260
ui
- e8ca7b7 prevent pagination reset to page 1 in embed mode (#21418), closes #20952 #21418
🛠 Build
release
- e2b4343 skip backend tests when the tagged commit already passed CI (#22186) (#22451), closes #22186 #22451
global
- c9914b0 add the repository-conventions gradle plugin to releases/v1.3.x
- 12c2a1f add the security scan workflow to releases/v1.3.x
Contributors
We'd like to thank the following people for their contributions: Barthélémy Ledoux, Claude, GitHub, GitHub Action, Loïc Mathieu, Maxime Wojtczak, Miloš Paunović, Nicolas K., Roman Acevedo, Stalin, github-actions[bot], nKwiatkowski, zkasuran
- v2.0.10最新正式版2026-11-10 · 2026-11-10 15:08 UTC
Changelog
🚀 Features
core
- 9bbc3a2 add an overridable scope around copilot tool calls (#22107) (#22467), closes #22107 #22467
triggers
- dd22869 webhook hmac signature validation (#19659), closes #19659
📘 Subtasks
ci
- 8d6d74d remove global-* workflows from releases/v2.0.x
version
- 1de24df update to version '2.0.10'
🐛 Bug Fixes
ai
- e892f53 snake_case copilot tool names and totals in list tools (#22059) (#22303), closes #22059 #22303
core
- e09c3d6 honour http.nonProxyHosts in the Micronaut HTTP client (backport #22390) (#22392), closes #22390 #22392
- b33c0aa use static metric cache, closes #18218
- 2bab2bf clear frontend OpenGrep findings on 2.0.x (#22188), closes #22188
- 27cc749 copy the history in State(State, Type) instead of sharing it, closes #21366
- f279ffd keep parallel task order stable in the topology graph
- 00562f3 stream FilterItems and DeduplicateItems records instead of buffering the file, closes #21656
deps
- c56c1a1 patch npm advisories on the 2.0.x ui lockfile (#22154), closes #22154
design-system
- 26e0844 ellipsis on KsId shortened at default size (backport #22423) (#22447), closes #22423 #22447
- d0fc98e selecting text no longer opens the editor suggest widget (#22327), closes #22327
executions
- 8bcd82c end kill-switched executions from the execution queue (backport #22361) (#22362), closes #22361 #22362
- 13b9a2d skip blocked scopes instead of blocked executions in the scoped concurrency scan
- ac92527 ignore loop iterations when following dependencies, closes #22357
- e7a6c4b skip a Loop's iterations and a nested Pause's onPause when runIf is false
scheduler
- b039c7f measure the evaluation loop duration with a monotonic clock
system
- 1961aff use separate metric name for the global running count and the per task running count, closes #18218
triggers
- e838ada resume a running backfill from its pending date when re-enabling a trigger
worker
- 67c62e4 fail a task whose plugin is not installed on the worker
🔄️ Changes
core
- fba6bfe MCP session id issuance and repository key (backport #22196) (#22461), closes #22196 #22461
🛠 Build
deps
- ff10009 bump happy-dom to 21.0.4 (#22485), closes #22485
release
- 0c17ae3 skip backend tests when the tagged commit already passed CI (#22186) (#22452), closes #22186 #22452
global
- 4cf1938 add the repository-conventions gradle plugin to releases/v2.0.x
- b1a14e0 add the security scan workflow to releases/v2.0.x
📝 Documentation
tasks
- 2472bc4 use onChildFailure CANCEL in the Parallel fail-fast example
- 208aae3 Fix inputs in nested loop executions
Contributors
We'd like to thank the following people for their contributions: Arnav Gupta, Ashish Ranjan, Barthélémy Ledoux, Claude, Copilot App, Florian Hussonnois, GitHub, GitHub Action, Loïc Mathieu, Maxime Wojtczak, Nicolas K., NotAditya01, Roman Acevedo, Steven Meek, github-actions[bot], nKwiatkowski, zkasuran
- v1.3.462026-11-03 · 2026-11-03 15:54 UTC
查看更新说明
Changelog
🚀 Features
executions
- 890e73e add a clear error message when a required execution output is null
📘 Subtasks
version
- 6e95a57 update to version '1.3.46'
🐛 Bug Fixes
core
- 6b780f6 take the Split part extension from the file name
- ebde701 enforce allowed-paths on host paths given to FILE inputs, closes #18557
- 8f37192 restrict the trust-all HTTP client SSL factory to TLS 1.2 and 1.3
- 6d82d8a handle Number amount in IndentFilter and NindentFilter
dashboards
- 43b9324 reset the data properties when the data type changes in the no-code editor (#22095), closes #22095
- 081324c report a chart without data.columns as a validation error (#22094), closes #22094
executions
- 7fbd77d ignore superseded execution searches and don't time out the list (1.3) (#22002), closes #22002
- 23de92f interval chip that cannot be removed, with an all-time option (1.3) (#21910), closes #20435 #21910
storage
- 7153d97 filter companion metadata in deleteByPrefix and cleanup single files
unit-test
- aaa8e9b in/notId should compares to Object
unit-tests
- 272a78d validate the unit test fixtures
- 22b53de fix(executions)!:cancelled subflow execution ends in CANCELLED and parent continues (#21765) (#21866), closes #21765 #21866
- a06a589 Revert "fix(core): take the Split part extension from the file name"
Contributors
We'd like to thank the following people for their contributions: Aditya Kumar Singh, Aditya8369, Barthélémy Ledoux, GitHub, Loïc Mathieu, Miloš Paunović, Nicolas K., github-actions[bot], nKwiatkowski
- v2.0.92026-11-03 · 2026-11-03 15:10 UTC
查看更新说明
Changelog
🚀 Features
core
- 23a7a2f generate a CycloneDX SBOM of the backend and UI dependencies
executions
- 5ba89da add a clear error message when a required execution output is null
system
- 1785250 add a usage period selector to the system overview (#21916), closes #21916
tests
- 30c5e4a add validations to unit tests
📘 Subtasks
deps
- c9754f9 bump playwright to 1.64.1 to support ubuntu-26.04 runners (#21908), closes #21907 #21908
version
- b961b22 update to version '2.0.9'
🐛 Bug Fixes
core
- 3fd5216 declare kv ttl and description headers on setKeyValue (backport #22047) (#22156), closes #22047 #22156
- 5d9cd48 take the Split part extension from the file name
- 614f3de skip select expression when a custom value is passed
- 7692bf4 reject a plugin type that doesn't match the expected plugin kind (#21973), closes #21973
- 7c852ef accept expressions on dynamic enum properties in the flow schema (backport #22042) (#22058), closes #22038 #22042 #22058
- fcb12be send each log once when following an execution's logs (#21846) (#22064), closes #21846 #22064
- 718d057 open the copilot draft when open in editor is used on the new flow page (#22035), closes #19359 #22035
- f887a75 restrict the trust-all HTTP client SSL factory to TLS 1.2 and 1.3
- e5c7e00 keep copilot drafts opened in the editor out of the url (#21971), closes #19359 #21971
- bff8f32 docs panel follows the current page (backport #21981) (#21985), closes #21981 #21985
- 2d4e948 handle Number amount in IndentFilter and NindentFilter
dashboards
- 8a51e41 reject duplicate chart ids that made two charts show the same data (#22109), closes #22109
- e956ce9 reset the data properties when the data type changes in the no-code editor (#22083), closes #22083
- 9aa5b6c report a chart without data.columns as a validation error (#22082), closes #22082
- 6985376 sort executions and next executions tables (#22052), closes #21541 #22052
executions
- 24526e8 preview namespace files in execution outputs (backport #22163) (#22178), closes #22163 #22178
- bef951c evaluate flow checks again on restart and replay, closes #21976
- 0278b7d release the multipart bodies that execution routes leave unread
- 3ecafb7 do not rewind a finished run when the flow request returns (#19708) (#21982), closes #19708 #21982
- 21eaaf2 interval chip that cannot be removed, with an all-time option (2.0) (#21909), closes #20435 #21909
flows
- 157e908 publish an unchanged draft flow (backport #22085) (#22087), closes #18221 #22085 #22087
storage
- 1c4e8b4 filter companion metadata in deleteByPrefix and cleanup single files
tests
- bfbbdc1 Unit Test fixture fails validation for a task inside a Loop
triggers
- c7b1f4a release the body of a rejected multipart webhook request
unit-test
- accdbd1 in/notId should compares to Object
unit-tests
- 142bab8 validate the unit test fixtures
🏭 Tests
executions
- 2af5296 halve the requests of the multipart leak tests
🛠 Build
openapi
- 8ceb3ba send the PR base branch to the EE spec check (#21788), closes #21788
- 5633797 fix(executions)!:cancelled subflow execution ends in CANCELLED and parent continues (#21765) (#21866), closes #21765 #21866
Contributors
We'd like to thank the following people for their contributions: Aditya Kumar Singh, Aditya8369, Ankit Kumar, Barthélémy Ledoux, Claude Fable 5.1, GitHub, Loïc Mathieu, Maxime Wojtczak, Miloš Paunović, Nicolas K., Piyush Bhaskar, Steven Meek, Vansh, YannC, YannC., brian-mulier-p, bucketbase26, github-actions[bot], nKwiatkowski
- v2.0.82026-10-27 · 2026-10-27 14:09 UTC
查看更新说明
Changelog
🚀 Features
core
- 59de69f add dataURL Pebble function to resolve files into data: URLs (#20778) (#21900), closes #20778 #21900
system
- e3b300d add task runs and task runners cards to the system overview
📘 Subtasks
deps
- 5c210e0 Micronaut 4.10.22
version
- cfd8842 update to version '2.0.8'
🐛 Bug Fixes
core
- 4beace6 resolve input dependencies with the caller's secret decryption (backport #21806) (#21873), closes #21806 #21873
- 5cd03bf subflow started from a nested loop stays created, closes #21727
- 03b0c13 keep namespace conditions case-exact on mysql
- 4550925 drain queued executions once their concurrency limit is removed
- 73b6968 add missing locked features to OSS menus (#21671), closes #21671
- 7983a52 preserve the context path in frontend api requests (#21596), closes #20771 #21596
- 6b33563 never let the plugin auto-install migration stop the server
dashboards
- 8ae73bd show readable ISO week labels on weekly execution charts (#21758), closes #21758
executions
- 3169f12 Flow trigger waitForAllRetries
- 7646f4c drop stale handler task runs on replay (#20505), closes #20505
- 4bb7ff2 keep a killed loop in KILLED instead of SUCCESS
- 5ff5621 keep the duration of a running execution ticking (backport #21502) (#21506), closes #21502 #21506 #21600
- 6c401ac end KILLED when killed while waiting on a subflow and fail the parent when a subflow execution is killed, closes #12557 #20865
flows
- 66342f6 keep the default namespace filter on the flows list (#21896), closes #21896
- 59169d5 avoid not-in-order flow update on the metastore cache, closes #20643
- 4c6687a answer racing flow deletes with a 409
- df6caa0 concurrent flow saves losing edits and undoing a delete
- c48a6de Dag onChildFailure should be FAIL, closes #21582
- f5a1ff2 row click in namespace Flows tab (#21663), closes #21663
namespaces
- df08c25 moving a file onto its own location does nothing (#21673), closes #21673
- 635243a keep the kv sort indicator after a refresh (#21683), closes #17314 #21683
storage
- 18ab3c9 share the check that a path is inside an execution's storage (#21394) (#21780), closes #21394 #21780
tests
- b65552a write the junit reports that the frontend tests summary reads (#21743), closes #21743
topology
- 70ea7e4 load plugin UI for nested tasks on 2.0.x (#21707), closes #21468 #21688 #21707
worker
- 6c4045a build the task cache archive on disk instead of in memory (#20940) (#21894), closes #20720 #20940 #21894
- 821290f [backport releases/v2.0.x] fix(plugins): remove @JsonTypeInfo from RulePluginInterface and AppBlockInterface (#21762), closes #20443 #21676 #21762
- ce880ac Merge commit from fork
- 09670fa Merge commit from fork
Credits
- Credit to Diya virmani (@diyaavirmani) for security advisory GHSA-4cpw-cp2h-qh6q
- Credit to Hama1cco (@Hama1cco) for security advisory GHSA-f5h6-rg96-px74
Contributors
We'd like to thank the following people for their contributions: AyushVUpadhye, Barthélémy Ledoux, Claude, Claude Opus 5.5, Claude Sonnet 5, GitHub, Loïc Mathieu, Maxime Wojtczak, Miloš Paunović, Piyush Bhaskar, Roman Acevedo, Steven Meek, diyaavirmani, github-actions[bot]
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
🌟 What is Kestra?
Kestra is an open-source, event-driven orchestration platform for data, AI, and infrastructure workflows. It unifies scheduled and event-driven automation behind a declarative, language-agnostic interface. By bringing Infrastructure as Code best practices to your data, process, and microservice pipelines, you can build reliable workflows directly from the UI in just a few lines of YAML, let the built-in AI Copilot write them for you, or generate them straight from your coding agent (Claude Code, Cursor, Windsurf, and others) with Agent Skills.
📖 Table of Contents
- ✨ What's New in 2.0
- 🚀 Quick Start
- 🧩 Plugin Ecosystem
- 📚 Key Concepts
- 🎨 Build Workflows Visually
- 🔧 Extensible and Developer-Friendly
- 🌐 Join the Community
- 🤝 Contributing
- 📄 License
- ⭐️ Stay Updated
Key Features:
- Everything as Code and from the UI: keep workflows as code with a Git Version Control integration, even when building them from the UI.
- Three ways to build the same flow: the YAML editor, the No-Code editor, and the AI Copilot all edit the same flow and stay in sync.
- AI-native orchestration: AI Agents and RAG workflows as first-class task types, plus a built-in MCP server that exposes your flows as tools to any MCP-compatible agent.
- Event-Driven & Scheduled Workflows: automate both scheduled and real-time event-driven workflows via a simple
triggerdefinition. - Declarative YAML Interface: define workflows using a simple configuration in the built-in code editor.
- Rich Plugin Ecosystem: hundreds of plugins built in to extract data from any database, cloud storage, or API, and run scripts in any language.
- Intuitive UI & Code Editor: build and visualize workflows directly from the UI with syntax highlighting, auto-completion and real-time syntax validation.
- Scalable: designed to handle millions of workflows, with high availability and fault tolerance. Workers talk to the control plane over gRPC, so they can run in another region or inside a restricted network.
- Version Control Friendly: write your workflows from the built-in code Editor and push them to your preferred Git branch directly from Kestra, enabling best practices with CI/CD pipelines and version control systems. Save a flow as a draft to iterate without disrupting the revision your triggers are running.
- Structure & Resilience: tame chaos and bring resilience to your workflows with namespaces, labels, subflows, retries, timeout, error handling, inputs, outputs that generate artifacts in the UI, variables, conditional branching, advanced scheduling, event triggers, backfills, dynamic tasks, sequential and parallel tasks, checks that validate preconditions before an execution starts, quotas that cap how many executions a flow can create in a time window, and skip tasks or triggers when needed by setting the flag
disabledtotrue.
🧑💻 The YAML definition gets automatically adjusted any time you make changes to a workflow from the UI or via an API call. Therefore, the orchestration logic is always managed declaratively in code, even if you modify your workflows in other ways (UI, No-Code editor, AI Copilot, CI/CD, Terraform, API calls).
✨ What's New in 2.0
Kestra 2.0 is a major release. The highlights below are the short version. See What's New in Kestra 2.0 for the full list, and the 2.0 migration guide for breaking changes and upgrade steps.
AI
- AI Copilot is now a persistent sidebar with Ask, Edit, and Plan modes, and it reads your namespace metadata so suggestions reuse the credentials you already configured.
- AI Agents and RAG workflows let you orchestrate LLM calls, vector stores, and chunking inside a flow, with token usage reported per execution.
- The MCP server, the MCP Tool Trigger, and Agent Skills make your flows callable from AI agents and coding assistants.
Workflow components
ForEachandForEachItemare replaced by a singleLooptask.- Trigger
conditionsare now written aswhen, alongside new date helpers such asisWeekend(),isPublicHoliday(),isDayWeekInMonth(), andisLastWorkingDay(). See date functions. - The new
subflow()function returns a subflow's outputs inline in an expression, with no dedicated task. - Inputs gain
{label, value}options forSELECT/MULTISELECT, JSON Schema validation, and aFORMtype that groups inputs into a multi-step wizard. - Draft revisions let you stage flow changes while triggers keep running the last published revision.
- Triggers can attach labels to the executions they create.
Developer experience
- The No-Code editor builds flows block by block, with a guided form per task and the available upstream outputs listed alongside.
- Plugin Artifacts let a plugin ship Vue components that load into the Kestra UI at runtime, and plugin file renderers preview task output files inline.
kestractlcovers flows, plugins, and IAM; the VS Code extension can mount a namespace as a live folder.
Infrastructure
- Worker communication moved from the JDBC queue to a gRPC worker-controller, separating the control plane from the data plane. Task run outputs live in dedicated storage instead of inline in the execution record, which shrinks the database and speeds up the execution list. See Architecture.
- Four new VM task runners: AWS EC2, Azure Virtual Machine, Google Compute Engine, and Huawei Cloud CCI.
- The
-no-pluginsimage suffix is now-slim, andKESTRA_PLUGINS_AUTO_INSTALL_ENABLED=truefetches plugins from Maven Central on demand. The Quick Start command below uses both. PurgeStoragecleans internal storage by last-modified date, including files whose execution records are already gone.- HTTP task URL filtering lets operators allow-list or deny-list the URLs HTTP tasks may reach.
Enterprise Edition also gains an action-based RBAC model, Policies, Cases for incident management, Promote for UI-driven cross-instance deployment, Reusable Inputs, Worker Groups 2.0, and an external log data store.
🚀 Quick Start
Launch on AWS (CloudFormation)
Deploy Kestra on AWS using our CloudFormation template:
Launch on Azure (Terraform deployment)
Deploy Kestra on an Azure Virtual Machine with Azure Database for PostgreSQL and Azure Blob Storage using our Terraform module. See the Azure VM installation guide for architecture and configuration details.
Launch on Google Cloud (Terraform deployment)
Deploy Kestra on Google Cloud Infrastructure Manager using our Terraform module.
Get Started Locally in 5 Minutes
Launch Kestra in Docker
Make sure that Docker is running. Then, start Kestra in a single command:
docker run --pull=always --rm -it -p 8080:8080 --user=root \
--name kestra \
-v kestra_data:/app/storage \
-v kestra_db:/app/data \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /tmp:/tmp \
-e KESTRA_PLUGINS_AUTO_INSTALL_ENABLED=true \
kestra/kestra:latest-slim server local
If you're on Windows and use PowerShell:
docker run --pull=always --rm -it -p 8080:8080 --user=root `
--name kestra `
-v "kestra_data:/app/storage" `
-v "kestra_db:/app/data" `
-v "/var/run/docker.sock:/var/run/docker.sock" `
-v "C:/Temp:/tmp" `
-e KESTRA_PLUGINS_AUTO_INSTALL_ENABLED=true `
kestra/kestra:latest-slim server local
If you're on Windows and use Command Prompt (CMD):
docker run --pull=always --rm -it -p 8080:8080 --user=root ^
--name kestra ^
-v "kestra_data:/app/storage" ^
-v "kestra_db:/app/data" ^
-v "/var/run/docker.sock:/var/run/docker.sock" ^
-v "C:/Temp:/tmp" ^
-e KESTRA_PLUGINS_AUTO_INSTALL_ENABLED=true ^
kestra/kestra:latest-slim server local
If you're on Windows and use WSL (Linux-based environment in Windows):
docker run --pull=always --rm -it -p 8080:8080 --user=root \
--name kestra \
-v kestra_data:/app/storage \
-v kestra_db:/app/data \
-v "/var/run/docker.sock:/var/run/docker.sock" \
-v "/mnt/c/Temp:/tmp" \
-e KESTRA_PLUGINS_AUTO_INSTALL_ENABLED=true \
kestra/kestra:latest-slim server local
The -slim image ships without bundled plugins to keep the download small; KESTRA_PLUGINS_AUTO_INSTALL_ENABLED=true makes Kestra fetch each plugin from Maven Central the first time a flow needs it. Prefer everything bundled up front? Use kestra/kestra:latest instead and drop the environment variable.
Check our Installation Guide for other deployment options (Docker Compose, Podman, Kubernetes, AWS, GCP, Azure, and more).
Access the Kestra UI at http://localhost:8080 and start building your first flow!
Your First Hello World Flow
Create a new flow with the following content:
id: hello_world
namespace: dev
tasks:
- id: say_hello
type: io.kestra.plugin.core.log.Log
message: "Hello, World!"
Run the flow and see the output in the UI!
🧩 Plugin Ecosystem
Kestra's functionality is extended through a rich ecosystem of plugins that empower you to run tasks anywhere and code in any language, including Python, Node.js, R, Go, Shell, and more. Here's how Kestra plugins enhance your workflows:
-
Run Anywhere:
- Local or Remote Execution: Execute tasks on your local machine, remote servers via SSH, or scale out to serverless containers and cloud VMs using Task Runners, including the AWS EC2, Azure Virtual Machine, and Google Compute Engine runners added in 2.0.
- Docker and Kubernetes Support: Seamlessly run Docker containers within your workflows or launch Kubernetes jobs to handle compute-intensive workloads.
-
Code in Any Language:
- Scripting Support: Write scripts in your preferred programming language. Kestra supports Python, Node.js, R, Go, Shell, and others, allowing you to integrate existing codebases and deployment patterns.
- Flexible Automation: Execute shell commands, run SQL queries against various databases, and make HTTP requests to interact with APIs.
-
AI and LLMs:
- Model-Agnostic Tasks: Call OpenAI, Anthropic, Google Gemini, Amazon Bedrock, Ollama, and other providers from the same task interface.
- Agents and RAG: Build AI agents with tool calling, or RAG pipelines with document chunking and vector store ingestion.
-
Event-Driven and Real-Time Processing:
- Real-Time Triggers: React to events from external systems in real-time, such as file arrivals, new messages in message buses (Kafka, Redis, Pulsar, AMQP, MQTT, NATS, AWS SQS, Google Pub/Sub, Azure Event Hubs), and more.
- Custom Events: Define custom events to trigger flows based on specific conditions or external signals, enabling highly responsive workflows.
-
Cloud Integrations:
- AWS, Google Cloud, Azure: Integrate with a variety of cloud services to interact with storage solutions, messaging systems, compute resources, and more.
- Big Data Processing: Run big data processing tasks using tools like Apache Spark or interact with analytics platforms like Google BigQuery.
-
Monitoring and Notifications:
- Stay Informed: Send messages to Slack channels, email notifications, or trigger alerts in PagerDuty to keep your team updated on workflow statuses.
Kestra's plugin ecosystem is continually expanding, allowing you to tailor the platform to your specific needs. Whether you're orchestrating complex data pipelines, automating scripts across multiple environments, or integrating with cloud services, there's likely a plugin to assist. And if not, you can always build your own plugins to extend Kestra's capabilities.
🧑💻 Note: This is just a glimpse of what Kestra plugins can do. Explore the full list on our Plugins Page.
📚 Key Concepts
- Flows: the core unit in Kestra, representing a workflow composed of tasks.
- Tasks: individual units of work, such as running a script, moving data, or calling an API.
- Namespaces: logical grouping of flows for organization and isolation.
- Triggers: schedule or events that initiate the execution of flows.
- Inputs & Variables: parameters and dynamic data passed into flows and tasks.
- Outputs: values and files a task passes downstream, surfaced as artifacts in the UI.
- Checks: preconditions evaluated before an execution starts, so a flow fails fast instead of half-running.
- Quotas: limits on how many executions a flow may create in a time window, failing or cancelling the excess.
🎨 Build Workflows Visually
Kestra provides an intuitive UI that allows you to interactively build and visualize your workflows:
- No-Code Editor: build a flow block by block, with a guided form for every task and the upstream outputs available at that point listed next to it.
- AI Copilot: describe what you want in the Ask, Edit, or Plan sidebar and review the generated YAML before it is applied.
- Drag-and-Drop Interface: add and rearrange tasks from the Topology Editor.
- Real-Time Validation: instant feedback on your workflow's syntax and structure to catch errors early.
- Auto-Completion: smart suggestions as you type to write flow code quickly and without syntax errors.
- Live Topology View: see your workflow as a Directed Acyclic Graph (DAG) that updates in real-time.
The YAML editor, the No-Code editor, and the AI Copilot all edit the same flow, so a change in one is reflected immediately in the others.
🔧 Extensible and Developer-Friendly
Plugin Development
Create custom plugins to extend Kestra's capabilities. Check out our Plugin Developer Guide to get started. Plugins can also define UI artifacts such as Topology nodes, which are Vue components loaded into the Kestra UI at runtime, and custom file renderers that preview task outputs inline.
Infrastructure as Code
- Version Control: store your flows in Git repositories.
- CI/CD Integration: automate deployment of flows using CI/CD pipelines.
- Terraform Provider: manage Kestra resources with the official Terraform provider (
~> 2.0for Kestra 2.x).
CLI, SDKs, and Editors
kestractl: manage flows, namespace files, plugins, and IAM from the terminal. See the CLI reference.- SDKs: drive the API from Python or JavaScript.
- VS Code extension: mount a namespace as a live folder, upload files, and sync directories. See the extension guide.
- AI agents: point any MCP-compatible agent at the built-in MCP server, or use Agent Skills from your coding assistant.
🌐 Join the Community
Stay connected and get support:
- Slack: Join our Slack community to ask questions and share ideas.
- LinkedIn: Follow us on LinkedIn — next to Slack and GitHub, this is our main channel to share updates and product announcements.
- YouTube: Subscribe to our YouTube channel for educational video content. We publish new videos every week!
- X: Follow us on X if you're still active there.
🤝 Contributing
We welcome contributions of all kinds!
- Report Issues: Found a bug or have a feature request? Open an issue on GitHub.
- Contribute Code: Check out our Contributor Guide for initial guidelines, and explore our good first issues for beginner-friendly tasks to tackle first.
- Develop Plugins: Build and share plugins using our Plugin Developer Guide.
- Contribute to our Docs: Contribute edits or updates to keep our documentation top-notch.
📄 License
Kestra is licensed under the Apache 2.0 License © Kestra Technologies.
⭐️ Stay Updated
Give our repository a star to stay informed about the latest features and updates!
Thank you for considering Kestra for your workflow orchestration needs. We can't wait to see what you'll build!
