jdx/mise · error
{name} is not available: {}
Error message
{name} is not available: {} What it means
Before acting on a manager's packages, mise checks whether the manager binary is actually usable (unavailable_reason_async: not installed, not on PATH, wrong OS). Unavailable managers are skipped with a debug log during bulk runs, but when the request is explicit (--manager flag or manager:package specs, per unavailable_manager_is_error), failing silently would be a lie, so mise errors with the concrete reason (e.g. command not found).
Source
Thrown at src/cli/system/driver.rs:104
for mp in mgrs {
if let Some(only) = &d.manager
&& mp.manager.name() != only
{
continue;
}
let name = mp.manager.name();
if mp.disabled {
if d.manager.is_some() {
bail!("manager '{name}' is excluded by the system_packages.managers setting");
}
debug!("{name}: skipping, excluded by system_packages.managers");
continue;
}
if let Some(reason) = mp.manager.unavailable_reason_async().await {
if unavailable_manager_is_error(d) {
// explicitly requested (via --manager or manager:package
// specs) — failing silently would be a lie
bail!("{name} is not available: {}", reason);
}
debug!("{name}: skipping, {reason}");
continue;
}
let statuses = mp.manager.installed(&mp.requests).await?;
if let Some(reason) = unavailable_package_reason(d, &statuses) {
bail!("{reason}");
}
let mut targets: Vec<_> = statuses
.iter()
.filter(|s| match action {
Action::Install => {
!matches!(s.state, PackageState::Installed { .. }) && !s.state.is_unavailable()
}
// upgrade acts on whatever is present (the manager no-ops
// already-current packages); missing packages are skipped
// below with a pointer at `install`
Action::Upgrade => {View on GitHub (pinned to 9dcfcaa0dc)
Solutions
- Install the manager (e.g. install Homebrew, or ensure cargo is on PATH), then retry
- If on the wrong OS, pick a manager available there (apt/dnf on Linux, brew on macOS) and configure [bootstrap.packages] accordingly
- Make bootstrap config OS-conditional (mise supports per-OS config merging) so unavailable managers are never explicitly requested
Example fix
# before mise system install --manager brew # fails on Linux CI: brew not available # after # only request managers that exist on the host: mise system install --manager apt # (Linux) or gate brew usage to macOS configs
Defensive patterns
Strategy: validation
Validate before calling
# bash: prove the manager binary is invocable before asking mise for it
command -v "$MGR" >/dev/null 2>&1 || { echo "$MGR not installed/on PATH" >&2; exit 2; }
mise system install --manager "$MGR" Prevention
- Pre-install required package managers in Dockerfiles/CI images before bootstrap steps
- Make bootstrap configs OS-aware so unavailable managers are never requested explicitly
When it happens
Trigger: Running `mise system install --manager brew` on a machine without Homebrew installed/on PATH; requesting a manager whose binary exists but is broken; CI images lacking the requested package manager.
Common situations: Linux CI reusing a macOS-oriented bootstrap config; fresh container without apt/brew/cargo present; manager installed in a non-standard PATH location not visible to mise.
Related errors
- brew is not available: {}
- apk info failed: {}
- Unknown config file type: {}
- failed to parse registry option {k} as a TOML value: {e}
- mise is installed via a package manager, cannot update
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/b44dd427824ad758.
Report an issue: GitHub.