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

  1. Run `mise install <tool>@<requested>` exactly as shown in the hint.
  2. Or run plain `mise install` to install everything in the current config.
  3. Run `mise ls <tool>` to see which versions are already installed and pick one.
  4. 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

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


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/cdbb2c2713fcb641. Report an issue: GitHub.