jdx/mise · error

{} is not available: {reason}

Error message

{} is not available: {reason}

What it means

In prune's run_plugin, after confirming the manager is a plugin, mise calls `unavailable_reason_async()`; if the plugin reports any unavailability (missing hooks, broken plugin runtime, missing manager binary), the prune aborts with `<manager> is not available: <reason>`. Prune requires a fully functional plugin because it must enumerate and remove installed packages.

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 afd2eddd3a)

Solutions

  1. Fix the underlying issue in the reason (install the manager binary, repair plugin hooks).
  2. Reinstall/update the plugin.
  3. Run `mise system packages` with the same manager first to confirm availability before pruning.
Defensive patterns

Strategy: validation

Validate before calling

# Ensure the plugin and its underlying manager binary work first
mise system packages --manager myplugin --dry-run

Prevention

When it happens

Trigger: Running `mise system prune --manager <plugin>` where the plugin's manager binary is missing, its Lua hooks fail to load, or `unavailable_reason_async()` returns a reason for any environmental cause.

Common situations: Plugin installed but the underlying package manager (e.g. cargo binary) absent from PATH; vfox plugin missing required hook files; broken plugin after an upgrade.

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


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/b296aa4422f67036. Report an issue: GitHub.