jdx/mise · error
{short}@{requested} is not installed{resolved} hint: run `mi
Error message
{short}@{requested} is not installed{resolved}
hint: run `mise install {short}@{requested}`, or `mise ls {short}` to see installed versions What it means
A directly formatted variant of the uninstalled-tool error: `{tool}@{requested} is not installed`, with a hint to run `mise install`. which.rs found the toolset requests this exact tool/version but no matching installation exists. Thrown before mise falls back to the 'not a mise bin' message, so the user gets an actionable install hint.
Source
Thrown at src/cli/which.rs:80
Some((p, tv)) => {
if self.version {
miseprintln!("{}", tv.version);
} else if self.plugin {
miseprintln!("{p}");
} else {
let path = p.which(&config, &tv, &bin_name).await?;
miseprintln!("{}", path.unwrap().display());
}
Ok(())
}
None => {
if let Some(msg) = self.uninstalled_tool_message(&config, &ts) {
bail!(msg);
}
if let Some(msg) =
crate::shims::unavailable_configured_tool_message(&config, &ts, &bin_name)
{
bail!(msg);
}
if self.has_shim(&bin_name) {
bail!(
"{bin_name} is a mise bin however it is not currently active. Use `mise use` to activate it in this directory."
)
} else {
bail!("{bin_name} is not a mise bin. Perhaps you need to install it first.",)
}
}
}
}
async fn complete(&self, config: &Arc<Config>) -> Result<()> {
let ts = self.get_toolset(config).await?;
let bins = ts
.list_paths(config)
.await
.into_iter()
.flat_map(|p| file::ls(&p).unwrap_or_default())View on GitHub (pinned to afd2eddd3a)
Solutions
- Run `mise install <tool>@<requested>` exactly as shown in the hint.
- Or run plain `mise install` to install everything in the current config.
- Run `mise ls <tool>` to see which versions are already installed and pick one.
- Update the config pin to an installed version if the old one is not needed: `mise use <tool>@<installed-version>`.
Example fix
// before mise which python # 3.12.3 is not installed // after mise install python@3.12.3 mise which python
Defensive patterns
Strategy: try-catch
Validate before calling
mise ls <tool> 2>/dev/null | grep -q "$(mise current <tool> 2>/dev/null)" || mise install <tool>
Try / catch
mise which "$bin" || { mise install && mise which "$bin"; } Prevention
- Always run `mise install` after pulling config changes (mise warns on changed config).
- Pin tool versions that your team actually installs; avoid hand-editing .tool-versions to uninstalled versions.
When it happens
Trigger: `mise which <bin>` where the resolved toolset contains `{short}@{requested}` (e.g. node@22.1.0) but that version has never been installed; also hit via shims when a project pins an uninstalled version.
Common situations: Cloning a repo whose mise.toml pins a specific version you don't have; a teammate upgraded the pinned version and you pulled without reinstalling; manually editing .tool-versions to a version never installed.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- bail!(msg) — dynamic message: uninstalled tool message from
- no version specified for tool {tool} use `mise shell {tool}@
- No executable found for configured tool: {bin_name} The inst
- {bin_name} is not a mise bin. Perhaps you need to install it
- {name} is not an active, installed tool or one of their exec
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/cdbb2c2713fcb641.
Report an issue: GitHub.