Configure Dependencies
The dependencies section has four sibling keys: tools (required CLI versions), components (other Atmos components this one depends on), files (file paths whose changes affect this component), and folders (folder paths whose changes affect this component). Tool dependencies pin CLI versions like Terraform, kubectl, or helm; components defines execution ordering between Atmos components, and files/folders declare watch-paths used by atmos describe affected and CI/CD integrations.
Use Cases
- Tool Version Requirements: Ensure components use specific Terraform, kubectl, or helm versions
- Team Consistency: Version-control tool requirements for reproducible deployments
- CI/CD Reliability: Guarantee correct tool versions in automated pipelines
- Execution Order: Deploy dependent components in the correct sequence
- Impact Analysis: Let
atmos describe affectedfind components impacted by changes to other components, files, or folders
Tool Dependencies
The dependencies.tools section declares which CLI tool versions a component requires. Atmos automatically installs and uses the specified versions when executing the component.
Configuration Scopes
Tool dependencies can be defined at multiple levels, with more specific levels taking precedence.
Project Defaults
The project's .tool-versions file supplies defaults for every command and component type: Terraform, Helmfile, Packer, Ansible, Helm, and Kubernetes component runs (including Terraform output and template lookups), workflows, custom commands, and hooks. The first version listed for each tool is its default. Every Atmos command inherits already-installed project selections on PATH; cached tools absent from the file and other cached versions are not added. Explicit dependencies.tools override this baseline. Downloads are controlled separately by the toolchain.install policy, which defaults to auto:
never- Atmos installs nothing. Explicit
dependencies.toolsand.tool-versionstools joinPATHonly when they are already installed. A missingdependencies.toolsentry is an error with a hint to runatmos toolchain install. A missing.tool-versionstool is skipped and the systemPATHis used. declared- Atmos installs only explicit
dependencies.tools. Other runs inherit already-installed project selections without installing missing defaults. Workflows install every tool listed in.tool-versionsthat is missing, because a workflow can call any project tool. auto(default)- Component runs install their own executable from
.tool-versionswhen the file pins it, plushelmfor Helmfile components. The executable comes from the component'scommand, thencomponents.<type>.commandinatmos.yaml, then the type default (terraform,helmfile,packer,ansible). Acommandthat is a path selects nothing, and native Kubernetes components run in process and select nothing. If the file does not pin the executable, Atmos installs nothing for it and uses the systemPATH. Every other tool in the file joinsPATHonly if it is already installed (for example byatmos toolchain install). Custom commands and hooks install only their owndependencies.toolsand use already-installed.tool-versionstools. Workflows install every tool listed in.tool-versionsthat is missing, together with the workflow's owndependencies.tools, before the first step runs. always- Atmos installs every usable
.tool-versionstool for every run: components, custom commands, hooks, and workflows.
Projects pinned to an edition dated before 2026-10-09 get declared, preserving their previous automatic download policy. Installed project selections remain the baseline under every policy.
An explicit dependencies.tools entry is installed when the policy permits it and always overrides the .tool-versions entry for the same tool without being constrained by it. Short names, configured aliases, and qualified names that resolve to the same tool are treated as one tool when Atmos compares the manifest with explicit dependencies: for example, terraform: "1.8.5" overrides hashicorp/terraform 1.9.0 in .tool-versions. Atmos does not apply this matching between different explicit stack scopes, so use the same key at each scope.
Project defaults are best effort. Atmos skips .tool-versions entries whose version is system, ref:..., or path:..., whose version is a bare operator such as ~> (write ~>1.9.0 without a space), or whose tool name Atmos cannot resolve (for example nodejs). Lines that list a tool without a version are skipped with a warning. Skipped entries never fail a run. When two entries name the same tool with the same version (for example tofu 1.12.6 and opentofu/opentofu 1.12.6), Atmos uses one of them. When they name the same tool with different versions, Atmos stops with an error naming both entries.
The manifest is optional. If neither the manifest nor explicit dependencies declare a tool, Atmos uses the system PATH. Component overrides do not rewrite .tool-versions.
Global Level
Tool versions defined at the root level apply to all components:
Component-Type Level
Tool versions defined under terraform, helmfile, packer, or ansible apply to all components of that type:
Component Level
Tool versions defined within a component override all higher-level settings:
Version Resolution
Tool dependencies support multiple version formats:
- Exact version
Use a specific version:
"1.9.8"- Latest version
Use the latest available version:
"latest"- Semver constraint (planned)
Use semantic version ranges:
">=1.8.0","~>1.9.0"
Inheritance and Merge Behavior
Tool dependencies are merged from the most general to the most specific level:
- Project
.tool-versions(project defaults, applied as described in Project Defaults) - Global
dependencies.tools(applies to all components) - Component-type
terraform.dependencies.tools(applies to all components of that type) - Component
components.terraform.<name>.dependencies.tools(applies to specific component)
Explicit dependencies always override .tool-versions defaults. Within the explicit stack scopes, more specific levels override less specific levels subject to existing parent version constraints. For example:
Result:
- Most Terraform components use Terraform 1.9.8
legacy-vpccomponent uses Terraform 1.5.0- All Terraform components use tflint 0.44.1
Integration with Toolchain
Tool dependencies integrate seamlessly with the toolchain management system:
- Automatic Installation: When you run a component, Atmos installs the required tool versions automatically
- Version Isolation: Each component uses its declared versions, isolated from other components
- Cache Efficiency: Tools are cached and reused across components with the same version requirements
Example workflow:
# Component declares terraform: "1.9.8"
atmos terraform plan vpc -s prod
# Atmos automatically:
# 1. Checks if terraform 1.9.8 is installed
# 2. Installs it if missing (from toolchain registries)
# 3. Executes: terraform plan (using 1.9.8)