jdx/mise · error
{reason}
Error message
{reason} What it means
After the manager reports itself available, the driver runs `installed()` to collect per-request package statuses and calls `unavailable_package_reason`. If any package-level status indicates the manager cannot satisfy the request (e.g. a package is unsupported or the manager reports a package-specific unavailability), the run bails with that reason. It is a per-package failure raised after manager-level availability has passed.
Source
Thrown at src/cli/system/driver.rs:114
}
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;
}
if !d.dry_run {
mp.manager.prepare_mutation(&mp.requests).await?;
}
let statuses = mp.manager.installed(&mp.requests).await?;
if let Some(reason) = unavailable_package_reason(d, &statuses) {
bail!("{reason}");
}
let remove_targets = if action == Action::Install {
statuses
.iter()
.filter(|status| {
status.request.desired == PackageDesiredState::Absent
&& !matches!(status.state, PackageState::Missing)
&& !status.state.is_unavailable()
})
.collect::<Vec<_>>()
} else {
vec![]
};
let mut targets: Vec<_> = statuses
.iter()
.filter(|status| status.request.desired == PackageDesiredState::Present)
.filter(|s| match action {
Action::Install => !s.state.is_installed() && !s.state.is_unavailable(),View on GitHub (pinned to afd2eddd3a)
Solutions
- Fix or remove the offending package entry reported in the reason.
- Verify the package name exists for that manager (`mise system packages` or the manager's own CLI).
- Run with --dry-run first to see statuses before mutating.
- Update or reinstall the manager plugin so package resolution works.
Defensive patterns
Strategy: validation
Validate before calling
# Preview per-package statuses before mutating mise system packages --dry-run
Prevention
- Validate package names against the target manager before adding them to config.
- Keep tracked system_packages config platform-appropriate.
- Re-run --dry-run after manager/plugin upgrades.
When it happens
Trigger: Running `mise system packages install/remove` where one of the requested packages yields an unavailable status from `manager.installed()` — e.g. package not supported by the manager, missing package metadata, or a plugin reporting the package cannot be handled.
Common situations: Typo'd or platform-inappropriate package names (a macOS-only cask on Linux); a plugin that can list the manager but not resolve specific packages; stale tracked config referencing packages the current manager version no longer supports.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- {name} is not available: {}
- brew is not available: {}
- {} is not available: {reason}
- manager '{only}' is excluded by the system_packages.managers
- no packages requested for manager '{only}'
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/143ed0514ded5610.
Report an issue: GitHub.