-
Notifications
You must be signed in to change notification settings - Fork 0
FAQ
No, and it won't become one. There is no dependency graph, no repository index, no uninstall
verb, no post-install hooks. binstaller downloads binary tool distributions you named yourself,
verifies them, and puts them where you said.
If you want a package manager, use your package manager. binstaller is for the tools it doesn't
carry β the ones you currently install with a hand-written curl | tar block.
A shell script does the same downloads. It just doesn't:
- print a complete dry-run plan before touching anything
- verify SHA-256 and refuse to continue on mismatch
- confine archive members to a staging root
- re-validate every redirect hop against an SSRF guard
- record resolved versions, URLs, sizes and digests to a lock file
- resume from where the last run failed
- fail closed on non-interactive sudo
You can add all of that to a shell script. That's roughly what this is.
Because curl β¦ | bash moves the trust boundary from "a manifest I can review" to "whatever the
vendor ships today." Once shell execution is in the manifest contract, so are inherited
environment, quoting bugs, cleanup semantics, timeouts and silent sudo.
Direct binary and archive downloads cover the overwhelming majority of CLI tool distributions, and they are checkable.
The CLI ships as native images for Linux and macOS, on amd64 and arm64.
Profiles can target either OS using when: clauses:
when:
os:
family: linux
architecture: amd64Entries whose when clause doesn't match the host are skipped, so a single profile can carry
both platforms. Windows is not supported.
No. Releases are GraalVM native images. You only need a JDK 21+ if you build from source, and GraalVM 21 only if you build native images locally.
Under spec.policy.appsDir β commonly ${HOME}/.apps β with one directory per tool. Resolved
install directories must stay under appsDir. Nothing is installed system-wide unless you
explicitly declare a sudo: true symlink and set policy.allowSudoSymlinks: true.
No. Neither the CLI nor the install script touches your shell configuration by default. The
install script prints the export PATH=... line for you; set BINSTALLER_UPDATE_PATH=1 if you
want it appended to ~/.bashrc and ~/.zshrc.
Delete its directory under appsDir and remove the entry from the profile. There is no
uninstall command β install state is a directory, not a database.
Run binstaller versions to see what moved upstream, bump the version in spec.versions, update
or re-discover the checksum, then binstaller apply. The staged install replaces the previous one
atomically.
For a personal workstation, it's convenient. For anything reproducible, no β a dynamic source can
never be locked to a specific artifact, and policy.mode: strict rejects it by default. Pin the
version and let binstaller versions tell you when to bump.
Three options, in descending order of preference:
- Use
checksum.discoverif they publish aSHA256SUMSfile. - Download the artifact once, verify it however you can, and pin the digest yourself.
- Leave it missing and stay in
developermode β the plan will flag it on every run.
Yes, and it's designed for it: script-friendly plain output when stdout isn't a terminal,
predictable exit codes, and plan --locked as a drift check that installs nothing.
- run: binstaller plan --locked --lock-file binstaller.lock.json
- run: binstaller apply --locked --lock-file binstaller.lock.jsonNon-interactive runs fail closed on sudo rather than hanging on a prompt.
Yes β concurrent downloads render as a redrawn progress block with one row per tool. Installs are still ordered and each tool's result is committed to state as it completes.
Resolved version, initial URL, final URL, the full redirect chain, size in bytes, the SHA-256
digest and its provenance (configured vs discovered), plus the manifest fingerprint. See
π§ Lock Files & Reproducibility.
Re-applying a compatible profile skips tools already recorded as complete in state. With
--reset-state, everything is downloaded and installed again, replacing the previous install
directory atomically.
That's the intended use: commit config.yaml and binstaller.lock.json together, and have
everyone run binstaller apply --locked. Anyone whose environment would resolve to something
different gets a refusal instead of a silently different toolchain.
Yes β see π οΈ Development. Bug reports with a minimal profile that reproduces the problem are especially welcome.
- π Home
- π Getting Started
- ποΈ CLI Reference
- π³ Manifest Cookbook
- π§ Lock Files
- π Security Model
- π©Ί Troubleshooting
- β FAQ
- π οΈ Development