jdx/mise · error
the packslip lists and as musl fallbacks for , and mise…
Error message
the packslip lists {a} and {b} as musl fallbacks for {}, and mise will not guess between them What it means
When the selected gnu artifact declares a minimum glibc version higher than the host's, mise falls back to a static musl build. If two musl artifacts match the host equally as fallbacks, mise refuses to guess and raises this error naming both artifacts and the gnu artifact that needed the fallback.
Solutions
- Set the `variant` tool option to pick one of the musl artifacts explicitly.
- Pin an older tool version whose glibc requirement fits the host or whose musl fallback is unambiguous.
- Upgrade the host glibc (or use a newer distro/container) so the gnu artifact's requirement is met and no fallback is needed.
- Ask the vendor to disambiguate the duplicate musl artifacts in the packslip.
Example fix
// before
[tools]
"packslip:foo" = "latest"
// after
[tools]
"packslip:foo" = { version = "latest", variant = "tar-gz" } Defensive patterns
Strategy: fallback
Validate before calling
// Check glibc version against the artifact requirement before install.
const glibc = await getGlibcVersion();
if (artifact.requires?.glibc_min && compareGlibc(glibc, artifact.requires.glibc_min) < 0) {
console.warn('host glibc below minimum; a musl fallback artifact will be selected');
} Try / catch
try {
await miseInstall(tool);
} catch (e) {
if (String(e).includes('as musl fallbacks')) {
await miseInstall(tool, { variant: 'tar-gz' }); // explicit disambiguation
} else throw e;
} Prevention
- Know your host's glibc version and pick tool versions whose glibc_min fits it.
- Set an explicit variant when the vendor ships multiple musl artifacts.
- Use distro images with glibc new enough to avoid fallback entirely.
- Pin versions in mise.lock so fallback behavior is stable.
When it happens
Trigger: Installing a packslip tool on a glibc host whose glibc is older than the artifact's requires.glibc_min, while the packslip lists two musl artifacts for the same os/arch with equal format preference.
Common situations: Running on an older enterprise Linux (old glibc) with a tool whose latest release requires newer glibc; the vendor publishes two musl builds (e.g. two archive formats) without variants.
Related errors
- the packslip lists and for this host and mise will not…
- an exec entry with no command
- cli-spec entry names
- github.com/ has no release carrying ; mise installs from a…
- has no executable called
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/9a1d131a9743ed45.
Report an issue: GitHub.
Appendix: source
Thrown at src/backend/packslip.rs:457
min: &str,
) -> Result<&'a Artifact> {
if crate::packslip_requirements::meets_minimum(actual, min) != Some(false) {
return Ok(artifact);
}
let musl = Host {
libc: Some("musl"),
..host.as_host()
};
match packslip::select_artifact(artifacts, &musl, variant, &FORMAT_PREFERENCE) {
Ok(fallback) => {
debug!(
"{} requires glibc>={min}, but this host has {actual}; taking the static musl build {}",
artifact.name, fallback.name
);
Ok(fallback)
}
Err(Selection::Ambiguous(a, b)) => bail!(
"the packslip lists {a} and {b} as musl fallbacks for {}, and mise will not guess between them",
artifact.name
),
Err(Selection::NoMatch) => Ok(artifact),
}
}
/// The artifact installed from a stored statement, for scoping resources to it
/// later. New installs record it explicitly; old installs fall back to host
/// selection. `None` means only unscoped resources apply.
pub(crate) fn selected_artifact(
statement: &Statement,
install_path: &Path,
variant: Option<&str>,
) -> Option<Artifact> {
if let Ok(name) = std::fs::read_to_string(install_path.join(SELECTED_ARTIFACT_FILE))
&& let Some(artifact) = statement
.predicateView on GitHub (pinned to 533346cc37)