jdx/mise · error

provider '{}' is stale

Error message

provider '{}' is stale

What it means

After checking applicability, `explain_provider` asks the DepsEngine whether the provider's data/index is fresh via `check_provider_freshness`. When freshness reports stale (with a reason printed as 'Status: stale (...)'), the command bails with 'provider <id> is stale' rather than proceeding with an explanation/install based on outdated data.

Source

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

            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();

        if providers.is_empty() {
            miseprintln!("No deps providers found for this project");
            return Ok(());
        }

        miseprintln!("Available deps providers:");
        for provider in providers {
            let sources = provider
                .sources()
                .iter()

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Refresh the provider data (e.g. re-run the deps update/refresh flow for the provider) and retry
  2. Check network connectivity/proxy settings if refresh fails
  3. Run with the appropriate env set if freshness depends on the effective environment (MISE_* env vars)

Example fix

// before
mise deps install npm --explain   # provider 'npm' is stale
// after
mise deps update npm && mise deps install npm --explain
Defensive patterns

Strategy: retry

Validate before calling

status=$(mise deps install "$PROVIDER" --explain 2>&1 | grep 'Status:')
case "$status" in *stale*) mise deps update "$PROVIDER";; esac

Try / catch

if output.contains(&format!("provider '{}' is stale", provider)) {
    // run the provider refresh/update step, then retry the explain/install
}

Prevention

When it happens

Trigger: Running `mise deps install <provider> --explain` (or a flow through explain_provider) when the provider's cached metadata/index has not been refreshed within the freshness window.

Common situations: Working offline or behind a proxy that blocks the refresh, long-lived CI caches, or a provider index last updated before a new upstream release.

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/3afdf20f1272223e. Report an issue: GitHub.