Terragrunt v1.1.3 - Provider Cache And State Fallback Fixes


Terragrunt v1.1.3, published on August 13, 2026, fixes several failure modes in concurrent infrastructure workflows. The main operator change closes two provider cache races that could leave archives in a working directory or break simultaneous runs with failed to open zip archive errors.

The full release notes and downloads are on the GitHub release page.

With --provider-cache enabled, the provider cache server could begin answering requests before its cache directories were ready. A provider requested during that window wrote its archive and lock file relative to the working directory. The result was stray zip files in the project instead of a clean cache entry.

Terragrunt v1.1.3 fixes that race so provider downloads always land in the cache directory. This is relevant to CI jobs that treat a dirty checkout as a failure, as well as local runs where unexpected archives can be mistaken for build output.

A separate race affected two Terragrunt processes caching the same provider on one machine. Both used the same staging path. The process that completed first could delete an archive while the other process was still unpacking it, causing the second run to fail when it opened the zip file.

The synchronization fix allows both runs to cache the same provider concurrently. Its scope is the archive lifecycle failure that appears when cache activity overlaps.

Direct output reads through --dependency-fetch-output-from-state already fell back to mock_outputs when an S3 state object was absent. They did not do the same when the S3 bucket itself was missing. That distinction made plan and validate fail in an environment whose backend had not been created yet.

The release treats a missing bucket like a missing state object. Dependency evaluation can therefore use declared mocks before backend bootstrap. The mock still does not create the backend or prove that an apply will succeed. It only gives planning and validation the output shape supplied by the configuration.

Stack dependencies get the same correction. When config_path points to a directory containing terragrunt.stack.hcl, units with state now return real outputs while units without state use mock_outputs. That supports partially applied stacks, but reviewers should still distinguish real values from placeholders in the resulting plan.

There is also a clearer type boundary. Stack mocks must be a map or object keyed by unit name. Other types now produce a direct error instead of silently leaving uncovered units out of the stack outputs.

A --filter query that began with a negation previously treated the entire query as an exclusion. Positive expressions after that first term only narrowed what was subtracted, so unrelated components could return to the result set.

The query '!name=foo | name=bar' now returns only bar, matching the documented left to right refinement of |. A query is treated as a pure exclusion only when every expression is negated. Automation that worked around the old behavior should check its expected component list after upgrading, since the corrected query can select fewer components.

This is a selection correctness fix, not a new filter syntax. Existing expressions remain valid, but their results now follow the refinement rule described in the release notes.