Tasks are the steps within a flow.

They represent discrete actions, capable of processing inputs and variables and producing outputs for downstream consumption by end users and other tasks.

Flowable tasks

Kestra orchestrates flows using Flowable tasks. These tasks do not perform heavy computation. Instead, they control orchestration behavior, enabling advanced workflow patterns.

Example Flowable tasks include:

  • io.kestra.plugin.core.flow.Parallel
  • io.kestra.plugin.core.flow.Switch
  • io.kestra.plugin.core.flow.ForEachItem

Read the full list on the Flowable tasks page.

Runnable tasks

Most data processing in Kestra is performed by Runnable tasks.

Unlike Flowable tasks, Runnable tasks perform the actual work — such as file system operations, API calls, or database queries. These tasks can be compute-intensive and are executed by workers.

Example runnable tasks include:

  • io.kestra.plugin.scripts.python.Commands
  • io.kestra.plugin.core.http.Request
  • io.kestra.plugin.notifications.slack.SlackExecution

Core task properties

All tasks share the following core properties:

FieldDescription
idA unique identifier within the flow
typeThe Java Fully Qualified Class Name (FQCN) of the task
descriptionThe description of the task
retryTask retry behavior
runIfTo skip the task execution if the provided condition evaluates to false
timeoutTask timeout expressed in ISO 8601 Durations
disabledSet it to true to disable execution of the task
workerGroup.keyTo execute this task on a specific Worker Group (EE)
allowFailureBoolean flag allowing to the execution to continue even if this task fails
allowWarningBoolean flag allowing to the execution to finish with a SUCCESS state even if this task produces a warning
logLevelDefines the log level persisted to the backend database. By default, all logs are stored. For example, restricting to INFO prevents DEBUG and TRACE logs from being saved.
logToFileStores logs in internal storage as a file instead of the database. Files can be previewed and downloaded from the Logs and Gantt tabs. Useful for tasks that generate large volumes of logs. Also available for triggers.

Dynamic vs. static task properties

Task properties can be static or dynamic. Dynamic properties can be set using expressions. To determine whether a property is static or dynamic, check the task’s documentation on the plugin's homepage or in the UI by clicking on the documentation tab for the task.

dynamic_properties

Some properties are marked as not dynamic because they are complex types (e.g., maps, lists of strings, lists of maps). These act as placeholders for other dynamic properties.

For example, the runTasks property of Databricks' SubmitRun is not dynamic because it is an array of RunSubmitTaskSetting.

Each RunSubmitTaskSetting contains its own properties, many of which are dynamic or placeholders for more complex types. Always drill down to the lowest level — most low-level properties are dynamic and can be templated using expressions.

Was this page helpful?