id = "balena-cli"
name = "balena CLI"
homepage = "https://github.com/balena-io/balena-cli"
description = "The official balena CLI tool."
executables = ["balena"]
[dotfiles]
paths = [
"~/.balenarc.yml",
"%USERPROFILE%/_balenarc.yml",
]
secret = [
"~/.balena/token",
"%USERPROFILE%/_balena/token",
]
[commands]
format = 1
label = "balena CLI"
description = "Push a project to balenaCloud or a local mode device. Other balena commands and login are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = false, short_bundles = false }
[[commands.source]]
id = "docs"
kind = "manual"
url = "https://raw.githubusercontent.com/balena-io/balena-cli/HEAD/docs/balena-cli.md"
revision = "HEAD 2026-10-27"
evidence = """#### FLEETORDEVICE
fleet name or slug, or local device IP address or ".local" hostname
Source directory to be sent to balenaCloud or balenaOS device
(default: current working dir)
Don't use the faster, native balenaCloud ARM builders; force slower QEMU ARM emulation on Intel x86-64 builders.
Alternative Dockerfile name/path, relative to the source folder
Don't use cached layers of previously built images for this project.
When pushing to a local device, force the base images to be pulled again.
Path to a local YAML or JSON file containing Docker registry passwords used to pull base images.
Don't run a live session on this push.
When pushing to the cloud, this option will cause the build to start, then return execution back to the shell, with the status and release ID (if applicable).
Reject logs not originating from this service."""
[[commands.subcommand]]
path = ["push"]
label = "Push a project"
description = "Build release images on balenaCloud or on a local mode device from a source directory."
[[commands.subcommand.source]]
id = "docs"
kind = "manual"
url = "https://raw.githubusercontent.com/balena-io/balena-cli/HEAD/docs/balena-cli.md"
revision = "HEAD 2026-10-27"
evidence = """#### FLEETORDEVICE
fleet name or slug, or local device IP address or ".local" hostname
Source directory to be sent to balenaCloud or balenaOS device
(default: current working dir)
Don't use the faster, native balenaCloud ARM builders; force slower QEMU ARM emulation on Intel x86-64 builders.
Alternative Dockerfile name/path, relative to the source folder
Don't use cached layers of previously built images for this project.
When pushing to a local device, force the base images to be pulled again.
Path to a local YAML or JSON file containing Docker registry passwords used to pull base images.
Don't run a live session on this push.
When pushing to the cloud, this option will cause the build to start, then return execution back to the shell, with the status and release ID (if applicable).
Reject logs not originating from this service."""
[[commands.subcommand.field]]
id = "target"
label = "Fleet or device"
description = "Fleet name or slug, or local device IP address or .local hostname."
type = "string"
position = 0
sources = ["docs"]
[[commands.subcommand.field]]
id = "source"
label = "Source directory"
description = "Defaults to the current directory."
type = "path"
option = ["--source", "-s"]
path = { kind = "directory", role = "input", must_exist = true }
sources = ["docs"]
[[commands.subcommand.field]]
id = "dockerfile"
label = "Dockerfile"
description = "Alternative Dockerfile name or path, relative to the source folder."
type = "string"
option = ["--dockerfile"]
sources = ["docs"]
[[commands.subcommand.field]]
id = "nocache"
label = "No cache"
type = "boolean"
option = ["--nocache", "-c"]
sources = ["docs"]
[[commands.subcommand.field]]
id = "emulated"
label = "Force QEMU emulation"
type = "boolean"
option = ["--emulated", "-e"]
sources = ["docs"]
[[commands.subcommand.field]]
id = "pull"
label = "Pull base images again"
description = "Local device only."
type = "boolean"
option = ["--pull"]
sources = ["docs"]
[[commands.subcommand.field]]
id = "detached"
label = "Detached"
type = "boolean"
option = ["--detached", "-d"]
sources = ["docs"]
[[commands.subcommand.field]]
id = "nolive"
label = "No live session"
type = "boolean"
option = ["--nolive"]
sources = ["docs"]
[[commands.subcommand.field]]
id = "registry_secrets"
label = "Registry secrets file"
type = "path"
option = ["--registry-secrets", "-R"]
path = { kind = "file", role = "input", must_exist = true }
sources = ["docs"]
[[commands.subcommand.field]]
id = "service"
label = "Only logs from service"
description = "Local mode device only."
type = "string"
option = ["--service"]
multiple = true
sources = ["docs"]
[[commands.subcommand.task]]
id = "push"
label = "Push current project"
fields = ["target", "source"]
required = ["target"]
[[commands.subcommand.task]]
id = "push_detached"
label = "Push and return immediately"
fields = ["target", "source", "detached"]
required = ["target"]
set = { detached = [true] }
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["target", "source", "detached"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["dockerfile", "nocache", "emulated", "pull", "nolive", "registry_secrets", "service"]