jdx/mise · error
the packslip gives no download URL for {}
Error message
the packslip gives no download URL for {} What it means
This error is thrown by mise's packslip backend during `install_payload` after requirements checks pass but the resolved packslip artifact has no download URL (`artifact.url` is None). A packslip manifest must point at a concrete downloadable artifact; if the signer's manifest omits the URL for this artifact, mise cannot proceed with the download. It is an invariant check on the manifest data before any network fetch happens.
Source
Thrown at src/backend/packslip.rs:1232
if vfox_plugin {
crate::plugins::packslip::validate_artifact(&artifact)?;
}
let mut commands = BTreeMap::new();
if let Some(req) = &artifact.requires {
for bin in &req.bin {
// Spawnable, not merely present: the probe below runs the
// path with `--version`, so a shebang-only script or a `.ps1`
// would be chosen and then fail to start.
if let Some(path) = ctx.ts.which_bin_spawnable(&ctx.config, &bin.name).await {
commands.insert(bin.name.clone(), path);
}
}
}
crate::packslip_requirements::check(&artifact, &commands)
.await
.enforce(raw_opts.get("ignore_requirements") == Some("true"))?;
let Some(url) = artifact.url.clone() else {
bail!("the packslip gives no download URL for {}", artifact.name);
};
if !file::is_plain_file_name(&artifact.name) {
bail!(
"the packslip names an artifact {:?}, which is not a plain file name",
artifact.name
);
}
let file_path = tv.download_path().join(&artifact.name);
ctx.pr.next_operation();
ctx.pr.set_message(format!("download {}", artifact.name));
HTTP.download_file_with_headers(
&url,
&file_path,
&headers_for(&url)?,
Some(ctx.pr.as_ref()),
)
.await?;
View on GitHub (pinned to afd2eddd3a)
Solutions
- Update the packslip manifest/version: run `mise ls-remote packslip:<project>` and install a newer version whose manifest includes the download URL (`mise use packslip:<project>@<newer-version>`).
- Check the upstream signed manifest for the artifact matching your platform; if the URL is missing upstream, report it to the project publishing the packslip.
- Clear any cached manifest and retry (`mise cache clear`), then `mise install` again to re-fetch a fresh manifest.
- As a workaround, switch the tool to another backend (e.g. `mise use aqua:owner/repo` or `mise use github:owner/repo`) that publishes release assets directly.
Example fix
// before (mise.toml) [tools] mytool = "packslip:owner/repo@1.2.2" // after — move to a version whose packslip carries the artifact URL [tools] mytool = "packslip:owner/repo@1.2.3"
Defensive patterns
Strategy: validation
Validate before calling
// before install, verify the manifest has a URL for your platform
const hasUrl = artifact && typeof artifact.url === 'string' && artifact.url.startsWith('http');
if (!hasUrl) throw new Error(`packslip artifact ${artifact?.name} has no download URL; pick another version`); Type guard
function hasDownloadUrl(a) { return typeof a === 'object' && a !== null && typeof a.url === 'string' && a.url.length > 0; } Try / catch
try { await $`mise install` } catch (e) { if (String(e).includes('gives no download URL')) { /* fall back to aqua/github backend or newer version */ } else throw e; } Prevention
- Pin versions with known-good packslip manifests
- Clear mise caches after upstream manifest changes
- Prefer aqua/github backends when packslip manifests look incomplete
When it happens
Trigger: Calling `mise install` (or `install_version_` -> `install_payload`) for a tool resolved through the packslip backend where the downloaded/verified packslip manifest contains an artifact entry whose `url` field is null or missing. The `let Some(url) = artifact.url.clone() else` guard fails exactly then.
Common situations: A packslip manifest published upstream was malformed or newly changed and dropped the URL; a pinned manifest version lacks an artifact for the current platform; a proxy/mirror serves a truncated manifest; a typo'd or outdated packslip reference resolves to the wrong manifest.
Understand the failure class
Background: "invalid response format", "malformed payload", "missing data field": when an API returns 200 but the response shape is wrong — this error's family across 23 libraries.
Related errors
- the packslip names an artifact {:?}, which is not a plain fi
- must not record a pin before replacement succeeds
- packslip:{project}@{version}: manifest digest differs from s
- the packslip names an executable {:?}, which is not a plain
- the packslip lists executable {} in {}, but the archive hold
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/3b922332254d98f3.
Report an issue: GitHub.