jdx/mise · error
Unsupported qualifier
Error message
Unsupported qualifier '{}'. Supported: gnu, glibc, musl, msvc, baseline, musl-baseline What it means
mise validates platform qualifiers (libc/environment strings) used in platform targets like `x86_64-linux-musl`. This bail fires when a qualifier string is not one of the six allowed values, preventing ambiguous or typo'd platform specs from silently resolving to the wrong artifacts.
Solutions
- Change the qualifier to one of the supported values: gnu, glibc, musl, msvc, baseline, or musl-baseline
- Fix typos in the platform string (e.g. 'musi' -> 'musl')
- If you need a libc/ABI not listed, remove the qualifier and pin a platform-independent version instead
Example fix
// before
[tools]
"node:20.5.0" = { platform = "x86_64-linux-androideabi" }
// after
[tools]
"node:20.5.0" = { platform = "x86_64-linux-musl" } Defensive patterns
Strategy: validation
Validate before calling
const QUALIFIERS = ["gnu","glibc","musl","msvc","baseline","musl-baseline"];
function qualifierOk(platform: string): boolean {
const parts = platform.split("-");
return parts.length < 3 || QUALIFIERS.includes(parts.slice(2).join("-"));
} Type guard
function isSupportedQualifier(q: string): q is "gnu"|"glibc"|"musl"|"msvc"|"baseline"|"musl-baseline" {
return ["gnu","glibc","musl","msvc","baseline","musl-baseline"].includes(q as any);
} Try / catch
null
Prevention
- Copy platform strings from mise docs rather than other ecosystems
- Validate platform specs with `mise ls-remote --platform` or a dry run before committing configs
- Lint mise.toml/.tool-versions files in CI for known qualifier values
When it happens
Trigger: Calling mise with a platform target string containing a qualifier outside {gnu, glibc, musl, msvc, baseline, musl-baseline}, e.g. `mise use <tool>@<version>-linux-android` or a malformed platform spec in config.
Common situations: Typos in .tool-versions or mise.toml platform keys; copying qualifiers from other ecosystems (e.g. 'gnuabi64', 'gnueabi', 'android', 'mingw'); hand-writing platform-pinned tool versions for cross-compilation.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- Unsupported architecture
- Unsupported OS ' '. Supported: linux, macos, windows…
- encrypt an external dotfile source instead of configuration
- Invalid platform format
- precompiled erlang is not available
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/98e3146706efe5eb.
Report an issue: GitHub.
Appendix: source
Thrown at src/platform.rs:98
"Unsupported OS '{}'. Supported: linux, macos, windows, android",
self.os
),
}
// Validate architecture
match self.arch.as_str() {
"x64" | "arm64" | "x86" | "loongarch64" | "riscv64" => {}
_ => bail!(
"Unsupported architecture '{}'. Supported: x64, arm64, x86, loongarch64, riscv64",
self.arch
),
}
// Validate qualifier if present
if let Some(qualifier) = &self.qualifier {
match qualifier.as_str() {
"gnu" | "glibc" | "musl" | "msvc" | "baseline" | "musl-baseline" => {}
_ => bail!(
"Unsupported qualifier '{}'. Supported: gnu, glibc, musl, msvc, baseline, musl-baseline",
qualifier
),
}
}
Ok(())
}
/// Convert to platform key format used in lockfiles
pub(crate) fn to_key(&self) -> String {
match &self.qualifier {
Some(qualifier) => format!("{}-{}-{}", self.os, self.arch, qualifier),
None => format!("{}-{}", self.os, self.arch),
}
}
/// Parse multiple platform strings, validating each oneView on GitHub (pinned to 533346cc37)