<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog</id>
    <title>atmos Blog</title>
    <updated>2026-01-21T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog"/>
    <subtitle>atmos Blog</subtitle>
    <icon>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/img/atmos-logo.png</icon>
    <entry>
        <title type="html"><![CDATA[Fixed: Describe Affected Now Detects Component File Changes]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-component-detection</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-component-detection"/>
        <updated>2026-01-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now correctly detects component file changes when running atmos describe affected.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now correctly detects component file changes when running <code>atmos describe affected</code>.
A regression introduced in v1.195.0 caused changes to Terraform, Helmfile, or Packer component files to not be detected when <code>atmos.yaml</code> was located in a subdirectory of the git repository (e.g., when using <code>atmos -C path/to/project</code>).</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-component-detection#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>When using <code>atmos describe affected</code> to identify components impacted by code changes, the command was only detecting stack configuration changes but missing actual component file changes. For example, modifying a <code>main.tf</code> file inside a Terraform component folder would not mark that component as affected.</p>
<p>This issue occurred because git diff returns file paths relative to the git repository root, while the path resolution was using the current working directory. This caused path mismatches in the following scenarios:</p>
<ul>
<li class=""><strong>Using <code>-C</code> flag</strong>: Running <code>atmos -C path/to/project describe affected</code> from a parent directory</li>
<li class=""><strong>Subdirectory projects</strong>: When <code>atmos.yaml</code> is located in a subdirectory of the git repository</li>
<li class=""><strong>Monorepo setups</strong>: When multiple Atmos projects share a single git repository</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-fix">The Fix<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-component-detection#the-fix" class="hash-link" aria-label="Direct link to The Fix" title="Direct link to The Fix" translate="no">​</a></h2>
<p>We updated the changed files indexing logic to properly resolve relative paths against the git repository root instead of the current working directory. The fix ensures that:</p>
<ul>
<li class="">Relative paths from git diff are correctly resolved against the git repo root</li>
<li class="">Component folder changes are detected regardless of where Atmos is executed from</li>
<li class="">Individual file changes within component directories are properly tracked</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="example">Example<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-component-detection#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h2>
<p>Now when you modify component files, <code>atmos describe affected</code> correctly identifies them:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Modify a component file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"# comment"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;&gt;</span><span class="token plain"> components/terraform/vpc/main.tf</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Run describe affected</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe affected </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ref</span><span class="token plain"> refs/heads/main</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Output now includes the vpc component</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">"component"</span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"vpc"</span><span class="token plain">,</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">"stack"</span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"plat-ue2-dev"</span><span class="token plain">,</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">"affected"</span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"component"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="usage">Usage<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-component-detection#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage" translate="no">​</a></h2>
<p>Upgrade to the latest version of Atmos and run:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe affected </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ref</span><span class="token plain"> refs/heads/main</span><br></span></code></pre></div></div>
<p>The command now correctly detects:</p>
<ul>
<li class="">Changes to component folders (Terraform, Helmfile, Packer)</li>
<li class="">Changes to individual files within components</li>
<li class="">Stack configuration changes (as before)</li>
<li class="">Vendored components configured with <code>source</code> (even without an explicit <code>component</code> field)</li>
</ul>
<p>This fix ensures your CI/CD pipelines accurately identify which components need to be deployed based on actual code changes.</p>]]></content>
        <author>
            <name>Andriy Knysh</name>
            <uri>https://github.com/aknysh</uri>
        </author>
        <category label="Bug Fix" term="Bug Fix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fixed: Describe Affected Now Detects Vendored Component Changes]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-source-vendoring</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-source-vendoring"/>
        <updated>2026-01-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now correctly detects file changes in components that use the source attribute for just-in-time vendoring. Previously, components vendored from remote sources were not properly tracked for affected detection.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now correctly detects file changes in components that use the <code>source</code> attribute for <a href="https://atmos.tools/cli/commands/terraform/source/" target="_blank" rel="noopener noreferrer" class="">just-in-time vendoring</a>. Previously, components vendored from remote sources were not properly tracked for affected detection.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-source-vendoring#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>When using <a href="https://atmos.tools/vendor/" target="_blank" rel="noopener noreferrer" class="">Atmos vendoring</a> with the <code>source</code> attribute to pull components from remote repositories, the <code>atmos describe affected</code> command was not detecting changes to those component files. This occurred because the affected detection logic required an explicit <code>component</code> field to determine which folder to monitor for changes.</p>
<p>Components configured like this were not being tracked:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc-remote</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">uri</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"github.com/cloudposse/terraform-aws-vpc//."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"4.0.0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-fix">The Fix<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-source-vendoring#the-fix" class="hash-link" aria-label="Direct link to The Fix" title="Direct link to The Fix" translate="no">​</a></h2>
<p>The affected detection now defaults to using the component name (the YAML key, e.g., <code>vpc-remote</code>) as the component folder path when no explicit <code>component</code> field is specified. This ensures that:</p>
<ul>
<li class="">Components using <a href="https://atmos.tools/vendor/config/sources/" target="_blank" rel="noopener noreferrer" class=""><code>source</code></a> for vendoring are properly tracked</li>
<li class="">Components without explicit <code>component</code> field inheritance are detected</li>
<li class="">All component types (Terraform, Helmfile, Packer) benefit from this fix</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-about-workdir">What About Workdir?<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-source-vendoring#what-about-workdir" class="hash-link" aria-label="Direct link to What About Workdir?" title="Direct link to What About Workdir?" translate="no">​</a></h2>
<p>If you use <a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/terraform/workdir"><code>provision.workdir</code></a> with your vendored components, the detection still works correctly. The <code>describe affected</code> command tracks changes in the <strong>source</strong> files (<code>components/terraform/&lt;component&gt;/</code>), not the runtime workdir (<code>.workdir/</code>). Since <code>.workdir/</code> is in <code>.gitignore</code> and created at runtime, it doesn't affect change detection.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="example">Example<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-source-vendoring#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h2>
<p>Now when you modify vendored component files, <code>atmos describe affected</code> correctly identifies them:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Stack configuration with source vendoring</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc-production</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">source</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">uri</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"github.com/cloudposse/terraform-aws-vpc//."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"4.0.0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">included_paths</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"**/*.tf"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"production"</span><br></span></code></pre></div></div>
<p>After running <a href="https://atmos.tools/cli/commands/vendor/pull/" target="_blank" rel="noopener noreferrer" class=""><code>atmos vendor pull</code></a> and making changes:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Modify a vendored component file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">echo</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"# update"</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;&gt;</span><span class="token plain"> components/terraform/vpc-production/main.tf</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Run describe affected</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe affected </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--ref</span><span class="token plain"> refs/heads/main</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Output now includes the vpc-production component</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">"component"</span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"vpc-production"</span><span class="token plain">,</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">"stack"</span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"prod-us-east-1"</span><span class="token plain">,</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">"affected"</span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"component"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="related-documentation">Related Documentation<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/describe-affected-source-vendoring#related-documentation" class="hash-link" aria-label="Direct link to Related Documentation" title="Direct link to Related Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://atmos.tools/vendor/" target="_blank" rel="noopener noreferrer" class="">Vendoring Overview</a> - Learn about Atmos vendoring capabilities</li>
<li class=""><a href="https://atmos.tools/vendor/config/sources/" target="_blank" rel="noopener noreferrer" class="">Source Configuration</a> - Configure source URIs and protocols</li>
<li class=""><a href="https://atmos.tools/cli/commands/terraform/source/" target="_blank" rel="noopener noreferrer" class="">Just-in-Time Vendoring</a> - Inline source declarations</li>
<li class=""><a href="https://atmos.tools/cli/commands/vendor/pull/" target="_blank" rel="noopener noreferrer" class="">Vendor Pull Command</a> - Download vendored components</li>
</ul>]]></content>
        <author>
            <name>Andriy Knysh</name>
            <uri>https://github.com/aknysh</uri>
        </author>
        <category label="Bug Fix" term="Bug Fix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[YAML Functions in Locals]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions"/>
        <updated>2026-01-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Locals now support YAML functions like !env, !exec, !store, !terraform.state, and !terraform.output.]]></summary>
        <content type="html"><![CDATA[<p>Locals now support YAML functions like <code>!env</code>, <code>!exec</code>, <code>!store</code>, <code>!terraform.state</code>, and <code>!terraform.output</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-feature">The Feature<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions#the-feature" class="hash-link" aria-label="Direct link to The Feature" title="Direct link to The Feature" translate="no">​</a></h2>
<p>Locals can now use all Atmos YAML functions to fetch dynamic values:</p>
<ul>
<li class=""><code>!env</code> - Environment variables</li>
<li class=""><code>!exec</code> - Command execution</li>
<li class=""><code>!store</code> - Store lookups</li>
<li class=""><code>!terraform.state</code> - Terraform state queries</li>
<li class=""><code>!terraform.output</code> - Terraform outputs from other components</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="example-with-environment-variables">Example with Environment Variables<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions#example-with-environment-variables" class="hash-link" aria-label="Direct link to Example with Environment Variables" title="Direct link to Example with Environment Variables" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">api_endpoint</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!env</span><span class="token plain"> API_ENDPOINT</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">api_url</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"https://{{ .locals.api_endpoint }}/api/v1"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">myapp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">api_url</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.api_url }}"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="example-with-terraform-state">Example with Terraform State<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions#example-with-terraform-state" class="hash-link" aria-label="Direct link to Example with Terraform State" title="Direct link to Example with Terraform State" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Fetch from another component's terraform state</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">vpc_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!terraform.state</span><span class="token plain"> vpc .vpc_id</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">subnet_ids</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!terraform.state</span><span class="token plain"> vpc .private_subnet_ids</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">eks</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.vpc_id }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">subnet_ids</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.subnet_ids }}"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="example-with-store">Example with Store<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions#example-with-store" class="hash-link" aria-label="Direct link to Example with Store" title="Direct link to Example with Store" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">db_password</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!store</span><span class="token plain"> secrets/database .password</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">connection_string</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"postgresql://app:{{ .locals.db_password }}@db.example.com/mydb"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">backend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">database_url</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.connection_string }}"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-it-works">How It Works<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no">​</a></h2>
<ol>
<li class="">YAML functions in locals are processed during stack configuration loading</li>
<li class="">The resolved values are available to other locals and component vars</li>
<li class="">Locals can combine YAML function results with Go templates</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="use-cases">Use Cases<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions#use-cases" class="hash-link" aria-label="Direct link to Use Cases" title="Direct link to Use Cases" translate="no">​</a></h2>
<ul>
<li class=""><strong>Environment-specific configuration</strong>: Use <code>!env</code> to inject environment-specific values</li>
<li class=""><strong>Cross-component references</strong>: Use <code>!terraform.state</code> to reference outputs from other components</li>
<li class=""><strong>Secret management</strong>: Use <code>!store</code> to fetch secrets from your configured store</li>
<li class=""><strong>Dynamic values</strong>: Use <code>!exec</code> to run commands and capture output</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="upgrade">Upgrade<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions#upgrade" class="hash-link" aria-label="Direct link to Upgrade" title="Direct link to Upgrade" translate="no">​</a></h2>
<p>Upgrade Atmos to get this feature. Existing locals configurations continue to work unchanged.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="references">References<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-yaml-functions#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/stacks/locals">Locals Documentation</a></li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/functions/yaml">YAML Functions Documentation</a></li>
</ul>]]></content>
        <author>
            <name>Andriy Knysh</name>
            <uri>https://github.com/aknysh</uri>
        </author>
        <category label="Feature" term="Feature"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Locals Context Access]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-context-access</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-context-access"/>
        <updated>2026-01-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Locals can access {{ .settings }}, {{ .vars }}, and {{ .env }} from the same file during template resolution.]]></summary>
        <content type="html"><![CDATA[<p>Locals can access <code>{{ .settings }}</code>, <code>{{ .vars }}</code>, and <code>{{ .env }}</code> from the same file during template resolution.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-enhancement">The Enhancement<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-context-access#the-enhancement" class="hash-link" aria-label="Direct link to The Enhancement" title="Direct link to The Enhancement" translate="no">​</a></h2>
<p>Previously, locals could only reference other locals via <code>{{ .locals.* }}</code>. Now they can also access:</p>
<ul>
<li class=""><code>{{ .settings.* }}</code> - Settings defined in the same file</li>
<li class=""><code>{{ .vars.* }}</code> - Vars defined in the same file</li>
<li class=""><code>{{ .env.* }}</code> - Environment variables</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="example">Example<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-context-access#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">version</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> v1</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">stage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">label</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.namespace }}-{{ .vars.stage }}-{{ .settings.version }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">myapp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.label }}"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="file-scoped-context">File-Scoped Context<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-context-access#file-scoped-context" class="hash-link" aria-label="Direct link to File-Scoped Context" title="Direct link to File-Scoped Context" translate="no">​</a></h2>
<p>The context available to locals comes from <strong>the same file only</strong>. Locals cannot access settings or vars from imported files.</p>
<p>If you need values from imported files, use <code>vars</code> or <code>settings</code> (which inherit across imports).</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="upgrade">Upgrade<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-context-access#upgrade" class="hash-link" aria-label="Direct link to Upgrade" title="Direct link to Upgrade" translate="no">​</a></h2>
<p>Upgrade Atmos to get this enhancement. Existing locals configurations will continue to work.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="references">References<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/locals-context-access#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/stacks/locals">Locals Documentation</a></li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/design-patterns/configuration-composition/locals">DRY Configuration with Locals</a></li>
</ul>]]></content>
        <author>
            <name>Andriy Knysh</name>
            <uri>https://github.com/aknysh</uri>
        </author>
        <category label="Enhancement" term="Enhancement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[List Components with Source Configuration]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-list-command</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-list-command"/>
        <updated>2026-01-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now includes a source list command to display components with source configuration. Both --stack and [component] arguments are optional, allowing flexible filtering across your infrastructure.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now includes a <code>source list</code> command to display components with source configuration. Both <code>--stack</code> and <code>[component]</code> arguments are optional, allowing flexible filtering across your infrastructure.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-list-command#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Two new commands are available with flexible filtering:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># List all terraform sources across all stacks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> list</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># List terraform sources in a specific stack</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> list </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># List sources for a specific component across all stacks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> list vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># List sources for a specific component in a specific stack</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> list vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Unified view: list sources across all component types</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list sources</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list sources </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list sources vpc</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="dynamic-output-columns">Dynamic Output Columns<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-list-command#dynamic-output-columns" class="hash-link" aria-label="Direct link to Dynamic Output Columns" title="Direct link to Dynamic Output Columns" translate="no">​</a></h2>
