jdx/mise · error · eyre::Report
command does not exist: {}
Error message
command does not exist: {} What it means
When the first element of engine_command (or the prefix of command) is an absolute path, resolve_command verifies it names an existing file before using it. If the path does not exist (typo, wrong prefix, dangling symlink, not installed), mise refuses with this error instead of exec'ing a nonexistent binary. Relative program names go through PATH lookup instead and produce the sibling "command not found" error.
Source
Thrown at src/system/compose.rs:1045
.into_iter()
.map(|path| {
if path.is_absolute() {
path
} else {
project_dir.join(path)
}
})
.collect()
}
fn resolve_command(command: &[String]) -> Result<Vec<String>> {
let (program, args) = command
.split_first()
.ok_or_else(|| eyre!("command cannot be empty"))?;
let resolved = if Path::new(program).is_absolute() {
let path = PathBuf::from(program);
if !path.is_file() {
bail!("command does not exist: {}", path.display());
}
path
} else {
crate::file::which(program).ok_or_else(|| eyre!("command not found: {program}"))?
};
Ok(std::iter::once(resolved.to_string_lossy().to_string())
.chain(args.iter().cloned())
.collect())
}
fn validate_project_name(name: Option<&str>) -> Result<()> {
let Some(name) = name else {
return Ok(());
};
if name.is_empty()
|| !name
.chars()
.next()View on GitHub (pinned to 9dcfcaa0dc)
Solutions
- Find the real location with `command -v podman` and correct the absolute path
- Or drop the path and use a bare name (engine_command = ["podman"]) so PATH resolution applies
- Reinstall the engine if it was removed
- Prefer bare names in shared config; reserve absolute paths for machine-local config
Example fix
# before engine_command = ["/usr/local/bin/podman"] # Homebrew Intel path, wrong on Linux # after engine_command = ["podman"]
Defensive patterns
Strategy: validation
Validate before calling
# before apply, confirm every absolute program in the config exists for p in /usr/local/bin/podman /opt/homebrew/bin/docker; do [ -f "$p" ] || echo "configured engine path missing: $p" >&2 done
Prevention
- Prefer bare engine names ("podman") over absolute paths in config shared across machines
- Keep absolute-path engine_command only in machine-local config files
- After uninstalling or relocating an engine, grep mise.toml for its old path
When it happens
Trigger: engine_command = ["/usr/bin/podman"] when podman actually lives at /usr/local/bin/podman; the absolute path points to a directory, a symlink whose target is gone, or a binary that was uninstalled/renamed after config was written.
Common situations: Copying mise.toml between machines with different install prefixes (Homebrew /usr/local vs /opt/homebrew vs /usr); uninstalling the engine but leaving the config; path typos after manual editing.
Related errors
- container engine command 'docker' was not found; set engine_
- --engine podman requested but `podman` was not found on PATH
- --engine docker requested but `docker` was not found on PATH
- no supported container engine found. Install podman or docke
- managed file parent is not a directory: {}
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/a5491f64ba6b08bb.
Report an issue: GitHub.