---
next_cursor: eyJzY29yZSI6MCwic2VxIjoxNTQ3LCJzaW5jZSI6bnVsbCwidG9vbCI6InRlcnJhZ3J1bnQiLCJ2IjoxfQ
has_more: true
next: https://sincecutoff.com/v1/changes.md?tool=terragrunt&score=0&cursor=eyJzY29yZSI6MCwic2VxIjoxNTQ3LCJzaW5jZSI6bnVsbCwidG9vbCI6InRlcnJhZ3J1bnQiLCJ2IjoxfQ
items: 10
---
# sincecutoff.com changes: terragrunt

## terragrunt --filter is generally available for Run Queue targeting (terragrunt, 2026-01-05)
Published 2026-10-19
- slug: terragrunt-filter-is-generally-available-for-run-queue-targeting-b46b95ad249b
- score: 0.93

How to use it:

For targeted Run Queue discovery or execution, use Terragrunt’s unified `--filter` expressions for paths, files read, and dependency traversal. Use `--filters-file` for newline-delimited filters; a legacy excludes file needs conversion to filter expressions.

Examples:

```
terragrunt find --filter '{./<path>}'
```

```
terragrunt find --filter 'reading=<file>'
```

```
terragrunt run --all --filters-file <filters.txt> -- <tofu-command>
```

- why_it_matters: Target units or visualize the Run Queue in a Terragrunt repository using unified filter expressions.
- before: Use the corresponding queue control flag: `--queue-include-dir`, `--queue-exclude-dir`, `--queue-include-units-reading`, `--units-that-include`, `--queue-include-external-dependencies`, `--queue-excludes-file`, or `--graph`.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v0.97.0>, <https://docs.terragrunt.com/features/filter/filters-file/>, <https://docs.terragrunt.com/features/filter/graph/>
- gotchas: "Version: v0.97.0"; "Availability: The --filter flag is generally available; legacy queue flag aliases will not be removed before Terragrunt 1.0."; "--filter <expression>: Select units/stacks with a filter expression; repeat the flag to combine filters. Path inclusion uses `{./path}`, exclusion uses `!{./path}`, file-read matching uses `reading=<file>`, and graph traversal uses `...` around a target."; "--filters-file <file>: Read filter expressions from a newline-delimited text file; the docs show empty lines and `#` comment lines are ignored."; "reading=<file>: Attribute expression that matches units/stacks that read the named file."; "...: Graph traversal operator; after a target includes its dependencies, before a target includes its dependents. Both directions are supported by surrounding the target."; "Prerequisite: Terragrunt v0.97.0 or later for the generally available `--filter` flag."; "Prerequisite: Filters files contain newline-delimited expressions; the v0.97.0 release note says a `--queue-excludes-file` file does not directly translate to a `--filters-file` file."; "A file used for `--queue-excludes-file` does not directly translate to a file usable with `--filters-file`."; "Legacy queue flag aliases remain for backwards compatibility and will not emit deprecation warnings."; "Docs conflict: Current docs describe graph expressions as `...<target>` for dependents and `<target>...` for dependencies; this differs from the v0.97.0 release note’s `{./**}...` and `...{.}` examples. Use the release-note mappings for v0.97.0."

## terragrunt find --filter supports dependency traversal depth (terragrunt, 2026-01-26)
Published 2026-10-19
- slug: terragrunt-find-filter-supports-dependency-traversal-depth-abe1cda0531c
- score: 0.98

How to use it:

When you need to discover units with dependency or dependent traversal capped at selected depths, run `terragrunt find --filter` with a number on the graph-expression ellipsis. For example, `terragrunt find --filter 'service...1'` finds `service` and its direct dependencies.

Examples:

```
terragrunt find --filter 'service...1'
```

```
terragrunt find --filter '1...vpc'
```

```
terragrunt find --filter '1...db...2'
```

- why_it_matters: Find Terragrunt units within a dependency graph while limiting traversal to selected graph depths.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v0.99.0>
- gotchas: "Version: v0.99.0"; "--filter (required): Filter query; graph expressions can bound traversal depth by appending or prepending a number to an ellipsis."

