jdx/mise · error
{tv.style} install path does not exist: {install_path.displa
Error message
{tv.style} install path does not exist: {install_path.display}. Run `mise install` first. What it means
Before baking tools into an OCI image layer, mise verifies that each tool version's local install directory (`tv.install_path()`) actually exists. Tools are copied from the host filesystem into image layers, so if the tool was never installed on this machine the build cannot proceed; the message tells you to run `mise install` first.
Source
Thrown at src/oci/builder.rs:334
// host-native binaries. Warning on reused-only pushes (the CI re-push
// the reuse feature speeds up) would be a false alarm.
let built_tool_count = tool_reuse.iter().filter(|r| r.is_none()).count();
if built_tool_count > 0 && std::env::consts::OS != "linux" {
warn!(
"building on {host} host — {n} tool layer(s) contain {host} binaries that \
will fail with `Exec format error` inside a linux container. Run \
`mise oci build` on a linux host (or in a linux container) for a working image.",
host = std::env::consts::OS,
n = built_tool_count
);
}
for (i, (_, tv)) in versions.iter().enumerate() {
if tool_reuse[i].is_some() {
continue; // layer comes from the cache image; no install needed
}
let install_path = tv.install_path();
if !install_path.is_dir() {
bail!(
"{} install path does not exist: {}. Run `mise install` first.",
tv.style(),
install_path.display()
);
}
}
// --- 3. System package layer (optional) ---
let system_packages_layer = packages::build_system_packages_layer(
&layout,
&base_layers,
&self.system_packages,
platform
.as_ref()
.map(|p| p.architecture.as_str())
.unwrap_or_else(|| crate::oci::normalize_arch(std::env::consts::ARCH)),
)?;
View on GitHub (pinned to afd2eddd3a)
Solutions
- Run `mise install` to install all configured tool versions locally, then retry the build.
- Check `mise ls` for missing tools and install the exact version the image build expects.
- Verify MISE_DATA_DIR / install path settings match where your tools actually live.
- If the tool was supposed to come from the cache image, ensure the cache image is present/correct so the layer is reused instead of requiring a local install.
Example fix
# before: build image right after cloning mise oci build # error: install path does not exist # after mise install && mise oci build
Defensive patterns
Strategy: validation
Validate before calling
mise ls --json | jq -e '.[] | select(.installed == false) | .version' \
&& { echo 'run mise install first'; exit 1; } || true Prevention
- Run `mise install` as a prerequisite step in CI/entrypoints before any OCI image build.
- Add `mise install` to post-clone setup hooks.
- Verify `mise ls` shows all configured tools installed before building images.
- Ensure MISE_DATA_DIR is consistent between the install step and the build step.
When it happens
Trigger: Running an OCI image build (`mise oci`/`send` flow) with tools listed in config that are pinned in mise.toml but not yet installed locally — e.g. after cloning a repo and building an image without installing tools, or after the install directory was deleted.
Common situations: Fresh checkout/CI container where `mise install` was skipped; MISE_DATA_DIR pointing somewhere else than where tools were installed; a cache-image layer-miss (`tool_reuse[i]` is None) for a tool that was assumed cached; tools installed under a different version than requested.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- erlang does not yet support refs
- Tool '{}' not found
- action prediction payload is too large
- task action manifest has an invalid identity
- task action manifest contains duplicate predictions
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/b54076916f2c0c2b.
Report an issue: GitHub.