jdx/mise · error
artifact bundle executable does not exist: {}
Error message
artifact bundle executable does not exist: {} What it means
Inside a downloaded artifact bundle, mise locates each expected binary via the bundle's info.json variant matching the host triple. If the referenced executable file is missing on disk (bundle layout differs from manifest, or a corrupted/partial download), artifactbundle_binaries fails rather than installing a broken tool.
Source
Thrown at src/backend/spm.rs:1017
) -> eyre::Result<Vec<ArtifactBundleBinary>> {
let mut binaries = vec![];
for bundle in artifactbundle_dirs(extract_dir)? {
let info = file::read_to_string(bundle.join("info.json"))?;
let manifest = serde_json::from_str::<ArtifactBundleInfo>(&info)
.wrap_err("Failed to parse artifact bundle info.json")?;
for (name, artifact) in manifest.artifacts {
if artifact.r#type != "executable" {
continue;
}
for variant in artifact.variants {
if variant
.supported_triples
.iter()
.any(|triple| target_triples.contains(triple))
{
let path = bundle.join(&variant.path);
if !path.is_file() {
bail!(
"artifact bundle executable does not exist: {}",
path.display()
);
}
binaries.push(ArtifactBundleBinary {
name: name.clone(),
path,
});
break;
}
}
}
}
Ok(binaries)
}
fn artifactbundle_dirs(extract_dir: &Path) -> eyre::Result<Vec<PathBuf>> {
let mut bundles = vec![];View on GitHub (pinned to afd2eddd3a)
Solutions
- Re-download/re-install the version (delete the cached install dir and run mise install again) to rule out a corrupted download
- Report the broken info.json/asset to the upstream project and pin an earlier working version meanwhile
- Verify the bundle manually: unzip it and check the path listed in info.json exists and is a file
Example fix
// shell rm -rf ~/.local/share/mise/installs/spm-owner-repo/1.2.3 mise install spm:owner/repo@1.2.3 # fresh download, rules out corruption
Defensive patterns
Strategy: fallback
Validate before calling
# Validate a downloaded bundle before trusting it unzip -t pkg.artifactbundle.zip && \ unzip -p pkg.artifactbundle.zip info.json | jq -e '.variants[].path'
Try / catch
match install {
Err(e) if e.contains("artifact bundle executable does not exist") => {
// purge cache, retry once, else pin previous version
}
other => other,
} Prevention
- Clear the cached bundle and retry once on first occurrence (rules out partial download)
- Verify upstream info.json paths match the actual zip layout before adopting a new version
- Pin the last known-good version and file an upstream issue about the broken bundle
When it happens
Trigger: try_install_artifactbundle processes a bundle whose variant.path entry points to a non-existent file — typically a malformed info.json, a re-zipped bundle missing files, or a truncated download.
Common situations: Upstream published an artifact bundle with incorrect info.json paths; proxy/cache stripped files from the zip; manually edited bundle; extraction tool skipped symlinks.
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
- No matching SwiftPM artifact bundle found for {}
- No matching SwiftPM artifact bundle found for {}, but spm.ar
- SwiftPM artifact bundles require a release version; {display
- artifactbundle_asset must end with .artifactbundle.zip, got
- multiple SwiftPM artifact bundles found: {}. Set artifactbun
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/72135518e2d8510f.
Report an issue: GitHub.