## terragrunt.stack.hcl autoinclude dependency wiring with stack-dependencies (terragrunt, 2026-04-13)
Published 2026-10-19
- slug: terragrunt-stack-hcl-autoinclude-dependency-wiring-with-stack-dependencies-e0ba8c7ca403
- score: 0.92

How to use it:

When generating a stack with unit dependencies or configuration overrides, enable the `stack-dependencies` experiment and put an `autoinclude` block inside the unit in `terragrunt.stack.hcl`. Then run the plan command across all units.

Examples:

```
unit "app" {
  source = "../catalog/units/app"
  path   = "app"

  autoinclude {
    dependency "vpc" {
      config_path = unit.vpc.path
    }

    inputs = {
      vpc_id = dependency.vpc.outputs.vpc_id
    }
  }
}
```

```
terragrunt run --all --experiment stack-dependencies -- plan
```

- why_it_matters: Define dependencies and configuration overrides between units when generating a stack.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.1>, <https://docs.terragrunt.com/reference/cli/commands/run/>
- gotchas: "Version: v1.0.1"; "Availability: experiment"; "--all (required): Run the specified OpenTofu/Terraform command against all units in the current stack."; "--experiment stack-dependencies (required): Enable the stack-dependencies experiment for this run."; "autoinclude (required): Block in a unit that enables dependency relationships and configuration overrides during stack generation."; "dependency \"vpc\" (required): Declare a dependency named `vpc` in the autoinclude block."; "config_path (required): Set the dependency configuration path to `unit.vpc.path`."; "inputs: Set the generated unit input `vpc_id` from `dependency.vpc.outputs.vpc_id`."; "-- / plan (required): The separator passes `plan` as the OpenTofu/Terraform command."; "Prerequisite: Use Terragrunt v1.0.1, the release version that introduces this experiment."; "Docs conflict: Current active-experiments documentation does not list `stack-dependencies`; current v1.1 release documentation says the feature is enabled by default there. Those newer docs do not establish v1.0.1 behavior, so the v1.0.1 release note is used for the experiment requirement."

## terragrunt stack-dependencies supports cross-stack dependency patterns (terragrunt, 2026-04-21)
Published 2026-10-19
- slug: terragrunt-stack-dependencies-supports-cross-stack-dependency-patterns-3f8e54636763
- score: 0.96

How to use it:

When a stack needs dependencies on another stack or a unit in a nested stack, declare them in `autoinclude` in `terragrunt.stack.hcl` using stack paths and dependency outputs. Plan all units with the `stack-dependencies` experiment enabled.

Examples:

```
stack "infra" {
  source = "<stack-source>"
  path   = "infra"
}

unit "app" {
  source = "<unit-source>"
  path   = "app"

  autoinclude {
    dependency "infra" {
      config_path = stack.infra.path
    }
    inputs = {
      vpc_id = dependency.infra.outputs.vpc.vpc_id
    }
  }
}
```

```
stack "networking" {
  source = "<stack-source>"
  path   = "networking"
}

unit "app" {
  source = "<unit-source>"
  path   = "app"

  autoinclude {
    dependency "vpc" {
      config_path = stack.networking.vpc.path
    }
    inputs = {
      vpc_id = dependency.vpc.outputs.vpc_id
    }
  }
}
```

```
terragrunt run --all --experiment stack-dependencies -- plan
```

- why_it_matters: Configure a Terragrunt stack so units can depend on another stack or on a unit in a nested stack.
- before: Before stack dependencies, stacks passed dependency paths to units through `values`, and units declared `dependency` blocks using those values as `config_path`.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.2>, <https://docs.terragrunt.com/reference/cli/commands/run/>, <https://github.com/gruntwork-io/terragrunt-infrastructure-catalog-example/blob/main/docs/1.1-migration-guide.md>
- gotchas: "Version: v1.0.2"; "Availability: The `stack-dependencies` experiment."; "stack.<name>.path (required): Path reference for depending on the whole named stack."; "stack.<name>.<unit_name>.path (required): Path reference for depending on a unit within a nested stack."; "dependency.<name>.config_path (required): Path to the dependency configuration; examples set it to a stack path reference."; "dependency.<name>.outputs.<unit_name>.<output_key>: Access an output from a unit through a dependency targeting a stack directory; use the dependent stack's name and the unit/output names."; "--all: Run the specified OpenTofu/Terraform command against all units in the current stack."; "--experiment stack-dependencies (required): Enables the stack-dependencies experiment for the command."; "plan (required): OpenTofu/Terraform command passed to `terragrunt run`."; "Prerequisite: Enable the `stack-dependencies` experiment for the run with `--experiment stack-dependencies`."; "Prerequisite: The stack and unit declarations, including their `source` and `path`, belong in `terragrunt.stack.hcl`; `autoinclude` is nested in the unit or stack declaration."

