id = "tenv"
name = "tenv"
homepage = "https://github.com/tofuutils/tenv"
description = "OpenTofu, Terraform, Terragrunt, Terramate and Atmos version manager, written in Go."
executables = ["tenv"]
[dotfiles]
paths = [
"~/.tenv/remote.yaml",
"~/.tenv/OpenTofu/version",
"~/.tenv/Terraform/version",
"~/.tenv/Terragrunt/version",
"~/.tenv/Terramate/version",
"~/.tenv/Atmos/version",
"~/.opentofu-version",
"~/.terraform-version",
"~/.terragrunt-version",
"~/.tgswitchrc",
"~/.terramate-version",
"~/.atmos-version",
]
exclude = ["~/.tenv/OpenTofu/*/", "~/.tenv/Terraform/*/", "~/.tenv/Terragrunt/*/", "~/.tenv/Terramate/*/", "~/.tenv/Atmos/*/"]
secret = []
[commands]
format = 1
label = "Manage tool versions"
description = "Run tenv <tool> <command> [version] to list, install or select OpenTofu, Terraform or Terragrunt versions. Per-command flags (such as --descending) and other tools are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.source]]
id = "readme"
kind = "help"
url = "https://github.com/tofuutils/tenv#usage"
revision = "2026-10-27"
evidence = """
tenv tofu install
tenv tofu install 1.6.0-beta5
tenv <tool> list
tenv <tool> list-remote
tenv tofu use -h
$ tenv tf constraint "<= 1.5.7"
$ tenv tg constraint
-q, --quiet no unnecessary output (and no log)
-r, --root-path string local path to install versions of OpenTofu, Terraform and Terragrunt
-v, --verbose verbose output (and set log level to Trace)
"""
[[commands.field]]
id = "tool"
label = "Tool"
type = "enum"
position = 0
min = 1
choices = [
{ value = "tofu", label = "OpenTofu" },
{ value = "tf", label = "Terraform" },
{ value = "tg", label = "Terragrunt" },
]
sources = ["readme"]
[[commands.field]]
id = "action"
label = "Command"
type = "enum"
position = 1
min = 1
choices = [
{ value = "list", label = "List installed versions" },
{ value = "list-remote", label = "List installable versions" },
{ value = "install", label = "Install a version" },
{ value = "use", label = "Switch default version" },
]
sources = ["readme"]
[[commands.field]]
id = "version"
label = "Version"
description = "Exact version, constraint expression, or latest / latest-stable. Optional for install."
type = "string"
position = 2
suggestions = [{ value = "latest", label = "latest" }, { value = "latest-stable", label = "latest-stable" }]
sources = ["readme"]
[[commands.field]]
id = "quiet"
label = "Quiet"
type = "boolean"
option = ["--quiet", "-q"]
sources = ["readme"]
[[commands.field]]
id = "verbose"
label = "Verbose"
type = "boolean"
option = ["--verbose", "-v"]
sources = ["readme"]
[[commands.field]]
id = "root_path"
label = "Install root"
type = "path"
option = ["--root-path", "-r"]
path = { kind = "directory", role = "output" }
sources = ["readme"]
[[commands.task]]
id = "install"
label = "Install a version"
fields = ["tool", "action", "version"]
required = ["tool", "action"]
set = { action = ["install"] }
[[commands.task]]
id = "list"
label = "List installed versions"
fields = ["tool", "action"]
required = ["tool", "action"]
set = { action = ["list"] }
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["tool", "action", "version"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["quiet", "verbose", "root_path"]