Experiment and Debug Workflows with Kestra Playground

For the complete documentation index, see llms.txt. For a full content snapshot, see llms-full.txt. Append .md to any kestra.io/docs/* URL for plain Markdown.

Available on:Open Source EditionEnterprise Edition

Playground mode supports iterative flow development by running tasks individually rather than executing the full workflow.

Playground mode lets you build workflows iteratively, one task at a time. This feature is especially useful when building data processing flows, where you typically start with a task extracting data, and you need to inspect the output before knowing what kind of transformation might be required. Then, you can work on that transformation task without rerunning the extraction task.

If you’ve ever worked with a Jupyter notebook, you might be familiar with this pattern: you run the first cell to extract data, then you run the second cell to transform that data, and you can rerun the second cell multiple times to test different transformations without having to rerun the first cell again. Kestra’s Playground mode allows you to do the same within your flows.

Running tasks in Playground mode

Playground mode runs tasks one at a time via their Play button. Each task reuses the cached outputs of all upstream tasks that have already been played, so only the selected task re-executes. Run all tasks and Run all downstream tasks are available to run multiple tasks in sequence.

Kestra tracks up to 10 recent playground runs, so you can go back to inspect the outputs of previously executed tasks. Older runs are purged automatically. Playground runs won’t appear in the regular execution list to avoid confusion with production executions.

Playground mode requires a DAG (Directed Acyclic Graph) structure, so you cannot run a task before its upstream tasks have been played.

When reused results are reset

Playground reuses earlier task outputs as long as nothing that affects them has changed. It starts a fresh run when you change:

  • a task before the one you run
  • the flow inputs
  • the flow labels
  • the flow variables

Playground only tracks the flow definition. Reused results can still be out of date after a change to namespace files, KV store entries, secrets, or an external system a task reads from. Use Run all tasks to start a fresh run when you change any of these.

To see Playground in action, check out the demo below.

id: playground_data_pipeline
namespace: company.team
description: |
A step-by-step data pipeline designed for the Playground feature.
Run each task individually to inspect outputs before proceeding to the next stage.
labels:
team: engineering
type: demo
tasks:
- id: fetch_products
type: io.kestra.plugin.core.http.Request
uri: https://jsonplaceholder.typicode.com/todos?_limit=10
method: GET
- id: extract_titles
type: io.kestra.plugin.core.debug.Return
format: "{{ outputs.fetch_products.body | jq('map(select(.completed == false)) | map(.title)') }}"
- id: count_pending
type: io.kestra.plugin.core.debug.Return
format: "{{ outputs.fetch_products.body | jq('[.[] | select(.completed == false)] | length') }}"
- id: build_report
type: io.kestra.plugin.core.debug.Return
format: "Pending tasks: {{ outputs.count_pending.value }} | First item: {{ outputs.extract_titles.value | jq('.[0]') }}"

Was this page helpful?