## terragrunt CAS integrates with stacks through update_source_with_cas (terragrunt, 2026-04-27)
Published 2026-10-19
- slug: terragrunt-cas-integrates-with-stacks-through-update-source-with-cas-76df6b7a5d14
- score: 0.96

How to use it:

When a catalog unit uses a relative source path, set `update_source_with_cas = true` and generate the stack with CAS enabled; Terragrunt rewrites the source to a `cas::` reference. The v1.0.3 release note says to enable the `cas` experiment, but current documentation no longer lists CAS as an experiment.

Examples:

```
unit "service" {
  source = "../..//units/my-service"
  update_source_with_cas = true
  path = "service"
}

terragrunt stack generate --experiment cas
```

- why_it_matters: Generate a stack from catalog units whose Terraform source paths are relative to the catalog repository.
- before: Without CAS, catalog authors used remote Git URLs and threaded the reference through `values` expressions.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.3>, <https://docs.terragrunt.com/features/stacks/explicit/>, <https://docs.terragrunt.com/reference/cli/commands/stack/generate/>
- gotchas: "Version: v1.0.3"; "Availability: The `cas` experiment is required."; "source (required): Relative source path within the same repository; `//` separates the repository base path from the subdirectory."; "update_source_with_cas: Set to `true` to rewrite a nested relative source to a `cas::` reference during stack generation."; "path (required): Relative destination path for the generated unit."; "stack generate (required): Generates stack units from discovered `terragrunt.stack.hcl` configurations."; "Prerequisite: The relative source must stay within the same repository; `--no-cas` must not be set."; "Prerequisite: The v1.0.3 release note says the `cas` experiment must be enabled. Current active-experiment docs do not list CAS as an experiment."; "The repository is cloned once; subsequent stack generations resolve content from the local store without network access."; "Docs conflict: Current documentation describes CAS integration but no longer documents the `cas` experiment enable flag; it may describe behavior newer than v1.0.3."

## terragrunt catalog discovery and filtering with catalog-redesign (terragrunt, 2026-04-27)
Published 2026-10-19
- slug: terragrunt-catalog-discovery-and-filtering-with-catalog-redesign-dc56c450c2af
- score: 0.98

How to use it:

When using Terragrunt v1.0.3 catalog discovery, enable the `catalog-redesign` experiment and run `terragrunt catalog`; add root `.terragrunt-catalog-ignore` rules to exclude paths. For extra rules, use `--ignore-file <path>` or `TG_IGNORE_FILE`; the docs confirm the command and ignore behavior, but not the experiment requirement at v1.0.3.

Examples:

```
terragrunt catalog
```

```
terragrunt catalog --ignore-file <path>
```

- why_it_matters: Discover modules and templates across a repository and exclude selected paths from the catalog.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.3>, <https://docs.terragrunt.com/features/catalog/tui/>
- gotchas: "Version: v1.0.3"; "Availability: The `catalog-redesign` experiment is required."; "--ignore-file <path>: Path to an additional ignore file; its rules are appended after root `.terragrunt-catalog-ignore` rules, and the file must exist."; "TG_IGNORE_FILE: Environment-variable alternative to `--ignore-file`."; "Prerequisite: The docs describe `catalog-redesign` behavior as default in v1.1, with no experiment required; they do not document v1.0.3's experiment prerequisite."; "Ignore patterns are anchored at the repository root, one per line; `#` starts a comment, `!` negates, and the last match wins."; "A lone `*` does not cross `/`; `**` does."; "A directory that qualifies as both a template and a module is classified as a template."; "Docs conflict: Current docs describe default catalog behavior at v1.1, later than the card's v1.0.3; they do not verify its experiment switch or v1.0.3 usage."

