{"record":{"id":"f401ded81461a963","repo":"jdx/mise","slug":"ba-is-not-installed","errorCode":null,"errorMessage":"{ba} is not installed","messagePattern":"(.+?) is not installed","errorType":"exception","errorClass":"eyre::Report","httpStatus":null,"severity":"error","filePath":"src/cli/ls.rs","lineNumber":155,"sourceCode":"            runtimes = missing_runtimes;\n        }\n        if let Some(prefix) = &self.prefix {\n            runtimes.retain(|(_, _, tv, _)| tv.version.starts_with(prefix));\n        }\n        if self.json {\n            self.display_json(&config, runtimes, sources_map.as_ref())\n                .await\n        } else {\n            self.display_user(&config, runtimes, sources_map.as_ref())\n                .await\n        }\n    }\n\n    fn verify_plugin(&self) -> Result<()> {\n        if let Some(plugins) = &self.installed_tool {\n            for ba in plugins {\n                if let Some(plugin) = ba.backend()?.plugin() {\n                    ensure!(plugin.is_installed(), \"{ba} is not installed\");\n                }\n            }\n        }\n        Ok(())\n    }\n\n    async fn display_json(\n        &self,\n        config: &Arc<Config>,\n        runtimes: Vec<RuntimeRow<'_>>,\n        sources_map: Option<&SourcesMap>,\n    ) -> Result<()> {\n        if let Some(plugins) = &self.installed_tool {\n            // only runtimes for 1 plugin\n            let runtimes: Vec<RuntimeRow<'_>> = runtimes\n                .into_iter()\n                .filter(|(_, p, _, _)| matches_requested_tool(plugins, p.ba()))\n                .collect();","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/jdx/mise/blob/9dcfcaa0dc8747a2577d3270b69bb9d8313b2807/src/cli/ls.rs#L137-L173","documentation":"`mise ls TOOL…` accepts positional tool filters; for each one, mise resolves the backend and, if it is a plugin-style backend (asdf/vfox plugin), verifies the plugin is actually installed before listing. If the plugin's install directory is absent, listing aborts with `<backend> is not installed` rather than showing an empty list — the tool has no locally meaningful state until its plugin exists.","triggerScenarios":"Running `mise ls <tool>` where <tool> maps to an asdf or vfox plugin that has never been installed on this machine (fresh clone, plugin removed by `mise prune`, or name typo resolving to a plugin backend). Core tools and aqua-style backends have no plugin and do not hit this check.","commonSituations":"New contributors running `mise ls <tool>` immediately after cloning, before `mise install`/`mise use` has pulled the plugin; after `mise prune` cleaned an unused plugin while a stale mise.toml still references the tool; scripts that probe installed versions per-tool before bootstrap.","solutions":["Let mise set the tool up: `mise use <tool>` (installs plugin and version automatically)","Or install just the plugin: `mise plugin install <plugin>` then re-run `mise ls <tool>`","For scripting, probe without the positional filter — plain `mise ls` never triggers verify_plugin — and filter output yourself","If the name was a typo, check `mise registry` for the correct short name"],"exampleFix":"# before\nmise ls some-tool   # ERROR: some-tool is not installed\n\n# after\nmise use some-tool@latest   # installs plugin + version\nmise ls some-tool","handlingStrategy":"validation","validationCode":"# Only filter mise ls by tool once its plugin exists\nmise plugin ls 2>/dev/null | grep -qx \"$tool\" || mise plugin install \"$tool\"\nmise ls \"$tool\"","typeGuard":null,"tryCatchPattern":"# Scripting: probe with plain `mise ls` (never runs verify_plugin) and filter yourself\nmise ls | awk -v t=\"$tool\" '$1 == t'","preventionTips":["Bootstrap repos with `mise install` (or `mise use`) before per-tool ls probes in scripts","In automation, prefer `mise ls --json` or unfiltered `mise ls` over positional tool filters","Check `mise registry <tool>` for the canonical short name before scripting against it"],"tags":["cli","plugin","ls","not-installed","mise"],"backgroundTag":"plugin-not-installed","analyzedSha":"9dcfcaa0dc8747a2577d3270b69bb9d8313b2807","analyzedAt":"2026-08-17T14:28:50.624Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}