jdx/mise · error

No executable found for configured tool: {bin_name} The inst

Error message

No executable found for configured tool: {bin_name}
The installed version does not provide this executable with its current backend metadata.
Reinstall it with:
mise install --force {ba}@{version}

What it means

mise found the tool installed (the version directory exists) but the executable named by <bin> could not be found using the tool's current backend metadata — i.e. the install's bin listing is stale, corrupted, or the backend's exe layout changed. mise suggests reinstalling with `mise install --force` so the metadata and binaries are regenerated.

Source

Thrown at src/cli/which.rs:83

                } 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())
            .map(|p| p.file_name().unwrap().to_string_lossy().to_string())
            .unique()
            .sorted()

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Run `mise install --force <tool>@<version>` to reinstall and regenerate bin metadata.
  2. Verify the binary exists in the install dir (mise ls; look in ~/.local/share/mise/installs/<tool>/<version>/bin).
  3. Check whether the tool version actually ships the executable; adjust the config pin if it was renamed/removed.
  4. Update mise if the install was created by a much older version with incompatible metadata.

Example fix

// before
mise which tsc
# No executable found for configured tool: tsc
// after
mise install --force typescript@5.4.5
mise which tsc
Defensive patterns

Strategy: fallback

Validate before calling

ls "$(mise where <tool>)/bin" | grep -qx '<bin>' || mise install --force <tool>

Try / catch

mise which "$bin" || mise install --force "$(mise current <tool>)"

Prevention

When it happens

Trigger: `mise which <bin>` for a configured, installed tool whose backend metadata no longer lists <bin>: after a mise upgrade changed backend layout (e.g. npm/cargo tool layout changes), an interrupted install left partial bin metadata, or the tool version itself no longer ships that executable.

Common situations: Upgrading mise across a metadata format change; interrupting an install with Ctrl-C mid-write; the package removed the binary in a newer version while config pins the newer version.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


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