{"record":{"id":"827aedd26f497ea6","repo":"jdx/mise","slug":"plugin-name-is-not-a-valid-plugin-name","errorCode":null,"errorMessage":"{plugin_name} is not a valid plugin name","messagePattern":"(.+?) is not a valid plugin name","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/args/backend_arg.rs","lineNumber":339,"sourceCode":"                        );\n                    }\n                    PluginType::Vfox => {\n                        bail!(\n                            \"vfox plugin '{plugin_name}' exists but '{tool_name}' is not available or the plugin is not properly installed\"\n                        );\n                    }\n                    PluginType::VfoxBackend => {\n                        bail!(\n                            \"vfox-backend plugin '{plugin_name}' exists but '{tool_name}' is not available or the plugin is not properly installed\"\n                        );\n                    }\n                    PluginType::Package => {\n                        bail!(\"package plugin '{plugin_name}' is not a tool backend\");\n                    }\n                }\n            } else {\n                // Plugin doesn't exist\n                bail!(\"{plugin_name} is not a valid plugin name\");\n            }\n        } else {\n            // Check if the tool is in the registry but has no available backends\n            if let Some(rt) = REGISTRY.get(self.short.as_str())\n                && rt.backends().is_empty()\n                && !rt.backends.is_empty()\n            {\n                let all_backends: Vec<&str> = rt.backends.iter().map(|rb| rb.full).collect();\n                bail!(\n                    \"{self} is in the mise tool registry but none of its backends ({}) are supported in the current configuration\",\n                    all_backends.join(\", \")\n                );\n            }\n\n            let registry_shorts: Vec<&str> = REGISTRY.keys().collect();\n            let mut suggestions: Vec<String> =\n                xx::suggest::similar_n_with_threshold(&self.short, &registry_shorts, 3, 0.8)\n                    .into_iter()","sourceCodeStart":321,"sourceCodeEnd":357,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/cli/args/backend_arg.rs#L321-L357","documentation":"Bailed from BackendArg::backend() (src/cli/args/backend_arg.rs:339) when the short name contains ':' (parsed as backend:tool or plugin:tool) but the prefix parses as no known BackendType and install_state::get_plugin_type() has no record of it. In other words: 'xxx:yyy' where xxx is neither a backend alias nor an installed plugin.","triggerScenarios":"Typos in the prefix such as 'mise use aqau:owner/repo'; referencing 'plugin:tool' without ever running 'mise plugin add'; a removed plugin still named in a script or mise.toml; using ':' where '@' was meant ('mise use node:20' pins no version - it claims a backend named 'node').","commonSituations":"New users mixing up @ (version) and : (backend) separators; CI caches where plugins were never installed; shared mise.toml entries that depend on locally-installed plugins.","solutions":["Fix the separator grammar: versions use '@' ('mise use node@20'); colons are reserved for backends/plugins","Correct the prefix: valid backend prefixes include aqua:, github:, gitlab:, npm:, pipx:, gem:, cargo:, go:, dotnet:, conda:, asdf:, vfox:","If a plugin was meant, install it first: 'mise plugin add <name-or-url>', then reference 'name:tool'","Use the bare registry short name when it exists: 'mise registry | grep <name>'"],"exampleFix":"# before\nmise use node:20   # ':' is a backend separator, not a version pin\n# Error: node is not a valid plugin name\n\n# after\nmise use node@20","handlingStrategy":"validation","validationCode":"# bash: accept only known backend prefixes or installed plugins for 'xxx:yyy' specs\nprefix=\"${SPEC%%:*}\"\ncase \"$prefix\" in\n  aqua|github|gitlab|npm|pipx|gem|cargo|go|dotnet|conda|asdf|vfox) exit 0 ;;\nesac\nmise plugin ls 2>/dev/null | grep -qx \"$prefix\" || { echo \"unknown backend/plugin prefix: $prefix\" >&2; exit 1; }","typeGuard":null,"tryCatchPattern":"# bash: surface the error and stop instead of half-running\nif ! mise use \"$SPEC\" 2>err.log; then\n  cat err.log >&2   # message names the invalid prefix explicitly\n  exit 1\nfi","preventionTips":["Remember the grammar: 'name@version' pins a version; 'backend:name' selects a backend","Run 'mise plugin add' before referencing plugin:tool in committed configs","Lint tool specs in CI so a bad prefix fails before any install runs"],"tags":["mise","backend-prefix","plugin","cli-args"],"backgroundTag":"unknown-backend-prefix","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T13:17:26.733Z"}