{"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":325,"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":307,"sourceCodeEnd":343,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/args/backend_arg.rs#L307-L343","documentation":"In BackendArg::backend (src/cli/args/backend_arg.rs:325), when a backend cannot be constructed but an installed plugin with that name exists, mise reports that the plugin is present but the tool is unusable — for asdf plugins specifically, the plugin directory exists but the tool either is not provided by it or the plugin installation is broken.","triggerScenarios":"Running any command (install, exec, ls-remote) referencing tool_name where install_state::get_plugin_type finds an Asdf plugin for plugin_name, but Backend::get fails to build a working backend for that tool.","commonSituations":"asdf plugin partially installed (missing repo files or failed post-install); tool name typo so the plugin exists but doesn't list that tool; plugin was cloned but its bin/list-all script is missing or not executable; stale plugin after an asdf→mise migration.","solutions":["Reinstall the plugin: mise plugin remove <plugin> && mise plugin add <plugin> (or the asdf equivalent) to repair broken files.","Check the plugin actually provides the tool: run the plugin's list-all script or `mise ls-remote <plugin>`.","Verify the tool name spelling matches what the plugin supports.","If the plugin is stale, update it (mise plugin update <plugin>) or switch to a native/vfox backend if available."],"exampleFix":"// before: broken asdf plugin\nmise install ruby@3.2  # error\n// after\nmise plugin remove ruby\nmise plugin add ruby\nmise install ruby@3.2","handlingStrategy":"try-catch","validationCode":"# shell: check plugin health before using the tool\nmise plugin list --urls | grep -q \"^${plugin}\" && mise ls-remote \"${plugin}\" >/dev/null 2>&1 \\\n  || echo \"plugin ${plugin} missing or broken — reinstall\"","typeGuard":null,"tryCatchPattern":"# shell wrapper around mise commands\nif ! mise exec \"${tool}@${version}\" -- true 2>/dev/null; then\n  case \"$(mise exec \"${tool}@${version}\" -- true 2>&1)\" in\n    *\"is not available or the plugin is not properly installed\"*)\n      mise plugin remove \"${plugin}\" && mise plugin add \"${plugin}\" ;;\n  esac\nfi","preventionTips":["Install plugins via mise (mise plugin add) rather than mixing raw asdf state.","Run mise plugin update periodically to keep plugins healthy.","Verify tool names against the plugin's supported list before pinning versions.","Migrate fully from asdf to avoid stale ~/.asdf plugin state confusing mise."],"tags":["asdf","plugin","installation","cli"],"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-14T05:17:10.506Z"}