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
- Run `mise install --force <tool>@<version>` to reinstall and regenerate bin metadata.
- Verify the binary exists in the install dir (mise ls; look in ~/.local/share/mise/installs/<tool>/<version>/bin).
- Check whether the tool version actually ships the executable; adjust the config pin if it was renamed/removed.
- 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
- Avoid interrupting `mise install` with Ctrl-C mid-write.
- After upgrading mise, force-reinstall tools whose layout/metadata may have changed.
- Verify a pinned tool version actually ships the executables your tasks call.
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
- No executable found for configured tool: {bin_name} The inst
- no version specified for tool {tool} use `mise shell {tool}@
- bail!(msg) — dynamic message: uninstalled tool message from
- {short}@{requested} is not installed{resolved} hint: run `mi
- {bin_name} is not a mise bin. Perhaps you need to install it
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/0df514dca1b26c28.
Report an issue: GitHub.