{"record":{"id":"93aa63ae3288d30f","repo":"jdx/mise","slug":"asdf-plugin-plugin-name-exists-but-tool-name","errorCode":null,"errorMessage":"asdf plugin '{plugin_name}' exists but '{tool_name}' is not available or the plugin is not properly installed","messagePattern":"asdf plugin '(.+?)' exists but '(.+?)' is not available or the plugin is not properly installed","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/args/backend_arg.rs","lineNumber":327,"sourceCode":"        // TODO: see above about hash key\n        // let backend = self.backend.get_or_try_init(|| {\n        //     if let Some(backend) = backend::get(self) {\n        //         Ok(backend)\n        //     } else {\n        //         bail!(\"{self} not found in mise tool registry\");\n        //     }\n        // })?;\n        // Ok(backend.clone())\n        if let Some(backend) = backend::get(self) {\n            Ok(backend)\n        } else if let Some((plugin_name, tool_name)) = self.short.split_once(':') {\n            // Check if the plugin exists first\n            if let Some(plugin_type) = install_state::get_plugin_type(plugin_name) {\n                // Plugin exists, but the backend couldn't be created\n                // This could be due to the tool not being available or plugin not properly installed\n                match plugin_type {\n                    PluginType::Asdf => {\n                        bail!(\n                            \"asdf plugin '{plugin_name}' exists but '{tool_name}' is not available or the plugin is not properly installed\"\n                        );\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 {","sourceCodeStart":309,"sourceCodeEnd":345,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/args/backend_arg.rs#L309-L345","documentation":"mise found a registered asdf plugin of the given name but could not construct a working backend for the requested tool — typically because the plugin does not actually provide that tool or its installation is broken. The error distinguishes plugin existence from tool availability so users know the plugin name is right but something inside the plugin is wrong.","triggerScenarios":"Resolving a backend via BackendArg::backend() when install_state::get_plugin_type returns PluginType::Asdf for plugin_name, but backend creation fails (missing tool listing, broken plugin scripts, corrupted plugin directory).","commonSituations":"Typos in the tool name portion of an asdf shorthand; an asdf plugin half-installed or removed mid-operation; plugin repo cloned but its list-all script fails; stale plugin state after mise migration.","solutions":["Reinstall/repair the plugin: mise plugin remove <plugin> && mise plugin add <plugin> <url>","Verify the plugin actually provides the tool: mise ls-remote <plugin> or run the plugin's list-all script","Confirm the plugin directory is intact and its bin/list-all is executable","Check the tool name spelling — plugin and tool names must match what the plugin exposes"],"exampleFix":"# before (broken plugin state)\nmise use --plugin asdf:myplugin mytool@latest\n# after\nmise plugin remove myplugin\nmise plugin add myplugin https://github.com/user/asdf-myplugin.git\nmise use myplugin@latest","handlingStrategy":"validation","validationCode":"# verify plugin health before backend resolution\npt = get_plugin_type(plugin)\nif pt == 'asdf':\n    versions = run(['mise', 'ls-remote', plugin])\n    assert versions.stdout.strip(), f'{plugin} exposes no tool versions'","typeGuard":null,"tryCatchPattern":"match backend {\n    Err(e) if e.to_string().contains(\"asdf plugin\") =>\n        reinstall_plugin(plugin),\n    r => r,\n}","preventionTips":["Run mise doctor regularly","Reinstall plugins after environment changes","Verify plugin list-all output before use"],"tags":["asdf","plugin","backend"],"backgroundTag":"resource-not-found","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}