jdx/mise · error

provider '{}' is inactive: {reason}

Error message

provider '{}' is inactive: {reason}

What it means

`explain_provider` evaluates a provider's applicability for the current environment before printing its explanation. If the provider reports `DepsProviderApplicability::Inactive(reason)` (it does not apply to this OS/environment/setup), mise prints the status and bails with 'provider <id> is inactive: <reason>' instead of explaining or installing.

Source

Thrown at src/cli/deps/install.rs:229

        if !optional_outputs.is_empty() {
            miseprintln!("Optional outputs:");
            for output in &optional_outputs {
                let exists = output.exists();
                let marker = if exists { "+" } else { "-" };
                miseprintln!("  {} {}", marker, output.display());
            }
        }

        // Command
        if let Ok(cmd) = provider.install_command_with_env(effective_env) {
            miseprintln!("Command: {}", cmd.description);
        }

        // Verdict
        miseprintln!("");
        if let DepsProviderApplicability::Inactive(reason) = applicability {
            miseprintln!("Status: inactive ({reason})");
            bail!("provider '{}' is inactive: {reason}", provider.id());
        }

        let freshness = engine.check_provider_freshness(provider, effective_env)?;
        if freshness.is_fresh() {
            miseprintln!("Status: fresh ({})", freshness.reason());
        } else {
            miseprintln!("Status: stale ({})", freshness.reason());
        }

        if !freshness.is_fresh() {
            bail!("provider '{}' is stale", provider.id());
        }

        Ok(())
    }

    fn list_providers(&self, engine: &DepsEngine) -> Result<()> {
        let providers = engine.list_providers();

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Read the `reason` in the error/status output and satisfy it (install the runtime, add the missing project file, switch platform)
  2. Choose a different, applicable provider from `mise deps install --list`
  3. Skip explaining this provider if your environment cannot support it

Example fix

// before
mise deps install cargo-build --explain   # inactive: cargo not installed
// after
mise install rust && mise deps install cargo-build --explain
Defensive patterns

Strategy: try-catch

Validate before calling

mise deps install "$PROVIDER" --explain 2>&1 | grep -q 'Status: inactive' && echo "provider not applicable here"

Try / catch

match std::process::Command::new("mise").args(["deps","install",p,"--explain"]).output() {
    Ok(o) if !o.status.success() && String::from_utf8_lossy(&o.stderr).contains("is inactive") => {
        // choose another provider or fix the environment per the printed reason
    }
    _ => {}
}

Prevention

When it happens

Trigger: Running `mise deps install <provider> --explain` where the provider's `applicability()` returns Inactive, e.g. a provider tied to a language runtime, OS, or project setup that is absent.

Common situations: Using a provider on an unsupported platform, missing the runtime the provider manages (e.g. no node project detected), or project configuration that disables the provider.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


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