## terragrunt mark-many-as-read enables source tracking and mark_glob_as_read (terragrunt, 2026-04-27)
Published 2026-10-19
- slug: terragrunt-mark-many-as-read-enables-source-tracking-and-mark-glob-as-read-751f5d3cb01f
- score: 0.98

How to use it:

When a unit reads files indirectly or consumes a local Terraform module, enable `mark-many-as-read` so reading-based filters can select it when those files change. Use `mark_glob_as_read(pattern)` in `locals` to record matching files; local module source files are marked automatically.

Examples:

```
terragrunt run --all --filter 'reading=../../modules/service/**' -- plan
```

```
locals {
  configs = mark_glob_as_read("${get_terragrunt_dir()}/config/{*.yaml,**/*.yaml}")
}
```

```
terragrunt run --all --filter 'reading=./config/**' -- plan
```

- why_it_matters: Make reading-based filters match units that consume module files or indirectly read a collection of files.
- before: Before this change, a local module source did not cause its files to be marked read; for files not tracked natively, `mark_as_read(file_path)` could mark an individual file.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.3>, <https://docs.terragrunt.com/reference/hcl/functions/#mark_glob_as_read>, <https://docs.terragrunt.com/features/filter/attributes/#reading-based-expressions>
- gotchas: "Version: v1.0.3"; "Availability: Requires the `mark-many-as-read` experiment to be enabled; calling `mark_glob_as_read` without it returns an error."; "--experiment mark-many-as-read (required): Enables the experiment behaviors, including `mark_glob_as_read`; the release note says the function errors without it."; "pattern (required): Glob expanded by `mark_glob_as_read`; matches are marked read and returned as absolute paths. Uses `gobwas/glob` syntax. For any-depth matching with a wildcard trailing segment, use `{*.yaml,**/*.yaml}`."; "reading=<path> (required): Reading-based filter expression matching units and stacks by files they read."; "Prerequisite: Use Terragrunt v1.0.3 or later for the release-note change."; "Prerequisite: Enable the `mark-many-as-read` experiment to use `mark_glob_as_read` and automatic local-source file tracking, per v1.0.3 release note. Current documentation says local module files are marked automatically but does not list this experiment as a prerequisite."; "Automatic marking applies recursively to `*.tf`, `*.tf.json`, `*.hcl`, `*.tofu`, and `*.tofu.json` files under the local source path; non-source files such as `README.md` are skipped."; "`mark_glob_as_read` uses the same `gobwas/glob` syntax as filter expressions."; "For match-at-any-depth with a wildcard trailing segment, use `{*.yaml,**/*.yaml}` because `**` only collapses surrounding separators when adjacent segments are literals."; "Docs conflict: Current official filter documentation says local module source files are automatically marked read without mentioning `mark-many-as-read`; current docs also say `mark_glob_as_read` is available, while the v1.0.3 release note requires the experiment. The current docs may reflect later behavior."

## terragrunt stack-dependencies resolves nested stack paths (terragrunt, 2026-04-27)
Published 2026-10-19
- slug: terragrunt-stack-dependencies-resolves-nested-stack-paths-7e1d90af9515
- score: 0.95

How to use it:

When a unit in a parent stack must depend on a nested stack, enable `stack-dependencies` and set the dependency’s `config_path` to `stack.<name>.<nested_stack>.path` (for example, `stack.infra.deep.path`).

Examples:

```
unit "app" {
  source = "../catalog/units/app"
  path   = "app"

  autoinclude {
    dependency "deep" {
      config_path = stack.infra.deep.path
    }
  }
}
```

- why_it_matters: Declare a dependency in a unit of a parent stack on a stack nested inside one of its stacks.
- before: Previously, `stack-dependencies` supported `stack.<name>.path` for a whole stack and `stack.<name>.<unit_name>.path` for a unit inside a stack; it did not resolve the nested-stack reference described by this change.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.3>, <https://docs.terragrunt.com/reference/hcl/blocks/>
- gotchas: "Version: v1.0.3"; "Availability: The `stack-dependencies` experiment is required."; "stack-dependencies (required): Experiment to enable for this feature in v1.0.3."; "autoinclude (required): Unit block that supplies configuration merged into the generated unit configuration."; "dependency \"deep\" (required): Dependency block; `deep` is its label."; "config_path (required): Path to the dependency configuration. Here it uses the nested stack path reference."; "stack.infra.deep.path (required): Reference to the generated path of the `deep` stack nested under `infra`, as stated in the v1.0.3 release note."; "Prerequisite: Enable the `stack-dependencies` experiment."; "Prerequisite: Declare the nested stack in the referenced stack’s `terragrunt.stack.hcl`; the release note example names `catalog/stacks/infra/terragrunt.stack.hcl`."; "Docs conflict: Current HCL blocks documentation says stacks are opaque dependency boundaries and path references cannot target a component inside another stack. This differs from the v1.0.3 release note’s nested-stack behavior; the current page documents a newer behavior/version. https://docs.terragrunt.com/reference/hcl/blocks/"