<p>The output adapts to your query:</p>
<p><strong>Listing all stacks</strong> - Shows Stack column:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">STACK        COMPONENT    URI                                                           VERSION</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">plat-dev     vpc          github.com/cloudposse/terraform-aws-components//modules/vpc   1.450.0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">plat-prod    vpc          github.com/cloudposse/terraform-aws-components//modules/vpc   1.450.0</span><br></span></code></pre></div></div>
<p><strong>Filtering by --stack</strong> - Omits Stack column since it's redundant:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">COMPONENT    URI                                                           VERSION</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">eks          github.com/cloudposse/terraform-aws-components//modules/eks   1.450.0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">rds          github.com/cloudposse/terraform-aws-components//modules/rds   1.449.0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc          github.com/cloudposse/terraform-aws-components//modules/vpc   1.450.0</span><br></span></code></pre></div></div>
<p><strong>With derived components</strong> - Shows Folder column when component names differ from their base component:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">COMPONENT        FOLDER    URI                                                           VERSION</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc/production   vpc       github.com/cloudposse/terraform-aws-components//modules/vpc   1.450.0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc/staging      vpc       github.com/cloudposse/terraform-aws-components//modules/vpc   1.450.0</span><br></span></code></pre></div></div>
<p>The Folder column only appears when there's a difference to show, keeping output clean for simple cases.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="multi-type-listing">Multi-Type Listing<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-list-command#multi-type-listing" class="hash-link" aria-label="Direct link to Multi-Type Listing" title="Direct link to Multi-Type Listing" translate="no">​</a></h2>
<p>The <code>atmos list sources</code> command includes a Type column since it lists sources across all component types (terraform, helmfile, packer) in a unified view:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">STACK        TYPE        COMPONENT    URI                                                           VERSION</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">plat-dev     helmfile    nginx        github.com/cloudposse/helmfile-components//charts/nginx       1.0.0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">plat-dev     terraform   vpc          github.com/cloudposse/terraform-aws-components//modules/vpc   1.450.0</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">plat-prod    terraform   vpc          github.com/cloudposse/terraform-aws-components//modules/vpc   1.450.0</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-list-command#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>With the source provisioner, components can declare their source inline in stack configuration for just-in-time vendoring. The <code>source list</code> command helps you:</p>
<ul>
<li class=""><strong>Audit</strong> which components have source configured across your infrastructure</li>
<li class=""><strong>Compare</strong> versions across stacks (same component, different versions)</li>
<li class=""><strong>Debug</strong> source configuration issues</li>
<li class=""><strong>Discover</strong> vendorable components in unfamiliar stacks</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="output-formats">Output Formats<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-list-command#output-formats" class="hash-link" aria-label="Direct link to Output Formats" title="Direct link to Output Formats" translate="no">​</a></h2>
<p>Multiple output formats are supported for integration with other tools:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Table (default, human-readable)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list sources </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> table</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># JSON (for scripting)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list sources </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># YAML (for configuration)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list sources </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> yaml</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># CSV (for spreadsheets)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list sources </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> csv</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># TSV (for tab-separated pipelines)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list sources </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> tsv</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="documentation">Documentation<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-list-command#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/terraform/source">Source Provisioner</a> - JIT vendoring overview</li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/list/sources"><code>atmos list sources</code></a> - Unified view across all component types</li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/terraform/source/list"><code>atmos terraform source list</code></a> - List Terraform sources</li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/helmfile/source/list"><code>atmos helmfile source list</code></a> - List Helmfile sources</li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/packer/source/list"><code>atmos packer source list</code></a> - List Packer sources</li>
</ul>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Feature" term="Feature"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Native GitHub Actions Support for Atmos Toolchain]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-actions-toolchain-path</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-actions-toolchain-path"/>
        <updated>2026-01-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos toolchain now has native GitHub Actions support with the new github format for atmos toolchain env.]]></summary>
        <content type="html"><![CDATA[<p>Atmos toolchain now has native GitHub Actions support with the new <code>github</code> format for <code>atmos toolchain env</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-actions-toolchain-path#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>The <code>atmos toolchain env</code> command now supports a <code>github</code> format that outputs paths compatible with GitHub Actions' <code>$GITHUB_PATH</code> environment file. When running in GitHub Actions, it automatically detects and writes to <code>$GITHUB_PATH</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="new-features">New Features<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-actions-toolchain-path#new-features" class="hash-link" aria-label="Direct link to New Features" title="Direct link to New Features" translate="no">​</a></h3>
<ul>
<li class=""><strong><code>--format github</code></strong>: Outputs one path per line, compatible with <code>$GITHUB_PATH</code></li>
<li class=""><strong><code>--output</code> flag</strong>: Append output to any file instead of stdout</li>
<li class=""><strong>Auto-detection</strong>: When <code>$GITHUB_PATH</code> is set, the <code>github</code> format automatically writes to it</li>
<li class=""><strong>Improved error messages</strong>: Helpful hints guide you when tools aren't installed</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-actions-toolchain-path#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p>In your GitHub Actions workflow:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Install Atmos toolchain</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token scalar string" style="color:rgb(173, 219, 103)"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token scalar string" style="color:rgb(173, 219, 103)">    atmos toolchain install</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token scalar string" style="color:rgb(173, 219, 103)">    atmos toolchain env --format github</span><br></span></code></pre></div></div>
<p>The next step in your workflow will have access to all your toolchain binaries (OpenTofu, Terraform, Helmfile, etc.) in the PATH.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-actions-toolchain-path#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Previously, integrating Atmos toolchain with GitHub Actions required shell tricks:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Before: Manual PATH manipulation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> echo "$(atmos toolchain path)" </span><span class="token punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"> $GITHUB_PATH</span><br></span></code></pre></div></div>
<p>Now it's a single, intuitive command that handles everything automatically.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-actions-toolchain-path#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Try out the new GitHub Actions integration and let us know what you think! File issues or feature requests on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Enhancement" term="Enhancement"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Smarter Component Selection in Interactive Prompts]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/component-selection-filtering</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/component-selection-filtering"/>
        <updated>2026-01-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Interactive component selection now filters out non-deployable components.]]></summary>
        <content type="html"><![CDATA[<p>Interactive component selection now filters out non-deployable components.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/component-selection-filtering#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>When using <code>atmos terraform plan -s stack-name</code> without specifying a component, the interactive
"Choose a component" menu now correctly filters the component list:</p>
<ul>
<li class=""><strong>Abstract components</strong> (<code>metadata.type: abstract</code>) are hidden - they're templates, not deployable</li>
<li class=""><strong>Disabled components</strong> (<code>metadata.enabled: false</code>) are hidden - they can't be deployed</li>
<li class=""><strong>Stack-scoped filtering</strong> - only components in the specified stack appear</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/component-selection-filtering#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Previously, users would see all components from all stacks, including abstract base components
that serve as templates. This was confusing and could lead to errors when selecting a component
that couldn't actually be deployed.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="shell-completion-too">Shell Completion Too<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/component-selection-filtering#shell-completion-too" class="hash-link" aria-label="Direct link to Shell Completion Too" title="Direct link to Shell Completion Too" translate="no">​</a></h2>
<p>Tab completion for component arguments also uses the same filtering logic, so you'll only see
valid, deployable components when completing <code>atmos terraform plan -s stack &lt;TAB&gt;</code>.</p>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Bug Fix" term="Bug Fix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitHub Actions Output Format]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format"/>
        <updated>2026-01-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now supports a dedicated github output format for atmos terraform output, making it easier than ever to pass Terraform outputs between GitHub Actions steps.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now supports a dedicated <code>github</code> output format for <code>atmos terraform output</code>, making it easier than ever to pass Terraform outputs between GitHub Actions steps.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="whats-new">What's New<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#whats-new" class="hash-link" aria-label="Direct link to What's New" title="Direct link to What's New" translate="no">​</a></h2>
<p>The new <code>--format=github</code> option for <code>atmos terraform output</code> automatically writes outputs to <code>$GITHUB_OUTPUT</code> in the format GitHub Actions expects, including proper handling of multiline values using heredoc syntax.</p>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># In a GitHub Actions workflow</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform output vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">github</span><br></span></code></pre></div></div>
<p>This writes outputs directly to <code>$GITHUB_OUTPUT</code>, making them available to subsequent workflow steps.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Previously, passing Terraform outputs between GitHub Actions steps required manual formatting or shell scripting to handle:</p>
<ul>
<li class="">Multiline values (JSON objects, lists, multi-line strings)</li>
<li class="">Special characters that need escaping</li>
<li class="">The correct <code>$GITHUB_OUTPUT</code> file format</li>
</ul>
<p>The <code>github</code> format handles all of this automatically:</p>
<ul>
<li class=""><strong>Single-line values</strong> are written as <code>key=value</code></li>
<li class=""><strong>Multiline values</strong> use heredoc syntax: <code>key&lt;&lt;DELIMITER\nvalue\nDELIMITER</code></li>
<li class=""><strong>Complex types</strong> (maps, arrays) are JSON-encoded for easy parsing</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="example-workflow">Example Workflow<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#example-workflow" class="hash-link" aria-label="Direct link to Example Workflow" title="Direct link to Example Workflow" translate="no">​</a></h2>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">jobs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">deploy</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">runs-on</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> ubuntu</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">latest</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">steps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Checkout</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> actions/checkout@v4</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Get Terraform Outputs</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> outputs</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> atmos terraform output vpc </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">s dev </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">format=github</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Use Outputs</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">|</span><span class="token scalar string" style="color:rgb(173, 219, 103)"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token scalar string" style="color:rgb(173, 219, 103)">          echo "VPC ID: ${{ steps.outputs.outputs.vpc_id }}"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token scalar string" style="color:rgb(173, 219, 103)">          echo "Subnets: ${{ steps.outputs.outputs.private_subnet_ids }}"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="usage-options">Usage Options<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#usage-options" class="hash-link" aria-label="Direct link to Usage Options" title="Direct link to Usage Options" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="automatic-github_output-detection">Automatic <code>$GITHUB_OUTPUT</code> Detection<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#automatic-github_output-detection" class="hash-link" aria-label="Direct link to automatic-github_output-detection" title="Direct link to automatic-github_output-detection" translate="no">​</a></h3>
<p>When running in GitHub Actions, the format automatically writes to <code>$GITHUB_OUTPUT</code>:</p>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform output vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">github</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="custom-output-file">Custom Output File<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#custom-output-file" class="hash-link" aria-label="Direct link to Custom Output File" title="Direct link to Custom Output File" translate="no">​</a></h3>
<p>You can specify a different output file if needed:</p>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform output vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">github --output-file</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">outputs.txt</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="combined-with-other-options">Combined with Other Options<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#combined-with-other-options" class="hash-link" aria-label="Direct link to Combined with Other Options" title="Direct link to Combined with Other Options" translate="no">​</a></h3>
<p>The <code>github</code> format works with other output options:</p>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Uppercase keys for conventional ENV_VAR naming</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform output vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">github </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--uppercase</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Flatten nested maps</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform output vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">github </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--flatten</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Skip init for faster execution in CI</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform output vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">github --skip-init</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="output-format-details">Output Format Details<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#output-format-details" class="hash-link" aria-label="Direct link to Output Format Details" title="Direct link to Output Format Details" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="simple-values">Simple Values<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#simple-values" class="hash-link" aria-label="Direct link to Simple Values" title="Direct link to Simple Values" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc_id=vpc-12345</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">region=us-east-1</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">enabled=true</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="multiline-values-heredoc">Multiline Values (Heredoc)<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#multiline-values-heredoc" class="hash-link" aria-label="Direct link to Multiline Values (Heredoc)" title="Direct link to Multiline Values (Heredoc)" translate="no">​</a></h3>
<p>For values containing newlines, the format uses GitHub's heredoc syntax:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc_config&lt;&lt;ATMOS_EOF_vpc_config</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">{</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  "id": "vpc-12345",</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  "cidr": "10.0.0.0/16"</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">}</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">ATMOS_EOF_vpc_config</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="documentation">Documentation<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<p>For complete documentation on terraform output formatting options, see:</p>
<ul>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/terraform/output">Terraform Output Command</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/github-output-format#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Try out the new GitHub Actions output format and let us know what you think! File issues or feature requests on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Feature" term="Feature"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Packer Directory-Based Templates for Multi-File Configurations]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates"/>
        <updated>2026-01-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now supports directory-based Packer templates by default. Instead of requiring a single HCL template file, you can organize your Packer configurations across multiple files following HashiCorp's recommended patterns. Atmos automatically passes the component directory to Packer, which loads all *.pkr.hcl files.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now supports directory-based Packer templates by default. Instead of requiring a single HCL template file, you can organize your Packer configurations across multiple files following HashiCorp's recommended patterns. Atmos automatically passes the component directory to Packer, which loads all <code>*.pkr.hcl</code> files.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Previously, Atmos required users to specify a single HCL file via <code>--template</code> flag or <code>settings.packer.template</code> configuration. Running Packer commands without this setting would result in an error:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Old behavior</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer build my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Error: packer template is required</span><br></span></code></pre></div></div>
