id = "proto"
name = "proto"
homepage = "https://moonrepo.dev/proto"
description = "A pluggable multi-language version manager."
executables = ["proto"]
[dotfiles]
paths = ["~/.proto/.prototools", "~/.prototools"]
exclude = []
secret = []
side_effect = false
[commands]
format = 1
label = "proto"
description = "Install one tool with proto install. Other subcommands and post-install hook arguments are not covered."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = false, short_bundles = false }
[[commands.subcommand]]
path = ["install"]
label = "Install a tool"
description = "Install a tool at a version. Without a version it uses the pinned one in .prototools, or latest."
[[commands.subcommand.source]]
id = "docs"
kind = "manual"
url = "https://moonrepo.dev/docs/proto/commands/install"
revision = "2026-10-27"
evidence = """
$ proto install deno
$ proto install deno 1.31
$ proto install deno canary
$ proto install bun --pin
[tool]
- Type of tool.
[version]
- Version of tool. Defaults to a pinned version in .prototools or "latest".
--force
- Force install, even if already installed.
--build
- Build from source if available.
--no-build
- Download a pre-built if available.
--pin
- Pin the resolved version and create a symlink in ~/.proto/bin
"""
[[commands.subcommand.field]]
id = "tool"
label = "Tool"
description = "For example deno, bun, node, go."
type = "string"
position = 0
sources = ["docs"]
[[commands.subcommand.field]]
id = "version"
label = "Version"
description = "For example 1.31 or canary. Leave empty for the pinned version or latest."
type = "string"
position = 1
sources = ["docs"]
[[commands.subcommand.field]]
id = "force"
label = "Force reinstall"
type = "boolean"
option = ["--force"]
effect = "overwrite"
sources = ["docs"]
[[commands.subcommand.field]]
id = "build"
label = "Build from source"
type = "boolean"
option = ["--build"]
sources = ["docs"]
[[commands.subcommand.field]]
id = "no_build"
label = "Use a pre-built download"
type = "boolean"
option = ["--no-build"]
sources = ["docs"]
[[commands.subcommand.field]]
id = "pin"
label = "Pin the version"
type = "boolean"
option = ["--pin"]
sources = ["docs"]
[[commands.subcommand.task]]
id = "install_pinned"
label = "Install and pin"
fields = ["tool", "version", "pin"]
required = ["tool"]
set = { pin = [true] }
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["tool", "version", "pin"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["force", "build", "no_build"]