{"record":{"id":"6572a2c0e6ece158","repo":"jdx/mise","slug":"provider-provider-id-not-found-available-pro","errorCode":null,"errorMessage":"Provider '{provider_id}' not found.\n\nAvailable providers:\n{available}","messagePattern":"Provider '(.+?)' not found\\.\n\nAvailable providers:\n(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/deps/install.rs","lineNumber":182,"sourceCode":"            info!(\"All dependencies are up to date\");\n        }\n\n        Ok(())\n    }\n\n    fn explain_provider(\n        engine: &DepsEngine,\n        provider_id: &str,\n        effective_env: &std::collections::BTreeMap<String, String>,\n    ) -> Result<()> {\n        let Some(provider) = engine.find_provider(provider_id) else {\n            let available = engine\n                .list_providers()\n                .iter()\n                .map(|p| format!(\"  {}\", p.id()))\n                .collect::<Vec<_>>()\n                .join(\"\\n\");\n            bail!(\"Provider '{provider_id}' not found.\\n\\nAvailable providers:\\n{available}\");\n        };\n\n        let applicability = provider.applicability();\n\n        // Header\n        miseprintln!(\"Provider: {}\", provider.id());\n        miseprintln!(\"Auto: {}\", if provider.is_auto() { \"yes\" } else { \"no\" });\n\n        // Sources\n        let sources = provider.sources();\n        miseprintln!(\"Sources:\");\n        for source in &sources {\n            let exists = source.exists();\n            let marker = if exists { \"+\" } else { \"-\" };\n            miseprintln!(\"  {} {}\", marker, source.display());\n        }\n\n        // Outputs","sourceCodeStart":164,"sourceCodeEnd":200,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/deps/install.rs#L164-L200","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","solutions":["Use one of the ids printed under 'Available providers:' in the error message","Run `mise deps install --list` to see the current provider list","Update mise if the provider was added in a newer version"],"exampleFix":"// before\nmise deps install nmpm --explain\n// after\nmise deps install npm --explain","handlingStrategy":"validation","validationCode":"PROVIDERS=$(mise deps install --list)\necho \"$PROVIDERS\" | grep -qx \"  $PROVIDER\" || { echo \"unknown provider $PROVIDER\"; exit 1; }","typeGuard":null,"tryCatchPattern":"if let Err(e) = result {\n    if e.to_string().starts_with(\"Provider '\") && e.to_string().contains(\"not found\") {\n        // parse 'Available providers:' list and pick a valid id\n    }\n}","preventionTips":["Discover provider ids via `mise deps install --list` instead of guessing","Keep mise updated so newly added providers are available","Match provider ids exactly (case-sensitive)"],"tags":["cli","deps","provider"],"backgroundTag":"resource-not-found","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}