jdx/mise · error
is not available
Error message
{} is not available: {reason} What it means
After confirming the manager is a prune-capable plugin, `run_plugin` calls `unavailable_reason_async()` to check whether the underlying package manager tool is usable. If the plugin reports an availability problem (binary missing, unsupported platform, broken installation), mise aborts pruning with `'<manager>' is not available: <reason>`.
Solutions
- Install the underlying package manager (or restore it to PATH) so the plugin reports available.
- Run `mise bootstrap packages` / doctor-style checks to see the plugin's availability reason and fix that specific cause.
- Prune from an environment where the manager works (same PATH/shell used for installs).
Example fix
// before $ mise bootstrap packages prune --manager myplugin error: myplugin is not available: fooctl not found on PATH // after $ export PATH="$PATH:/opt/fooctl/bin" $ mise bootstrap packages prune --manager myplugin
Defensive patterns
Strategy: fallback
Validate before calling
# Ensure the manager's tool is reachable before pruning
command -v "$MANAGER_TOOL" >/dev/null 2>&1 || { echo "$MANAGER_TOOL missing"; exit 1; } Try / catch
try {
await run("mise", ["bootstrap","packages","prune","--manager", m]);
} catch (e) {
if (/is not available:/.test(e.message)) {
// read the reason after the colon and install/repair the tool
} else throw e;
} Prevention
- Install the plugin's backing CLI in every environment where prune runs.
- Run prune with the same PATH/shell profile used for installs.
- Add availability checks to CI before prune steps.
When it happens
Trigger: Running `mise bootstrap packages prune --manager <plugin-manager>` when the manager's required executable cannot be found or initialized — e.g. the tool the plugin wraps is not installed or not on PATH.
Common situations: Plugin configured in `[bootstrap.packages]` but its backing CLI was uninstalled; running prune in a CI/container environment lacking the manager binary; PATH differences between the shell where install worked and where prune runs.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- package manager ' ' does not support pruning
- package plugin ' ' does not support uninstall; add…
- brew-cask is not available
- brew is not available
- brew is not available
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/b296aa4422f67036.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/system/prune.rs:82
"brew" => self.run_brew().await,
"brew-cask" => self.run_brew_cask().await,
_ => self.run_plugin().await,
}
}
async fn run_plugin(self) -> Result<()> {
let discovered = system::packages::all_managers()
.into_iter()
.find(|manager| manager.name() == self.manager)
.ok_or_else(|| eyre::eyre!("unknown bootstrap package manager '{}'", self.manager))?;
if !discovered.is_plugin() {
bail!(
"package manager '{}' does not support pruning",
self.manager
);
}
if let Some(reason) = discovered.unavailable_reason_async().await {
bail!("{} is not available: {reason}", self.manager);
}
let manager = PackagePluginManager::new(self.manager.clone())?;
let config = Config::get().await?;
let configured = system::package_requests_for_manager_from_config_and_tracked_config_files(
&config,
&self.manager,
)
.await?;
let plan = manager.prune_plan(&configured).await?;
if plan.is_empty() {
if !self.dry_run {
manager.apply_prune_plan(&plan).await?;
}
info!("{}: nothing to prune", self.manager);
return Ok(());
}
if !manager.supports_uninstall() {
bail!(View on GitHub (pinned to 533346cc37)