jdx/mise · error

Provider '{provider_id}' not found. Available providers: {a

Error message

Provider '{provider_id}' not found.

Available providers:
{available}

What it means

In `mise deps install`, `explain_provider` looks up the requested provider id in the DepsEngine's provider list. When no registered provider matches the id, it collects all available provider ids and bails with 'Provider <id> not found' plus the list, so the user can pick a valid one.

Source

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

            info!("All dependencies are up to date");
        }

        Ok(())
    }

    fn explain_provider(
        engine: &DepsEngine,
        provider_id: &str,
        effective_env: &std::collections::BTreeMap<String, String>,
    ) -> Result<()> {
        let Some(provider) = engine.find_provider(provider_id) else {
            let available = engine
                .list_providers()
                .iter()
                .map(|p| format!("  {}", p.id()))
                .collect::<Vec<_>>()
                .join("\n");
            bail!("Provider '{provider_id}' not found.\n\nAvailable providers:\n{available}");
        };

        let applicability = provider.applicability();

        // Header
        miseprintln!("Provider: {}", provider.id());
        miseprintln!("Auto: {}", if provider.is_auto() { "yes" } else { "no" });

        // Sources
        let sources = provider.sources();
        miseprintln!("Sources:");
        for source in &sources {
            let exists = source.exists();
            let marker = if exists { "+" } else { "-" };
            miseprintln!("  {} {}", marker, source.display());
        }

        // Outputs

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Use one of the ids printed under 'Available providers:' in the error message
  2. Run `mise deps install --list` to see the current provider list
  3. Update mise if the provider was added in a newer version

Example fix

// before
mise deps install nmpm --explain
// after
mise deps install npm --explain
Defensive patterns

Strategy: validation

Validate before calling

PROVIDERS=$(mise deps install --list)
echo "$PROVIDERS" | grep -qx "  $PROVIDER" || { echo "unknown provider $PROVIDER"; exit 1; }

Try / catch

if let Err(e) = result {
    if e.to_string().starts_with("Provider '") && e.to_string().contains("not found") {
        // parse 'Available providers:' list and pick a valid id
    }
}

Prevention

When it happens

Trigger: Running `mise deps install <provider> --explain` or an install that routes through explain_provider with a provider id that is not registered in the engine (typo, removed/renamed provider, plugin not contributing it).

Common situations: Typos like `nmpm` instead of `npm`, using a provider id from documentation of a different mise version, or a provider only available behind a feature/setting not enabled locally.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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