jdx/mise · error · eyre::Report
{bin_name} is not a mise bin. Perhaps you need to install it
Error message
{bin_name} is not a mise bin. Perhaps you need to install it first. What it means
`mise which <bin>` resolved nothing and found no shim for the bin either (src/cli/which.rs:70): mise has never managed this name — it is neither active in the toolset nor present in the shims directory. `mise which` can only report paths for mise-managed binaries.
Source
Thrown at src/cli/which.rs:70
miseprintln!("{p}");
} else {
let path = p.which(&config, &tv, &bin_name).await?;
miseprintln!("{}", path.unwrap().display());
}
Ok(())
}
None => {
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()
.collect_vec();
for bin in bins {
println!("{bin}");
}View on GitHub (pinned to 9dcfcaa0dc)
Solutions
- If you want mise to manage it: find the tool name (`mise registry | grep -i <name>` or `mise a <partial>`) then `mise use <tool>`
- If it's a system binary, query the shell instead: `command -v <bin>`
- If you expected it via a tool, check which bins an installed tool provides: `mise which --tool=<tool>@<version> <bin>` or ls the install's bin dir
Example fix
# before $ mise which jq # error: jq is not a mise bin. Perhaps you need to install it first. # after $ mise use jq # installs and activates $ mise which jq
Defensive patterns
Strategy: fallback
Validate before calling
bin="jq"
mise which "$bin" >/dev/null 2>&1 || command -v "$bin" >/dev/null 2>&1 || { mise registry | grep -i "^$bin " && mise use "$bin"; } Try / catch
path="$(mise which "$bin" 2>/dev/null)" || path="$(command -v "$bin" 2>/dev/null)" || { echo "$bin neither mise-managed nor on PATH" >&2; exit 1; } Prevention
- Use `command -v` for system binaries; reserve `mise which` for mise-managed tools
- `mise use` a tool before probing its bins with mise which
When it happens
Trigger: `mise which git` when git is a system binary and not mise-managed; `mise which <typo>`; a tool that exists on PATH but was never installed through mise.
Common situations: Assuming mise tracks every executable on PATH; probing for optional tools; typo'd bin names; checking before a tool was ever `mise use`d/installed.
Related errors
- {bin_name} is a mise bin however it is not currently active.
- {msg}
- No config file found in current directory
- Either --url or --platform-url must be specified
- Cannot change version of existing tool stub from {} to {}
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/b3730c97a7026f6d.
Report an issue: GitHub.