## terragrunt CAS stack components accept local filesystem sources (terragrunt, 2026-05-07)
Published 2026-10-19
- slug: terragrunt-cas-stack-components-accept-local-filesystem-sources-98e2e018ca2b
- score: 0.95

How to use it:

When iterating on a local catalog with CAS-backed stack generation, set the consumer stack’s `source` to the local catalog subdirectory and run `terragrunt stack generate`; keep `update_source_with_cas = true` in the catalog’s nested source blocks. The local catalog is copied to a temporary directory for rewriting, leaving the original untouched.

Examples:

```
stack "service" {
  source = "../catalog//stacks/service"
  path = "service"
}

terragrunt stack generate
```

```
unit "service" {
  source = "../..//units/my-service"
  update_source_with_cas = true
  path = "service"
}
```

- why_it_matters: Iterate on a stack catalog in a local checkout before tagging a release.
- before: Use a remote Git URL as the `source` for CAS-backed stack generation.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.4>, <https://docs.terragrunt.com/features/stacks/explicit/>, <https://docs.terragrunt.com/features/caching/cas/>
- gotchas: "Version: v1.0.4"; "stack.<name>.source (required): Catalog source; accepts a local filesystem path, including a `//` subdirectory suffix."; "stack.<name>.path (required): Generated path for the component."; "unit.<name>.source (required): Relative path to the component source in the catalog."; "unit.<name>.update_source_with_cas: Set to `true` to rewrite relative source paths to CAS references; requires CAS enabled. Must be set in catalog files, not by consumers."; "Prerequisite: Do not set `--no-cas` when using `update_source_with_cas = true`."; "Prerequisite: Sources using `update_source_with_cas` must be relative paths within the same repository."; "This applies to CAS-backed stack generation."; "The local source path is a directory copied to a temporary directory; the original directory is left untouched."

## terragrunt catalog discovers, copies, and scaffolds unit and stack components (terragrunt, 2026-05-07)
Published 2026-10-19
- slug: terragrunt-catalog-discovers-copies-and-scaffolds-unit-and-stack-components-674296396342
- score: 0.93

How to use it:

When you want to add a catalog unit or stack to your working directory, run `terragrunt catalog`, select it, and choose the copy action. After the TUI exits, use the printed output directory and follow-up command; required `values.<name>` references get `"TODO"` placeholders, while optional `try(...)` references get their literal fallback defaults.

Examples:

```
terragrunt catalog
```

- why_it_matters: Copy a unit or stack from the catalog into a working directory and prepare its referenced values.
- sources: <https://github.com/gruntwork-io/terragrunt/releases/tag/v1.0.4>
- gotchas: "Version: v1.0.4"; "tab: Cycle forward through catalog tabs."; "shift+tab: Cycle backward through catalog tabs."; "values.<name>: A referenced value outside `try(...)` is listed as required and gets a `\"TODO\"` placeholder in the sibling `terragrunt.values.hcl` stub."; "try(...)` fallback: A value referenced through `try(...)` is listed as optional and gets the literal fallback default in the stub."; "An existing `terragrunt.values.hcl` is left alone."; "A directory that matches multiple component kinds is classified by precedence: template, stack, unit, module."

Next: https://sincecutoff.com/v1/changes.md?tool=terragrunt&score=0&cursor=eyJzY29yZSI6MCwic2VxIjoxNTQ3LCJzaW5jZSI6bnVsbCwidG9vbCI6InRlcnJhZ3J1bnQiLCJ2IjoxfQ
Save `next_cursor`; next visit, pass it to get only what was published since.
<!-- end of page -->
