- Directed: dependencies flow in one direction.
- Acyclic: cycles are not allowed — a task cannot depend on another task that eventually depends back on the original (prevents infinite loops).

- Make complex dependencies explicit and easy to read.
- Enable parallel execution of independent tasks, improving throughput.
- Prevent infinite loops by design.
- Allow more efficient scheduling and faster end-to-end completion by running independent tasks concurrently.
| Feature | Use case | Example |
|---|---|---|
| Directed, Acyclic | Prevent cycles and model dependency flow | Data pipelines, ETL jobs |
| Parallelism / Fan-out | Run independent tasks concurrently | Parallel data transforms |
| Fan-in | Wait until multiple tasks finish | Aggregation or reduce step |
| failFast | Stop scheduling new tasks after a failure | Fail-fast CI pipelines |
| depends expression | Complex boolean dependency logic | Conditional task runs based on multiple predecessors |
- Task A runs first.
- When A succeeds, tasks B and C run in parallel (fan-out).
- Task D runs only after both B and C finish successfully (fan-in).
- Task A starts first (no dependencies).
- After A completes, the controller starts B and C in parallel.
- Task D waits until both B and C have succeeded.
depends expressions
Argo supports a depends expression (string) that lets you specify boolean logic and check node outcomes such as Succeeded, Failed, Skipped, Error, Omitted, and Deemed. This is useful when you need conditional execution beyond simple “all predecessors succeeded”.
Example using boolean depends expressions:
- A and B run in parallel. If A succeeds and B fails:
- C (
A.Succeeded || B.Succeeded) evaluates to true and runs. - D (
A.Succeeded && B.Succeeded) evaluates to false and is skipped.
- C (
dependencies array -> depends expression
You cannot use dependencies (array) and depends (expression) on the same task. To convert an array-style dependency to a depends expression, join the nodes with the operator you need.
Example:
- Original (array-style):
- Equivalent
dependsexpression (all must succeed):
&& with || or build more complex expressions with parentheses and NOT as needed.
The
depends field is a string expression evaluated by the controller. It is mutually exclusive with the dependencies array — use one or the other.failFast flag on the DAG. Set failFast: false when you want independent branches to keep running even if another branch fails.
Example showing failFast (default behavior shown as true here):
- Use false for environments where long-running independent branches must complete (e.g., batch processing), and you prefer to gather results even if one branch fails.
- Official Argo Workflows docs: https://argoproj.github.io/argo-workflows/
- Argo Workflows DAG docs: https://argoproj.github.io/argo-workflows/workflow-types/dag/
- Kubernetes Concepts: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/