<p>Now, Atmos defaults the template to <code>.</code> (component working directory) when not specified, allowing Packer to load all <code>*.pkr.hcl</code> files from the component directory automatically:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># New behavior - works out of the box</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer build my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Packer loads all *.pkr.hcl files from the component directory</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>HashiCorp recommends organizing Packer configurations across multiple files for better maintainability:</p>
<ul>
<li class=""><code>variables.pkr.hcl</code> - Variable declarations</li>
<li class=""><code>main.pkr.hcl</code> or <code>template.pkr.hcl</code> - Source and build blocks</li>
<li class=""><code>locals.pkr.hcl</code> - Local values</li>
<li class=""><code>plugins.pkr.hcl</code> - Required plugins</li>
</ul>
<p>When users followed this practice, Atmos would only load the specified template file, causing "Unsupported attribute" errors when variables were defined in separate files. This change aligns Atmos with Packer's native behavior and HashiCorp best practices.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="directory-mode-new-default">Directory Mode (New Default)<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#directory-mode-new-default" class="hash-link" aria-label="Direct link to Directory Mode (New Default)" title="Direct link to Directory Mode (New Default)" translate="no">​</a></h3>
<p>Simply organize your Packer component with multiple files and run commands without specifying a template:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">components/packer/my-ami/</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">├── variables.pkr.hcl    # Variable declarations</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">├── main.pkr.hcl         # Source and build blocks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">├── locals.pkr.hcl       # Local values (optional)</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">└── plugins.pkr.hcl      # Required plugins (optional)</span><br></span></code></pre></div></div>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Stack configuration - no template needed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">packer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">my-ami</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">east</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">instance_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> t3.medium</span><br></span></code></pre></div></div>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># All commands work without --template</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer init my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer validate my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer build my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer inspect my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="single-file-mode-backward-compatible">Single File Mode (Backward Compatible)<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#single-file-mode-backward-compatible" class="hash-link" aria-label="Direct link to Single File Mode (Backward Compatible)" title="Direct link to Single File Mode (Backward Compatible)" translate="no">​</a></h3>
<p>If you prefer to use a single template file, you can still specify it explicitly:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Stack configuration with explicit template</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">packer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">my-ami</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">packer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">template</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> main.pkr.hcl  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Use specific file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">east</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><br></span></code></pre></div></div>
<p>Or use the <code>--template</code> flag:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer build my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--template</span><span class="token plain"> main.pkr.hcl</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="examples">Examples<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="multi-file-component-structure">Multi-File Component Structure<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#multi-file-component-structure" class="hash-link" aria-label="Direct link to Multi-File Component Structure" title="Direct link to Multi-File Component Structure" translate="no">​</a></h3>
<div class="language-hcl codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-hcl codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># components/packer/my-ami/variables.pkr.hcl</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">variable</span><span class="token keyword type variable" style="color:rgb(214, 222, 235)"> "region" </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">type</span><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> string</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">description</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"AWS region to build the AMI"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">variable</span><span class="token keyword type variable" style="color:rgb(214, 222, 235)"> "instance_type" </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">type</span><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> string</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">default</span><span class="token plain">     </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"t3.medium"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">description</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"EC2 instance type for the builder"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">variable</span><span class="token keyword type variable" style="color:rgb(214, 222, 235)"> "ami_name" </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">type</span><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> string</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">description</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"Name for the resulting AMI"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre></div></div>
<div class="language-hcl codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-hcl codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># components/packer/my-ami/main.pkr.hcl</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">packer</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">required_plugins</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token property" style="color:rgb(128, 203, 196)">amazon</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token property" style="color:rgb(128, 203, 196)">version</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"&gt;= 1.2.0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token property" style="color:rgb(128, 203, 196)">source</span><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"github.com/hashicorp/amazon"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">source </span><span class="token string" style="color:rgb(173, 219, 103)">"amazon-ebs"</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"base"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">region</span><span class="token plain">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> var.region</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">instance_type</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> var.instance_type</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">ami_name</span><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"</span><span class="token string interpolation punctuation" style="color:rgb(199, 146, 234)">$</span><span class="token string interpolation punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string interpolation keyword" style="color:rgb(127, 219, 202)">var</span><span class="token string interpolation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token string interpolation type variable" style="color:rgb(214, 222, 235)">ami_name</span><span class="token string interpolation punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token string" style="color:rgb(173, 219, 103)">-{{timestamp}}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ... other settings</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">build</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token property" style="color:rgb(128, 203, 196)">sources</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">"source.amazon-ebs.base"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ... provisioners</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="validating-multi-file-components">Validating Multi-File Components<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#validating-multi-file-components" class="hash-link" aria-label="Direct link to Validating Multi-File Components" title="Direct link to Validating Multi-File Components" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Validate all files in the component directory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer validate my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Inspect the combined template</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos packer inspect my-ami </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="backward-compatibility">Backward Compatibility<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#backward-compatibility" class="hash-link" aria-label="Direct link to Backward Compatibility" title="Direct link to Backward Compatibility" translate="no">​</a></h2>
<p>All existing configurations continue to work unchanged:</p>
<ul>
<li class="">Components with explicit <code>settings.packer.template</code> use the specified file</li>
<li class="">The <code>--template</code> flag overrides both the default and settings values</li>
<li class="">Single-file components work exactly as before</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="documentation">Documentation<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/packer-directory-based-templates#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<p>For more details, see:</p>
<ul>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/stacks/components/packer">Packer Components</a></li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/packer/build">Packer Build Command</a></li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/packer/usage">Packer Usage</a></li>
</ul>]]></content>
        <author>
            <name>Andriy Knysh</name>
            <uri>https://github.com/aknysh</uri>
        </author>
        <category label="Feature" term="Feature"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Command Aliases for Vendor and Workflow List]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-workflow-list-aliases</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-workflow-list-aliases"/>
        <updated>2026-01-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now supports atmos vendor list and atmos workflow list as aliases for their atmos list vendor and atmos list workflows counterparts.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now supports <code>atmos vendor list</code> and <code>atmos workflow list</code> as aliases for their <code>atmos list vendor</code> and <code>atmos list workflows</code> counterparts.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-workflow-list-aliases#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Two new command aliases make discoverability more intuitive:</p>
