> For the complete documentation index, see [llms.txt](https://docs.devicecloud.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devicecloud.dev/configuration/workspace-config.md).

# Workspace Configuration

A `config.yaml` (or `config.yml`) file lets you configure how the CLI discovers, filters, and runs your flows without needing to pass every option on the command line. It is recommended for any project with more than a handful of flows.

## Auto-detection

Place your `config.yaml` file at the root of the directory you pass to `dcd cloud` and the CLI will pick it up automatically.

```bash
dcd cloud app.apk flows/        # flows/config.yaml is loaded automatically
```

## Custom path

Use `--config` to load a config file from a non-standard location:

```bash
dcd cloud app.apk flows/ --config ci/workspace.yaml
```

## Fields

### `flows`

Glob patterns that select which flow files to run. Accepts a list of patterns using the [NPM glob](https://www.npmjs.com/package/glob) syntax.

```yaml
flows:
  - ./**/*.yaml        # all YAML files recursively
  - ./smoke/*.yaml     # only files inside smoke/
```

Files named `config.yaml` / `config.yml` and paths containing `.app` path segments are always excluded regardless of the pattern.

If `flows` is omitted, all `.yaml` / `.yml` files in the directory (except config files) are included.

### `includeTags` / `excludeTags`

Filter flows by their Maestro `tags`. Values here are **merged** with any tags set using the CLI flags.

```yaml
includeTags:
  - smoke
excludeTags:
  - slow
  - wip
```

### `executionOrder`

Run a subset of flows sequentially (in order) before the remaining flows run in parallel.

```yaml
executionOrder:
  continueOnFailure: false
  flowsOrder:
    - login         # matches flow with name: "login" or file login.yaml
    - checkout
    - payment
```

* `flowsOrder` — list of flow names to run in sequence. A name matches either the `name:` field inside the flow YAML or the filename without extension.
* `continueOnFailure` — if `true`, subsequent flows in the sequence run even if an earlier one fails. Defaults to `true`. Set it to `false` when a later flow depends on an earlier one having passed.

{% hint style="warning" %}
**`executionOrder` must be a map containing `flowsOrder`.** A bare list of flow names is not valid:

```yaml
# WRONG — rejected by the CLI
executionOrder:
  - login
  - checkout
```

```yaml
# RIGHT
executionOrder:
  flowsOrder:
    - login
    - checkout
```

The bare-list form is not valid Maestro either. Older CLI versions accepted it and silently ignored it, so the flows ran **in parallel** while the run still reported success — the only symptom was flows executing out of order. The CLI now fails with an error naming the expected shape instead.
{% endhint %}

{% hint style="info" %}
If a flow name in `flowsOrder` doesn't match any discovered flow (e.g. after tag filtering), the CLI will emit a warning and lists the available names to help diagnose the mismatch.

Unrecognised top-level keys are also warned about (and ignored), which catches typos like `flowOrder`, a `continueOnFailure` placed at the top level instead of under `executionOrder`, and `tags:` in place of `includeTags`/`excludeTags`.
{% endhint %}

### `notifications`

Send email notifications when a run completes. See [Email Notifications](/notifications/email-notifications.md) for full context.

```yaml
notifications:
  email:
    enabled: true
    onSuccess: false   # set to true to also notify on passing runs
    recipients:
      - team@example.com
      - ci-alerts@example.com
```

### `platform`

Per-platform settings. Currently supports disabling animations, which is equivalent to passing `--disable-animations` on the CLI but lets you control each platform independently. The CLI flag takes precedence if both are set.

```yaml
platform:
  android:
    disableAnimations: true   # disables system animation scales
  ios:
    disableAnimations: true   # enables Reduce Motion on the simulator
```

## Full example

```yaml
flows:
  - ./**/*.yaml

includeTags:
  - smoke

excludeTags:
  - wip

executionOrder:
  continueOnFailure: false
  flowsOrder:
    - login
    - onboarding

notifications:
  email:
    enabled: true
    onSuccess: false
    recipients:
      - team@example.com

platform:
  android:
    disableAnimations: true
  ios:
    disableAnimations: true
```
