b install
Install binaries and sync environment files. If no arguments are given, b installs all binaries and syncs all envs from the b.yaml configuration file. You can also install specific binaries or env files on-the-fly.
Alias
i
Usage
Examples
Install all from config
If a b.yaml file is present, this command will install all binaries and sync all env files listed in it.
Install a specific binary
Install the latest version of a specific binary.
Install a specific version
Append @<version> to the binary name to install a specific version.
Install any GitHub release
Use a full provider reference to install any binary from GitHub releases.
Install and add to config
Use the --add flag to install a binary and simultaneously add it to your b.yaml.
Force an installation
Use the --force flag to overwrite an existing binary.
Install with an alias
Use the --alias flag to install a binary under a different name. This is useful when you want to use a custom name for a binary while still using the original binary's implementation.
This installs renvsubst but makes it available as envsubst. The alias binary will:
- Download and install the original binary (
renvsubst) - Create the alias binary file (
envsubst) - Work with all commands like version detection and execution
- Show in listings with the alias relationship:
renvsubst (envsubst)
You can combine --alias with other flags:
Sync environment files (SCP syntax)
Use SCP-style syntax to sync files from upstream git repositories:
The SCP syntax is: <repo>[@<version>]:/<glob> [<dest>]
- repo — A git-cloneable reference (e.g.,
github.com/org/repo) - version (optional) — A git tag, branch, or commit to pin
- glob — A file pattern to match in the repository (e.g.,
manifests/**) - dest (optional) — Local directory for the synced files; defaults to the matched path structure
Install from SSH repos
Use SSH URLs for private repositories (requires ssh-agent):
Install from local repos
Install from container images
Use docker:// to pull from a local container runtime, or oci:// to pull
daemonless from any OCI registry (Docker Hub, ghcr.io, quay.io, private).
# docker:// — requires a running docker/podman/nerdctl
b install docker://alpine/helm
b install docker://docker@cli # tag via @ (docker:cli image)
b install docker://docker@cli:/usr/local/bin/docker # explicit in-container path
# oci:// — daemonless; works in CI containers without docker
b install oci://ghcr.io/org/img@v1
b install oci://docker@cli:/usr/local/bin/docker
The syntax is: <docker://|oci://><image>[@<tag>][:/<path-in-image>]
- image — An image reference, including optional registry (e.g.,
alpine,ghcr.io/org/img) - tag (optional, after
@) — Image tag; defaults tolatest. Use@consistently with every otherbprovider rather than docker's nativeimage:tagsyntax - path (optional, after
:/) — Absolute path to the binary inside the image. When omitted,bsearches/usr/local/bin,/usr/bin,/bin, and/appfor a file named after the image's last segment
The leading / on the path disambiguates it from an image:tag pasted from docker documentation. For private registries, oci:// reads credentials from ~/.docker/config.json (same as docker login); see the authentication page.
Post-install hooks
Run a shell command after a binary is installed or updated. The hook only fires
when the on-disk binary actually changed — not on no-op skips or --dry-run.
The hook receives these environment variables:
| Variable | Description | Example |
|---|---|---|
B_EVENT | install or update | install |
B_NAME | Binary name | argsh |
B_VERSION | Version being installed | v0.6.6 |
B_FILE | Absolute path to the binary | /project/.bin/argsh |
In b.yaml:
Hooks are POSIX shell commands (run via sh -c), executed in the project root
directory — so relative paths like .completions/... resolve from there. Non-zero
exit produces a warning but does not fail the install. Output goes to stderr so it
doesn't interfere with progress bars. Hooks are also skipped during b update --dry-run
and --plan-json.
Flags
| Flag | Description |
|---|---|
--add | Add binary/env to b.yaml during install |
--alias | Install binary under a different name |
--fix | Pin the specified version in b.yaml |
--on-post | Shell command to run after install/update (saved with --add) |
-h, --help | help for install |
Global Flags
| Flag | Description |
|---|---|
-c, --config string | Path to configuration file (current: /home/fentas/github/fentas/b/.bin/b.yaml) |
--force | Force operations, overwriting existing binaries |
-q, --quiet | Quiet mode |
-v, --version | Print version information and quit |