<ul>
<li class=""><code>atmos vendor list</code> is now an alias for <code>atmos list vendor</code></li>
<li class=""><code>atmos workflow list</code> is now an alias for <code>atmos list workflows</code></li>
</ul>
<p>Both command forms are equivalent and share the same flags, completions, and output.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-workflow-list-aliases#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>Users naturally expect list commands under the parent command (e.g., <code>atmos vendor list</code>), while Atmos organizes all list commands under <code>atmos list</code>. This bidirectional aliasing follows the same pattern as <code>atmos list themes</code> and <code>atmos theme list</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/vendor-workflow-list-aliases#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p>Both forms work identically:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># These are equivalent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos vendor list</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list vendor</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># These are equivalent</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos workflow list</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list workflows</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># All flags work the same</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos vendor list </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos workflow list </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> csv</span><br></span></code></pre></div></div>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Enhancement" term="Enhancement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Interactive File Generation for Terraform, Helmfile, and Packer]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation"/>
        <updated>2026-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[File generation now features interactive component and stack selection, plus cross-provisioner support for helmfile and packer. Run atmos terraform generate files without arguments and get an intuitive selector.]]></summary>
        <content type="html"><![CDATA[<p>File generation now features interactive component and stack selection, plus cross-provisioner support for helmfile and packer. Run <code>atmos terraform generate files</code> without arguments and get an intuitive selector.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Building on the <a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/declarative-file-generation">declarative file generation</a> feature, this release adds several improvements:</p>
<ul>
<li class=""><strong>Interactive prompts</strong> for component and stack selection when arguments are missing</li>
<li class=""><strong>Cross-provisioner support</strong> for helmfile and packer (not just terraform)</li>
<li class=""><strong>Idempotent generation</strong> that only writes files when content changes</li>
<li class=""><strong>Deterministic output</strong> with sorted map keys for reproducible generation</li>
<li class=""><strong>JIT component creation</strong> with auto-generation running BEFORE path validation</li>
</ul>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos terraform generate files</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">? Choose a component</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"> vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    eks-cluster</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    rds-aurora</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">? Choose a stack</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"> ue2-dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    ue2-prod</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="discoverability">Discoverability<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#discoverability" class="hash-link" aria-label="Direct link to Discoverability" title="Direct link to Discoverability" translate="no">​</a></h3>
<p>When working with unfamiliar infrastructure, you may not know which components have file generation configured. Interactive prompts let you explore what's available without digging through YAML files.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="cross-provisioner-consistency">Cross-Provisioner Consistency<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#cross-provisioner-consistency" class="hash-link" aria-label="Direct link to Cross-Provisioner Consistency" title="Direct link to Cross-Provisioner Consistency" translate="no">​</a></h3>
<p>Teams using helmfile or packer alongside terraform can now use the same file generation patterns across all provisioners:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># atmos.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">auto_generate_files</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">helmfile</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">auto_generate_files</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">packer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">auto_generate_files</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="idempotent-operations">Idempotent Operations<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#idempotent-operations" class="hash-link" aria-label="Direct link to Idempotent Operations" title="Direct link to Idempotent Operations" translate="no">​</a></h3>
<p>File generation now compares existing content before writing. This means:</p>
<ul>
<li class="">No unnecessary file modifications</li>
<li class="">Cleaner git diffs</li>
<li class="">Faster execution when files haven't changed</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-it-works">How It Works<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="interactive-selection">Interactive Selection<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#interactive-selection" class="hash-link" aria-label="Direct link to Interactive Selection" title="Direct link to Interactive Selection" translate="no">​</a></h3>
<p>When you omit the component or stack argument in an interactive terminal, Atmos prompts for selection:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos terraform generate files</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">? Choose a component</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"> vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">i Selected component </span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token variable" style="color:rgb(214, 222, 235)">vpc</span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">? Choose a stack</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"> ue2-dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">i Selected stack </span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token variable" style="color:rgb(214, 222, 235)">ue2-dev</span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Generating files </span><span class="token keyword" style="color:rgb(127, 219, 202)">for</span><span class="token plain"> component </span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token variable" style="color:rgb(214, 222, 235)">vpc</span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">in</span><span class="token plain"> stack </span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token variable" style="color:rgb(214, 222, 235)">ue2-dev</span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">..</span><span class="token plain">.</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="jit-component-creation">JIT Component Creation<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#jit-component-creation" class="hash-link" aria-label="Direct link to JIT Component Creation" title="Direct link to JIT Component Creation" translate="no">​</a></h3>
<p>With <code>auto_generate_files: true</code>, files are generated BEFORE path validation during component execution. This enables just-in-time component creation where the generated files can create the component directory itself.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="summary-output">Summary Output<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#summary-output" class="hash-link" aria-label="Direct link to Summary Output" title="Direct link to Summary Output" translate="no">​</a></h3>
<p>After generation, you see exactly what changed:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">✓ Generated file: locals.tf</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">✓ Generated file: context.json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">i Summary: </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain"> files generated </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain"> created, </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"> updated, </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"> unchanged</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="disabling-interactive-prompts">Disabling Interactive Prompts<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#disabling-interactive-prompts" class="hash-link" aria-label="Direct link to Disabling Interactive Prompts" title="Direct link to Disabling Interactive Prompts" translate="no">​</a></h2>
<p>For scripts and automation, disable prompts the same way as other interactive commands:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Via flag</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform generate files vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> ue2-dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--interactive</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">false</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Via environment variable</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">ATMOS_INTERACTIVE</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">false</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/interactive-file-generation#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<ul>
<li class="">Review the <a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/terraform/generate/files">generate files documentation</a> for configuration options</li>
<li class="">See the example in <code>examples/generate-files/</code> demonstrating the feature</li>
<li class="">Share feedback on <a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a></li>
</ul>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Feature" term="Feature"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Backends Auto-Provisioned on Terraform Init]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init"/>
        <updated>2026-01-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now automatically provisions backends during terraform init, eliminating the need for a separate backend create command. When provision.backend.enabled: true is set, backends are created just-in-time during your first Terraform operation.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now automatically provisions backends during <code>terraform init</code>, eliminating the need for a separate <code>backend create</code> command. When <code>provision.backend.enabled: true</code> is set, backends are created just-in-time during your first Terraform operation.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Previously, automatic backend provisioning required running <code>atmos terraform backend create</code> explicitly before initializing Terraform. Now, backends are provisioned automatically when you run any Terraform command that triggers initialization:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Before: Two commands required</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform backend create vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># After: Single command - backend auto-provisioned on init</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ⠋ Provisioning S3 backend `my-terraform-state` for `vpc` in stack `dev`...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ✓ Provisioned S3 backend `my-terraform-state` for `vpc` in stack `dev`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># ... terraform init continues automatically</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-it-works">How It Works<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no">​</a></h2>
<p>When <code>provision.backend.enabled: true</code> is configured, Atmos registers a hook that runs before <code>terraform init</code>:</p>
<ol>
<li class=""><strong>Check if enabled</strong> - Silent skip if <code>provision.backend.enabled</code> is not <code>true</code></li>
<li class=""><strong>Check if exists</strong> - Silent skip if backend already exists (idempotent)</li>
<li class=""><strong>Provision with feedback</strong> - Create backend with spinner showing progress</li>
<li class=""><strong>Continue init</strong> - Terraform initialization proceeds automatically</li>
</ol>
<p>This behavior is completely opt-in. Without the provision configuration, nothing changes.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="configuration">Configuration<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration" translate="no">​</a></h2>
<p>The configuration remains the same - just add <code>provision.backend.enabled: true</code>:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> s3</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">bucket</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">state</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> vpc/terraform.tfstate</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">east</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">provision</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">backend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div>
<p>You can also set this at the global terraform level for all components:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">provision</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">backend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Inherits provision.backend.enabled: true from above</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> s3</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">backend</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">bucket</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> my</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">state</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">key</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> vpc/terraform.tfstate</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">region</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> us</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">east</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="ux-improvements">UX Improvements<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init#ux-improvements" class="hash-link" aria-label="Direct link to UX Improvements" title="Direct link to UX Improvements" translate="no">​</a></h2>
<p>This release also includes improved output formatting:</p>
<ul>
<li class=""><strong>Spinner feedback</strong> - Visual progress indicator during provisioning</li>
<li class=""><strong>Consolidated messages</strong> - Single line output instead of multiple status messages</li>
<li class=""><strong>Backend type and name</strong> - Shows backend type (S3, GCS, etc.) and resource name (bucket)</li>
<li class=""><strong>Markdown-friendly formatting</strong> - Backticks around names render correctly in terminals</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="idempotent-behavior">Idempotent Behavior<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init#idempotent-behavior" class="hash-link" aria-label="Direct link to Idempotent Behavior" title="Direct link to Idempotent Behavior" translate="no">​</a></h2>
<p>The auto-provisioning is idempotent:</p>
<ul>
<li class=""><strong>First run</strong>: Backend is created with spinner feedback</li>
<li class=""><strong>Subsequent runs</strong>: Silent skip (backend already exists)</li>
<li class=""><strong>After Terraform import</strong>: Safe to leave enabled - no conflicts</li>
</ul>
<p>This means you can safely leave <code>provision.backend.enabled: true</code> in your configuration permanently.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="explicit-command-still-available">Explicit Command Still Available<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init#explicit-command-still-available" class="hash-link" aria-label="Direct link to Explicit Command Still Available" title="Direct link to Explicit Command Still Available" translate="no">​</a></h2>
<p>The explicit <code>backend create</code> command remains available for CI/CD pipelines or manual provisioning:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform backend create vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="getting-started">Getting Started<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning-on-init#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started" translate="no">​</a></h2>
<p>Enable automatic backend provisioning in your stack configuration and run any Terraform command:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev</span><br></span></code></pre></div></div>
<p>That's it - no separate provisioning step required.</p>
<p>For more details, see our <a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/automatic-backend-provisioning">original announcement</a> and <a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/commands/terraform/terraform-backend">CLI documentation</a>.</p>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Enhancement" term="Enhancement"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Source Provisioner UX Improvements]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-provisioner-ux</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-provisioner-ux"/>
        <updated>2026-01-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The source provisioner now provides better visual feedback with spinners during auto-provisioning, interactive confirmation prompts for delete operations, and interactive stack selection when --stack is omitted.]]></summary>
        <content type="html"><![CDATA[<p>The source provisioner now provides better visual feedback with spinners during auto-provisioning, interactive confirmation prompts for delete operations, and interactive stack selection when <code>--stack</code> is omitted.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-provisioner-ux#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Four UX improvements to the source provisioner:</p>
<ol>
<li class=""><strong>Auto-provisioning spinner</strong>: When components are automatically vendored on first use, you now see a spinner with progress instead of static messages</li>
<li class=""><strong>Interactive delete confirmation</strong>: Running <code>atmos terraform source delete</code> without <code>--force</code> now prompts for confirmation instead of erroring</li>
<li class=""><strong>Delete operation spinner</strong>: Deletion shows a spinner during the operation for consistent feedback</li>
<li class=""><strong>Interactive stack selection</strong>: All source commands (pull, delete, describe, list) now prompt for stack selection when <code>--stack</code> is omitted</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-provisioner-ux#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>These changes align the source provisioner with UX patterns used elsewhere in Atmos:</p>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Before: Static messages during auto-provisioning</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">ℹ Auto-provisioning </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">for</span><span class="token plain"> component </span><span class="token string" style="color:rgb(173, 219, 103)">'myapp'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">✓ Auto-provisioned </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> to .workdir/terraform/dev-myapp</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># After: Spinner shows progress</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">⠋ Auto-provisioning </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">for</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'myapp'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">✓ Auto-provisioned </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> to .workdir/terraform/dev-myapp</span><br></span></code></pre></div></div>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Before: Delete required --force or failed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos terraform </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> delete myapp </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Error: </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--force</span><span class="token plain"> flag required </span><span class="token keyword" style="color:rgb(127, 219, 202)">for</span><span class="token plain"> safety</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># After: Interactive confirmation when --force omitted</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos terraform </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> delete myapp </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">? Delete directory: .workdir/terraform/dev-myapp? </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Yes</span><span class="token operator" style="color:rgb(127, 219, 202)">!</span><span class="token plain">/No.</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">⠋ Deleting .workdir/terraform/dev-myapp</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">✓ Deleted .workdir/terraform/dev-myapp</span><br></span></code></pre></div></div>
<div class="language-shell codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-shell codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Before: Required --stack flag or error</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos terraform </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> pull myapp</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Error: </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> flag is required</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># After: Interactive stack selection when --stack omitted</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">$ atmos terraform </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> pull myapp</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">? Choose a stack</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  staging</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">ℹ Selected stack </span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token variable" style="color:rgb(214, 222, 235)">prod</span><span class="token variable" style="color:rgb(214, 222, 235)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">⠋ Provisioning </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">for</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'myapp'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">✓ Provisioned </span><span class="token builtin class-name" style="color:rgb(255, 203, 139)">source</span><span class="token plain"> to components/terraform/myapp</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/source-provisioner-ux#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p>No configuration changes needed. The improvements apply automatically:</p>
<ul>
<li class=""><strong>With TTY</strong>: Get interactive prompts and spinners</li>
<li class=""><strong>Without TTY (CI/scripts)</strong>: Use <code>--force</code> to skip confirmation, spinners degrade gracefully</li>
<li class=""><strong>Force flag</strong>: Still available for scripted workflows: <code>atmos terraform source delete myapp --stack dev --force</code></li>
</ul>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Enhancement" term="Enhancement"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[List Command Query Syntax and Multi-Tool Installation]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-and-toolchain-enhancements</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-and-toolchain-enhancements"/>
        <updated>2026-01-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[New query syntax for atmos list components and support for installing multiple tools at once with atmos toolchain install.]]></summary>
        <content type="html"><![CDATA[<p>New query syntax for <code>atmos list components</code> and support for installing multiple tools at once with <code>atmos toolchain install</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-and-toolchain-enhancements#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="simplified-query-syntax-for-list-commands">Simplified Query Syntax for List Commands<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-and-toolchain-enhancements#simplified-query-syntax-for-list-commands" class="hash-link" aria-label="Direct link to Simplified Query Syntax for List Commands" title="Direct link to Simplified Query Syntax for List Commands" translate="no">​</a></h3>
<p>The <code>atmos list components</code> command now supports a simplified query syntax that makes filtering components more intuitive:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Filter by stack pattern</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list components plat-ue2-dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Filter by component name</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list components vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Combine filters</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list components vpc plat-ue2-dev</span><br></span></code></pre></div></div>
<p>This replaces the need for verbose <code>--stack</code> flags in many common cases.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="new-atmos-list-aliases-subcommand">New <code>atmos list aliases</code> Subcommand<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-and-toolchain-enhancements#new-atmos-list-aliases-subcommand" class="hash-link" aria-label="Direct link to new-atmos-list-aliases-subcommand" title="Direct link to new-atmos-list-aliases-subcommand" translate="no">​</a></h3>
<p>View all command aliases—both built-in and user-configured:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list aliases</span><br></span></code></pre></div></div>
<p>This command shows:</p>
<ul>
<li class=""><strong>Built-in aliases</strong>: Native command shortcuts (e.g., <code>tf</code> → <code>terraform</code>, <code>hf</code> → <code>helmfile</code>)</li>
<li class=""><strong>Configured aliases</strong>: User-defined shortcuts from your <code>atmos.yaml</code></li>
</ul>
<p>The output includes a "Type" column so you can easily distinguish between the two, helping you discover all available shortcuts in your project.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="multi-tool-installation">Multi-Tool Installation<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-and-toolchain-enhancements#multi-tool-installation" class="hash-link" aria-label="Direct link to Multi-Tool Installation" title="Direct link to Multi-Tool Installation" translate="no">​</a></h3>
<p>Install multiple tools in a single command:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos toolchain </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> opentofu tflint kubectl helm</span><br></span></code></pre></div></div>
<p>Previously, each tool required a separate <code>atmos toolchain install</code> invocation. Now you can batch installations with a progress summary.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-and-toolchain-enhancements#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<ul>
<li class=""><strong>Faster Workflows</strong>: Query syntax reduces typing for common list operations</li>
<li class=""><strong>Better Discoverability</strong>: The aliases command helps teams discover configured shortcuts</li>
<li class=""><strong>Streamlined Setup</strong>: Multi-tool installation speeds up environment bootstrapping</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-to-use-it">How to Use It<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-and-toolchain-enhancements#how-to-use-it" class="hash-link" aria-label="Direct link to How to Use It" title="Direct link to How to Use It" translate="no">​</a></h2>
<p>Update to the latest version of Atmos:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos version </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> latest</span><br></span></code></pre></div></div>
<p>Then try the new features:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Explore the simplified query syntax</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list components </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--help</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># View your configured aliases</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list aliases</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Install your toolchain in one command</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos toolchain </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> opentofu terraform-docs tflint</span><br></span></code></pre></div></div>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Feature" term="Feature"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New List Configuration and Stack Filtering]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification"/>
        <updated>2026-01-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The atmos list components command now correctly shows unique component definitions, supports stack filtering, and uses a new dedicated configuration namespace.]]></summary>
        <content type="html"><![CDATA[<p>The <code>atmos list components</code> command now correctly shows unique component definitions, supports stack filtering, and uses a new dedicated configuration namespace.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>The <code>atmos list components</code> command behavior has been restored to its original intent:</p>
<ul>
<li class=""><strong><code>list components</code></strong> - Shows unique component definitions (deduplicated across all stacks)</li>
<li class=""><strong><code>list instances</code></strong> - Shows all component instances (one entry per component+stack pair)</li>
</ul>
<p>Previously, both commands were returning the same data (component instances), which was confusing.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="new-filter-components-by-stack">New: Filter Components by Stack<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification#new-filter-components-by-stack" class="hash-link" aria-label="Direct link to New: Filter Components by Stack" title="Direct link to New: Filter Components by Stack" translate="no">​</a></h2>
<p>You can now filter which stacks to consider when listing unique components using the <code>--stack</code> flag with glob patterns:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># List components that exist in any dev stack</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list components </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"*-dev"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># List components in a specific environment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list components </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"plat-ue2-*"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># List components across all production stacks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos list components </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"*-prod"</span><br></span></code></pre></div></div>
<p>This is useful when you want to see what components are defined for a particular environment or stage without seeing the full list across all stacks.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="new-configuration-namespace">New Configuration Namespace<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification#new-configuration-namespace" class="hash-link" aria-label="Direct link to New Configuration Namespace" title="Direct link to New Configuration Namespace" translate="no">​</a></h2>
<p>We've introduced a cleaner configuration structure for list commands with separate settings for <code>list components</code> and <code>list instances</code>:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># atmos.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">list</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Configuration for "atmos list components"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Shows unique component definitions (deduplicated)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">format</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> table</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">columns</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Component</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .component }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Type</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .type }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .stack_count }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Configuration for "atmos list instances"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Shows component instances (one per component+stack pair)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">instances</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">format</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> table</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">columns</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Stack</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .stack }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Component</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .component }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Type</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .type }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Tenant</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .vars.tenant }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Environment</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .vars.environment }}"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="available-fields">Available Fields<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification#available-fields" class="hash-link" aria-label="Direct link to Available Fields" title="Direct link to Available Fields" translate="no">​</a></h3>
<p><strong>For <code>list components</code> (unique component fields):</strong></p>
<ul>
<li class=""><code>{{ .component }}</code> - Component name</li>
<li class=""><code>{{ .type }}</code> - Component type (terraform, helmfile, packer)</li>
<li class=""><code>{{ .stack_count }}</code> - Number of stacks using this component</li>
<li class=""><code>{{ .component_folder }}</code> - Path to component folder</li>
</ul>
<p><strong>For <code>list instances</code> (per-instance fields):</strong></p>
<ul>
<li class="">All unique component fields above, plus:</li>
<li class=""><code>{{ .stack }}</code> - Stack name</li>
<li class=""><code>{{ .vars.* }}</code> - Any variable from the component (tenant, environment, stage, region, etc.)</li>
<li class=""><code>{{ .status }}</code> - Component status indicator</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="backward-compatibility">Backward Compatibility<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification#backward-compatibility" class="hash-link" aria-label="Direct link to Backward Compatibility" title="Direct link to Backward Compatibility" translate="no">​</a></h2>
<p>Existing configurations using <code>components.list.columns</code> continue to work for <code>list instances</code>. The precedence is:</p>
<p><strong>For <code>list instances</code>:</strong></p>
<ol>
<li class=""><code>--columns</code> CLI flag</li>
<li class=""><code>list.instances.columns</code> (new)</li>
<li class=""><code>components.list.columns</code> (deprecated, backward compat)</li>
<li class="">Default columns</li>
</ol>
<p><strong>For <code>list components</code>:</strong></p>
<ol>
<li class=""><code>--columns</code> CLI flag</li>
<li class=""><code>list.components.columns</code> (new)</li>
<li class="">Default columns (Component, Type, Stacks)</li>
</ol>
<p>Note: The old <code>components.list.columns</code> does <strong>not</strong> fall back for <code>list components</code> because those columns were designed for per-instance data (with stack-specific fields).</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="example-output">Example Output<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification#example-output" class="hash-link" aria-label="Direct link to Example Output" title="Direct link to Example Output" translate="no">​</a></h2>
<p><strong><code>atmos list components</code></strong> now shows unique components:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">Component             Type        Stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc                   terraform   6</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc-flow-logs-bucket  terraform   6</span><br></span></code></pre></div></div>
<p><strong><code>atmos list components --stack "*-dev"</code></strong> filters to dev stacks:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">Component             Type        Stacks</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc                   terraform   2</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">vpc-flow-logs-bucket  terraform   2</span><br></span></code></pre></div></div>
<p><strong><code>atmos list instances</code></strong> continues to show all instances:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">Stack           Component             Type        ...</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">plat-ue2-dev    vpc                   terraform   ...</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">plat-ue2-dev    vpc-flow-logs-bucket  terraform   ...</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">plat-ue2-prod   vpc                   terraform   ...</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">...</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="migration">Migration<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/list-components-behavior-clarification#migration" class="hash-link" aria-label="Direct link to Migration" title="Direct link to Migration" translate="no">​</a></h2>
<p>Update your <code>atmos.yaml</code> from:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">list</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">columns</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">...</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></span></code></pre></div></div>
<p>To:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">list</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">instances</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">columns</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">...</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></span></code></pre></div></div>
<p>And optionally add a <code>list.components</code> section to customize the unique components output.</p>]]></content>
        <author>
            <name>Atmos Team</name>
            <uri>https://github.com/cloudposse/atmos</uri>
        </author>
        <category label="Enhancement" term="Enhancement"/>
        <category label="Bug Fix" term="Bug Fix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Ask AI: Conversational Search for Atmos Documentation]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ask-ai-search</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ask-ai-search"/>
        <updated>2026-01-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Finding information in documentation shouldn't require knowing the exact terminology or page structure. With Ask AI, you can now ask natural language questions about Atmos and get intelligent, contextual answers—powered by Algolia DocSearch v4 and ChatGPT.]]></summary>
        <content type="html"><![CDATA[<p>Finding information in documentation shouldn't require knowing the exact terminology or page structure. With <strong>Ask AI</strong>, you can now ask natural language questions about Atmos and get intelligent, contextual answers—powered by <a href="https://docsearch.algolia.com/docs/v4/askai/" target="_blank" rel="noopener noreferrer" class="">Algolia DocSearch v4</a> and ChatGPT.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="how-it-works">How It Works<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ask-ai-search#how-it-works" class="hash-link" aria-label="Direct link to How It Works" title="Direct link to How It Works" translate="no">​</a></h2>
<p>When you open the search dialog (press <code>/</code> or <code>Cmd+K</code>), you can seamlessly switch between traditional keyword search and a chat-style assistant that understands your questions.</p>
<p><strong>Key features:</strong></p>
<ul>
<li class=""><strong>Natural language queries</strong> - Ask questions like "How do I configure AWS SSO authentication?" or "What's the difference between stacks and components?"</li>
<li class=""><strong>Contextual answers</strong> - Responses are generated from the actual documentation content, not generic AI knowledge</li>
<li class=""><strong>Source citations</strong> - Every answer includes links to the specific documentation pages it drew from</li>
<li class=""><strong>Seamless experience</strong> - Switch between keyword search and AI assistant without leaving the search dialog.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="under-the-hood">Under the Hood<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ask-ai-search#under-the-hood" class="hash-link" aria-label="Direct link to Under the Hood" title="Direct link to Under the Hood" translate="no">​</a></h2>
<p>Ask AI uses Algolia's integration with large language models (LLMs) to understand your questions and find relevant information from the indexed documentation. The assistant is specifically trained on Atmos documentation, so it understands:</p>
<ul>
<li class="">Atmos CLI commands and their flags</li>
<li class="">Stack configuration patterns and YAML syntax</li>
<li class="">Authentication providers and identity management</li>
<li class="">Workflows, custom commands, and extensibility patterns</li>
<li class="">Design patterns and best practices</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="try-it-now">Try It Now<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ask-ai-search#try-it-now" class="hash-link" aria-label="Direct link to Try It Now" title="Direct link to Try It Now" translate="no">​</a></h2>
<p>Visit <a href="https://atmos.tools/" target="_blank" rel="noopener noreferrer" class="">atmos.tools</a> and press <code>/</code> or <code>Cmd+K</code> to open the search dialog. Try asking questions like:</p>
<ul>
<li class="">"How do I set up AWS SSO with Atmos?"</li>
<li class="">"What is the difference between imports and inheritance?"</li>
<li class="">"How do I create a custom workflow?"</li>
<li class="">"What YAML functions are available?"</li>
</ul>
<p>The AI assistant will provide detailed answers with direct links to the relevant documentation pages.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="technical-details">Technical Details<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ask-ai-search#technical-details" class="hash-link" aria-label="Direct link to Technical Details" title="Direct link to Technical Details" translate="no">​</a></h2>
<p>This feature is enabled by upgrading to Docusaurus 3.9.2 and DocSearch v4, which adds native support for Algolia's Ask AI feature. The assistant is configured with an understanding of Atmos as a DevOps and cloud automation tool, ensuring responses are relevant and technically accurate.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="get-involved">Get Involved<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/ask-ai-search#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>Have feedback on Ask AI? We'd love to hear how it's helping you navigate the documentation:</p>
<ul>
<li class=""><a href="https://github.com/cloudposse/atmos/issues" target="_blank" rel="noopener noreferrer" class="">Open an issue</a> for bugs or feature requests</li>
<li class=""><a href="https://slack.cloudposse.com/" target="_blank" rel="noopener noreferrer" class="">Join our Slack</a> to discuss with the community</li>
<li class=""><a href="https://github.com/cloudposse/atmos" target="_blank" rel="noopener noreferrer" class="">Star the repo</a> if you find Atmos helpful</li>
</ul>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Feature" term="Feature"/>
        <category label="Documentation" term="Documentation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Experimental Feature Controls]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag"/>
        <updated>2026-01-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now provides granular control over experimental features with the new settings.experimental configuration option—giving teams the flexibility to explore new capabilities safely while maintaining stability in production environments.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now provides granular control over experimental features with the new <code>settings.experimental</code> configuration option—giving teams the flexibility to explore new capabilities safely while maintaining stability in production environments.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="whats-new">What's New<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#whats-new" class="hash-link" aria-label="Direct link to What's New" title="Direct link to What's New" translate="no">​</a></h2>
<p>Experimental features in Atmos are now clearly marked and controllable. The new <code>settings.experimental</code> configuration option lets you choose how Atmos handles experimental commands:</p>
<ul>
<li class=""><strong><code>warn</code></strong> (default) — Show a notification when running experimental commands, then continue</li>
<li class=""><strong><code>silence</code></strong> — Run experimental commands without any notification</li>
<li class=""><strong><code>disable</code></strong> — Block experimental commands entirely</li>
<li class=""><strong><code>error</code></strong> — Show notification and exit with an error code</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="cli-visibility">CLI Visibility<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#cli-visibility" class="hash-link" aria-label="Direct link to CLI Visibility" title="Direct link to CLI Visibility" translate="no">​</a></h3>
<p>Experimental commands are now clearly marked in help output with an <code>[EXPERIMENTAL]</code> badge:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">AVAILABLE COMMANDS</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      devcontainer [command] [EXPERIMENTAL]  Manage development containers</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      terraform                              Execute terraform commands</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      toolchain [command] [EXPERIMENTAL]     Manage CLI tool versions</span><br></span></code></pre></div></div>
<p>When you run <code>--help</code> on an experimental command, you'll see a prominent badge at the top:</p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">[EXPERIMENTAL]</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">Manage development containers with full lifecycle support.</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="configuration">Configuration<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration" translate="no">​</a></h2>
<p>Control experimental features in <code>atmos.yaml</code>:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Control experimental feature handling</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Values: "silence", "disable", "warn" (default), "error"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">experimental</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> warn</span><br></span></code></pre></div></div>
<p>Or via environment variable:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token builtin class-name" style="color:rgb(255, 203, 139)">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:rgb(214, 222, 235)">ATMOS_EXPERIMENTAL</span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain">disable</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="current-experimental-features">Current Experimental Features<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#current-experimental-features" class="hash-link" aria-label="Direct link to Current Experimental Features" title="Direct link to Current Experimental Features" translate="no">​</a></h2>
<p>The following features are currently marked as experimental:</p>
<table><thead><tr><th>Feature</th><th>Command</th><th>Description</th></tr></thead><tbody><tr><td>Devcontainers</td><td><code>atmos devcontainer</code></td><td>Development container lifecycle management</td></tr><tr><td>Toolchain</td><td><code>atmos toolchain</code></td><td>Tool version management and installation</td></tr><tr><td>Backend Provisioning</td><td><code>atmos terraform backend</code></td><td>Terraform state backend management</td></tr><tr><td>Workdir Management</td><td><code>atmos terraform workdir</code></td><td>Component working directory management</td></tr><tr><td>Affected Components</td><td><code>atmos list affected</code></td><td>Identify changes for targeted CI/CD</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="use-cases">Use Cases<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#use-cases" class="hash-link" aria-label="Direct link to Use Cases" title="Direct link to Use Cases" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="development-environment">Development Environment<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#development-environment" class="hash-link" aria-label="Direct link to Development Environment" title="Direct link to Development Environment" translate="no">​</a></h3>
<p>For local development where you want to experiment with new features:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">experimental</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> warn  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># See warnings but continue working</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="cicd-pipeline">CI/CD Pipeline<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#cicd-pipeline" class="hash-link" aria-label="Direct link to CI/CD Pipeline" title="Direct link to CI/CD Pipeline" translate="no">​</a></h3>
<p>For continuous integration where you want stability:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">experimental</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> disable  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Block experimental commands in CI</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="production-environment">Production Environment<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#production-environment" class="hash-link" aria-label="Direct link to Production Environment" title="Direct link to Production Environment" translate="no">​</a></h3>
<p>For production where experimental features must be explicitly enabled:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">settings</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">experimental</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> error  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Require explicit opt-in</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<p>As Atmos continues to evolve, we're adding powerful new capabilities like devcontainers, toolchain management, and advanced Terraform features. These features need real-world testing before they're considered stable.</p>
<p>The experimental feature flag gives you:</p>
<ul>
<li class=""><strong>Clear visibility</strong> — Know immediately when you're using an experimental feature</li>
<li class=""><strong>Granular control</strong> — Choose how to handle experimental features per environment</li>
<li class=""><strong>Safe exploration</strong> — Try new features locally while keeping CI stable</li>
<li class=""><strong>Predictable behavior</strong> — Same configuration works identically across environments</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="documentation">Documentation<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/experimental-feature-flag#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<p>For complete documentation on experimental features and configuration options, see:</p>
<ul>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/settings/experimental">Experimental Features Configuration</a></li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/cli/configuration/settings">Settings Reference</a></li>
</ul>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Feature" term="Feature"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fixed: File-Scoped Locals Now Resolve Templates Correctly]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix"/>
        <updated>2026-01-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The file-scoped locals feature introduced in v1.203.0 now correctly resolves {{ .locals.* }} templates in stack configurations.]]></summary>
        <content type="html"><![CDATA[<p>The file-scoped locals feature introduced in v1.203.0 now correctly resolves <code>{{ .locals.* }}</code> templates in stack configurations.
Previously, locals were defined but not integrated into the template processing pipeline, causing templates to remain unresolved.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>When using file-scoped locals as documented, templates referencing locals were not being resolved:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/prod.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">name_prefix</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.namespace }}-{{ .locals.environment }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">myapp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.name_prefix }}-myapp"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">stage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.environment }}"</span><br></span></code></pre></div></div>
<p>Running <code>atmos describe component</code> showed raw template strings instead of resolved values:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Before fix - templates not resolved</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.name_prefix }}-myapp"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">stage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.environment }}"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-fix">The Fix<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#the-fix" class="hash-link" aria-label="Direct link to The Fix" title="Direct link to The Fix" translate="no">​</a></h2>
<p>Atmos now correctly resolves locals before template processing. The same configuration now produces the expected output:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># After fix - templates resolved correctly</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"acme-prod-myapp"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">stage</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"prod"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h3>
<ol>
<li class=""><strong>Locals extraction</strong> - Raw YAML is now parsed to extract <code>locals:</code> sections before template processing</li>
<li class=""><strong>Template context</strong> - Resolved locals are added to the template context so <code>{{ .locals.* }}</code> references work</li>
<li class=""><strong>Section override tracking</strong> - Section-specific locals (in <code>terraform:</code>, <code>helmfile:</code>, <code>packer:</code>) correctly override global locals</li>
<li class=""><strong>Component-level locals</strong> - Components can now define their own <code>locals:</code> section that inherits from base components</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="new-command-atmos-describe-locals">New Command: <code>atmos describe locals</code><a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#new-command-atmos-describe-locals" class="hash-link" aria-label="Direct link to new-command-atmos-describe-locals" title="Direct link to new-command-atmos-describe-locals" translate="no">​</a></h3>
<p>A new command has been added to help inspect and debug locals configurations:</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Show locals for a specific stack (using file path)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe locals </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> deploy/dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Show locals for a specific stack (using logical stack name from atmos.yaml)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe locals </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--stack</span><span class="token plain"> prod-us-east-1</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Show locals available to a specific component in a stack</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe locals vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Output as JSON</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe locals </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> json</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Write to file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe locals </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> dev </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--file</span><span class="token plain"> locals.yaml</span><br></span></code></pre></div></div>
<p><strong>Note:</strong> The <code>--stack</code> flag is required. Locals are file-scoped, so a specific stack must be specified.</p>
<p>The <code>--stack</code> flag accepts either a <strong>stack manifest file path</strong> (e.g., <code>deploy/dev</code>) or a <strong>logical stack name</strong> derived from your <code>atmos.yaml</code> naming pattern (e.g., <code>prod-us-east-1</code>). Both resolve to the same underlying file, and locals are returned from that file only.</p>
<h4 class="anchor anchorTargetStickyNavbar_SsMH" id="component-specific-locals">Component-Specific Locals<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#component-specific-locals" class="hash-link" aria-label="Direct link to Component-Specific Locals" title="Direct link to Component-Specific Locals" translate="no">​</a></h4>
<p>When specifying a component with the <code>--stack</code> flag, the command shows the merged locals that would be <strong>available to</strong> that component during template processing. This includes global locals, section-specific locals (for the component's type), and component-level locals (including inherited from base components):</p>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe locals vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span></code></pre></div></div>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">backend_bucket</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">tfstate</span><br></span></code></pre></div></div>
<p>The output uses Atmos schema format, matching the structure of stack manifest files.</p>
<h4 class="anchor anchorTargetStickyNavbar_SsMH" id="stack-level-output">Stack-Level Output<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#stack-level-output" class="hash-link" aria-label="Direct link to Stack-Level Output" title="Direct link to Stack-Level Output" translate="no">​</a></h4>
<p>Without a component argument, the output is in direct stack manifest format:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">name_prefix</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">dev</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">backend_bucket</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">dev</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">tfstate</span><br></span></code></pre></div></div>
<ul>
<li class=""><strong>locals</strong> - Global locals defined at root level of the stack file</li>
<li class=""><strong>terraform/helmfile/packer</strong> - Section-specific locals nested under <code>{ locals: }</code> (only shown if defined)</li>
</ul>
<p>The output is in direct stack manifest format - it can be redirected to a file and used as valid YAML (e.g., <code>atmos describe locals -s dev --file locals.yaml</code>).</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="section-specific-locals">Section-Specific Locals<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#section-specific-locals" class="hash-link" aria-label="Direct link to Section-Specific Locals" title="Direct link to Section-Specific Locals" translate="no">​</a></h3>
<p>Locals can be defined at multiple levels, with later scopes overriding earlier ones:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Global locals</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"global-acme"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Terraform-scope locals override global</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"terraform-acme"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">backend_bucket</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.namespace }}-tfstate"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">myapp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Uses terraform-scope value: "terraform-acme-tfstate"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">bucket</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.backend_bucket }}"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="features-that-work">Features That Work<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#features-that-work" class="hash-link" aria-label="Direct link to Features That Work" title="Direct link to Features That Work" translate="no">​</a></h2>
<p>All documented locals features now function correctly:</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="component-level-locals-with-inheritance">Component-Level Locals with Inheritance<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#component-level-locals-with-inheritance" class="hash-link" aria-label="Direct link to Component-Level Locals with Inheritance" title="Direct link to Component-Level Locals with Inheritance" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc/base</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"standard"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr_prefix</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"10.0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc/prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">inherits</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> vpc/base</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"production"</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Overrides base</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.cidr_prefix }}.0.0/16"</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Inherited from base</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="locals-referencing-other-locals">Locals Referencing Other Locals<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#locals-referencing-other-locals" class="hash-link" aria-label="Direct link to Locals Referencing Other Locals" title="Direct link to Locals Referencing Other Locals" translate="no">​</a></h3>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Resolved in dependency order</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">name_prefix</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.namespace }}-{{ .locals.environment }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">full_name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.name_prefix }}-us-east-1"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="circular-dependency-detection">Circular Dependency Detection<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#circular-dependency-detection" class="hash-link" aria-label="Direct link to Circular Dependency Detection" title="Direct link to Circular Dependency Detection" translate="no">​</a></h3>
<p>Atmos detects circular dependencies and logs them gracefully:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># This triggers a circular dependency warning</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">a</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.b }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.a }}"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="complex-values">Complex Values<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#complex-values" class="hash-link" aria-label="Direct link to Complex Values" title="Direct link to Complex Values" translate="no">​</a></h3>
<p>Maps and nested structures work as expected:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">common_tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">Environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.environment }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">Namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.namespace }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.common_tags }}"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="supported-scopes">Supported Scopes<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#supported-scopes" class="hash-link" aria-label="Direct link to Supported Scopes" title="Direct link to Supported Scopes" translate="no">​</a></h2>
<p>Locals can be defined at three levels:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Global locals (root level) - available throughout the file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">namespace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> acme</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">environment</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Section-level locals (terraform/helmfile/packer) - inherit from global</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">backend_bucket</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.namespace }}-{{ .locals.environment }}-tfstate"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Component-level locals - inherit from global and section, plus base components</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"production"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Uses merged locals (global + terraform section + component)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">bucket</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.backend_bucket }}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.vpc_type }}"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="component-level-locals-inheritance">Component-Level Locals Inheritance<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#component-level-locals-inheritance" class="hash-link" aria-label="Direct link to Component-Level Locals Inheritance" title="Direct link to Component-Level Locals Inheritance" translate="no">​</a></h3>
<p>Component-level locals support inheritance from base components via <code>metadata.inherits</code> or <code>component</code> attribute, similar to how <code>vars</code> work:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc/base</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> abstract</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"standard"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr_prefix</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"10.0"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc/prod</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">inherits</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> vpc/base</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">locals</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Overrides base component's vpc_type</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_type</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"production"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Uses inherited cidr_prefix from base, overridden vpc_type</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.cidr_prefix }}.0.0/16"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"{{ .locals.vpc_type }}-vpc"</span><br></span></code></pre></div></div>
<p><strong>Full locals resolution order for a component:</strong></p>
<div class="language-text codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-text codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token plain">Global Locals → Section Locals → Base Component Locals → Component Locals</span><br></span></code></pre></div></div>
<p><strong>Note:</strong> File-scoped locals (global and section-level) do NOT inherit across file boundaries. Only component-level locals inherit from base components.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="upgrade">Upgrade<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#upgrade" class="hash-link" aria-label="Direct link to Upgrade" title="Direct link to Upgrade" translate="no">​</a></h2>
<p>Upgrade Atmos to get this fix. No configuration changes are required.
Your existing <code>locals:</code> definitions will automatically start working.</p>
<div class="theme-admonition theme-admonition-note admonition_cbIa alert alert--secondary"><div class="admonitionHeading_squj"><span class="admonitionIcon_bxkr"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Reserved Context Key</div><div class="admonitionContent_HCPN"><p>The <code>locals</code> key in template context is now reserved for file-scoped locals. If you previously used a <code>locals</code> key in import context (via the <code>context:</code> parameter), it will be overridden by file-scoped locals when present. This is unlikely to affect existing configurations since the <code>locals</code> feature is new.</p></div></div>
<div class="theme-admonition theme-admonition-warning admonition_cbIa alert alert--warning"><div class="admonitionHeading_squj"><span class="admonitionIcon_bxkr"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Template Processing with Locals</div><div class="admonitionContent_HCPN"><p>When a file defines locals, template processing is automatically enabled. If your YAML files contain non-Atmos template syntax (e.g., Helm's <code>{{ ... }}</code>), use <code>skip_templates_processing: true</code> in the import to preserve literal syntax:</p><div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token key atrule">import</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> catalog/helm</span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain">values</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">skip_templates_processing</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">true</span><br></span></code></pre></div></div></div></div>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># View locals for a specific stack</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe locals </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Verify locals are resolving correctly in component output</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos describe component myapp </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">--format</span><span class="token plain"> yaml</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="references">References<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals-fix#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/cloudposse/atmos/issues/1933" target="_blank" rel="noopener noreferrer" class="">GitHub Issue #1933</a></li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/stacks/locals">File-Scoped Locals Documentation</a></li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/file-scoped-locals">Original Feature Announcement</a></li>
</ul>]]></content>
        <author>
            <name>Andriy Knysh</name>
            <uri>https://github.com/aknysh</uri>
        </author>
        <category label="Bug Fix" term="Bug Fix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Stack Name Identity and Zero-Config Defaults]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity"/>
        <updated>2026-01-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Atmos now enforces a single canonical identity per stack and supports zero-config stack naming using filenames. These changes make Atmos easier for newcomers while providing explicit control for advanced users.]]></summary>
        <content type="html"><![CDATA[<p>Atmos now enforces a single canonical identity per stack and supports zero-config stack naming using filenames. These changes make Atmos easier for newcomers while providing explicit control for advanced users.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="what-changed">What Changed<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="single-identity-rule">Single Identity Rule<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity#single-identity-rule" class="hash-link" aria-label="Direct link to Single Identity Rule" title="Direct link to Single Identity Rule" translate="no">​</a></h3>
<p>Each stack now has exactly ONE valid identifier based on this precedence:</p>
<ol>
<li class=""><strong><code>name</code></strong> (highest) - Explicit name from stack manifest</li>
<li class=""><strong><code>name_template</code></strong> - Go template from <code>atmos.yaml</code></li>
<li class=""><strong><code>name_pattern</code></strong> - Token pattern from <code>atmos.yaml</code></li>
<li class=""><strong>Filename</strong> (lowest) - Basename of the stack file</li>
</ol>
<p>Previously, a stack might respond to multiple identifiers (e.g., both the filename and a generated name). Now, only the highest-priority identifier is valid.</p>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="zero-config-stack-naming">Zero-Config Stack Naming<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity#zero-config-stack-naming" class="hash-link" aria-label="Direct link to Zero-Config Stack Naming" title="Direct link to Zero-Config Stack Naming" translate="no">​</a></h3>
<p>When no <code>name</code>, <code>name_template</code>, or <code>name_pattern</code> is configured, stacks are identified by their filename. This enables newcomers to start using Atmos immediately without any naming configuration.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="why-this-matters">Why This Matters<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity#why-this-matters" class="hash-link" aria-label="Direct link to Why This Matters" title="Direct link to Why This Matters" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="for-newcomers">For Newcomers<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity#for-newcomers" class="hash-link" aria-label="Direct link to For Newcomers" title="Direct link to For Newcomers" translate="no">​</a></h3>
<p>Getting started with Atmos is now simpler. Create a stack file and reference it by filename:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/prod.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">vpc</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"10.0.0.0/16"</span><br></span></code></pre></div></div>
<div class="language-bash codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-bash codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Just works - no naming configuration required</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">atmos terraform plan vpc </span><span class="token parameter variable" style="color:rgb(214, 222, 235)">-s</span><span class="token plain"> prod</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_SsMH" id="for-advanced-users">For Advanced Users<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity#for-advanced-users" class="hash-link" aria-label="Direct link to For Advanced Users" title="Direct link to For Advanced Users" translate="no">​</a></h3>
<p>The single identity rule prevents confusion. If you have:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># stacks/legacy-prod.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"my-legacy-prod-stack"</span><br></span></code></pre></div></div>
<p>Only <code>atmos terraform plan vpc -s my-legacy-prod-stack</code> works. Using <code>-s legacy-prod</code> correctly returns an error because that's not the canonical name.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="migration-notes">Migration Notes<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity#migration-notes" class="hash-link" aria-label="Direct link to Migration Notes" title="Direct link to Migration Notes" translate="no">​</a></h2>
<p>If you were using both the filename and a generated name to reference the same stack, you must now use only the canonical name. Check which identifier has highest precedence:</p>
<ul>
<li class="">Stack has <code>name</code> field? Use that name.</li>
<li class=""><code>name_template</code> or <code>name_pattern</code> configured? Use the generated name.</li>
<li class="">Neither? Use the filename.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="related">Related<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-name-identity#related" class="hash-link" aria-label="Direct link to Related" title="Direct link to Related" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/stack-manifest-name-override">Stack Manifest Name Override</a></li>
<li class=""><a class="" href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/stacks/name">Stack Names Documentation</a></li>
</ul>]]></content>
        <author>
            <name>Erik Osterman</name>
            <uri>https://github.com/osterman</uri>
        </author>
        <category label="Feature" term="Feature"/>
        <category label="DX" term="DX"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fixed: !terraform.state with Disabled Workspaces]]></title>
        <id>https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-state-workspaces-disabled-fix</id>
        <link href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-state-workspaces-disabled-fix"/>
        <updated>2026-01-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The !terraform.state YAML function now correctly reads Terraform state when workspaces are disabled]]></summary>
        <content type="html"><![CDATA[<p>The <code>!terraform.state</code> YAML function now correctly reads Terraform state when workspaces are disabled
(<code>components.terraform.workspaces_enabled: false</code> in <code>atmos.yaml</code>).
Previously, Atmos looked for state files in the wrong location, causing the function to fail.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-problem">The Problem<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-state-workspaces-disabled-fix#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>When <code>workspaces_enabled: false</code> is set in <code>atmos.yaml</code>, Atmos sets the workspace name to <code>default</code>.
However, Terraform stores state differently for the default workspace compared to named workspaces:</p>
<table><thead><tr><th>Backend</th><th>Default Workspace</th><th>Named Workspace</th></tr></thead><tbody><tr><td><strong>S3</strong></td><td><code>&lt;key&gt;</code></td><td><code>&lt;workspace_key_prefix&gt;/&lt;workspace&gt;/&lt;key&gt;</code></td></tr><tr><td><strong>Local</strong></td><td><code>terraform.tfstate</code></td><td><code>terraform.tfstate.d/&lt;workspace&gt;/terraform.tfstate</code></td></tr><tr><td><strong>Azure</strong></td><td><code>&lt;key&gt;</code></td><td><code>&lt;key&gt;env:&lt;workspace&gt;</code></td></tr></tbody></table>
<p>Atmos was incorrectly looking for state at the named workspace path even when using the default workspace. For example:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># atmos.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">workspaces_enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">false</span><span class="token plain">  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Uses "default" workspace</span><br></span></code></pre></div></div>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Stack manifest</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">my-component</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!terraform.state</span><span class="token plain"> vpc output_id  </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Failed to find state!</span><br></span></code></pre></div></div>
<p>The <code>!terraform.state</code> function would look for state at <code>workspace_key_prefix/default/key</code> (S3)
or <code>terraform.tfstate.d/default/terraform.tfstate</code> (local) instead of the correct location.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="the-fix">The Fix<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-state-workspaces-disabled-fix#the-fix" class="hash-link" aria-label="Direct link to The Fix" title="Direct link to The Fix" translate="no">​</a></h2>
<p>Atmos now correctly handles the default workspace for all backend types:</p>
<ul>
<li class=""><strong>S3 backend</strong>: Uses <code>&lt;key&gt;</code> directly instead of <code>&lt;workspace_key_prefix&gt;/default/&lt;key&gt;</code></li>
<li class=""><strong>Local backend</strong>: Uses <code>terraform.tfstate</code> instead of <code>terraform.tfstate.d/default/terraform.tfstate</code></li>
<li class=""><strong>Azure backend</strong>: Already worked correctly</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="example">Example<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-state-workspaces-disabled-fix#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h2>
<p>With workspaces disabled, the <code>!terraform.state</code> function now works as expected:</p>
<div class="language-yaml codeBlockContainer_E9g6 theme-code-block" style="--prism-color:#d6deeb;--prism-background-color:#011627"><div class="codeBlockContent_vFnX"><pre tabindex="0" class="prism-code language-yaml codeBlock_wj5q thin-scrollbar" style="color:#d6deeb;background-color:#011627"><code class="codeBlockLines_hX2B"><span class="token-line" style="color:#d6deeb"><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># atmos.yaml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">workspaces_enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token boolean important" style="color:rgb(255, 88, 116)">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Stack manifest</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token key atrule">components</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token key atrule">terraform</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">networking</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> vpc</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">cidr</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">"10.0.0.0/16"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token key atrule">application</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">metadata</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">component</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> app</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token key atrule">vars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic"># Now correctly reads from terraform.tfstate (not terraform.tfstate.d/default/terraform.tfstate)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">vpc_id</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!terraform.state</span><span class="token plain"> networking vpc_id</span><br></span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token key atrule">subnet_ids</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token tag" style="color:rgb(127, 219, 202)">!terraform.state</span><span class="token plain"> networking private_subnet_ids</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="upgrade">Upgrade<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-state-workspaces-disabled-fix#upgrade" class="hash-link" aria-label="Direct link to Upgrade" title="Direct link to Upgrade" translate="no">​</a></h2>
<p>Upgrade Atmos to get this fix. No configuration changes are required.
The <code>!terraform.state</code> function will automatically use the correct state file paths based on your workspace configuration.</p>
<h2 class="anchor anchorTargetStickyNavbar_SsMH" id="references">References<a href="https://pr-1907.atmos-docs.ue2.dev.plat.cloudposse.org/changelog/terraform-state-workspaces-disabled-fix#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/cloudposse/atmos/issues/1920" target="_blank" rel="noopener noreferrer" class="">GitHub Issue #1920</a></li>
<li class=""><a href="https://developer.hashicorp.com/terraform/language/backend/s3" target="_blank" rel="noopener noreferrer" class="">Terraform S3 Backend Documentation</a></li>
<li class=""><a href="https://developer.hashicorp.com/terraform/language/backend/local" target="_blank" rel="noopener noreferrer" class="">Terraform Local Backend Documentation</a></li>
<li class=""><a href="https://developer.hashicorp.com/terraform/language/backend/azurerm" target="_blank" rel="noopener noreferrer" class="">Terraform Azure Backend Documentation</a></li>
<li class=""><a href="https://developer.hashicorp.com/terraform/language/backend/gcs" target="_blank" rel="noopener noreferrer" class="">Terraform GCS Backend Documentation</a></li>
</ul>]]></content>
        <author>
            <name>Andriy Knysh</name>
            <uri>https://github.com/aknysh</uri>
        </author>
        <category label="Bug Fix" term="Bug Fix"/>
    </entry>
</feed>