jdx/mise · error
unsupported architecture: {other}
Error message
unsupported architecture: {other} What it means
While building the hex.pm precompiled URL on Linux, mise maps the platform arch to Bob's build names and only x64→amd64 and arm64→arm64 exist. Any other arch (riscv64, s390x, ppc64le, 32-bit arm/x86) bails here. As with the other precompiled guards it is fatal only when erlang.compile=false; otherwise it falls back to a kerl source build.
Source
Thrown at src/plugins/core/erlang.rs:173
fn source_archive_url(version: &str) -> String {
format!(
"https://github.com/erlang/otp/archive/{}.tar.gz",
Self::release_tag(version)
)
}
fn source_cache_name(url: &str) -> String {
format!("otp-source-{}.tar.gz", crate::hash::hash_sha256_to_str(url))
}
fn linux_precompiled_base_url(target: &PlatformTarget) -> Result<String> {
if target.libc() == Some("musl") {
bail!("precompiled erlang is not supported on musl linux");
}
let arch = match target.arch_name() {
"x64" => "amd64",
"arm64" => "arm64",
other => bail!("unsupported architecture: {other}"),
};
let os_ver = Self::linux_precompiled_os_version()?;
Ok(format!("https://builds.hex.pm/builds/otp/{arch}/{os_ver}"))
}
async fn linux_precompiled_lock_info(
version: &str,
target: &PlatformTarget,
) -> Result<PlatformInfo> {
let base_url = Self::linux_precompiled_base_url(target)?;
let release_tag = Self::release_tag(version);
let builds = HTTP_FETCH
.get_text_cached(format!("{base_url}/builds.txt"))
.await?;
let checksum = parse_hex_build_checksum(&builds, &release_tag)?;
Ok(PlatformInfo {
url: Some(format!("{base_url}/{release_tag}.tar.gz")),
checksum: Some(checksum),View on GitHub (pinned to 6f52dcdf99)
Solutions
- Set `mise settings set erlang.compile true` to build OTP from source on that architecture
- Check for a stale override: `mise settings get arch` — if it names an exotic arch, `mise settings unset arch`
- Run the install on x64/arm64 hardware or an emulation VM that presents as one of those
Example fix
# before $ mise settings set arch riscv64 # then: mise install erlang@27.1 → unsupported architecture: riscv64 # after $ mise settings unset arch $ mise install erlang@27.1
Defensive patterns
Strategy: validation
Validate before calling
# guard exotic arches before install ARCH=$(mise settings get arch 2>/dev/null || uname -m) case "$ARCH" in x86_64|x64|aarch64|arm64) mise install erlang@27.1 ;; *) mise settings set erlang.compile true && mise install erlang@27.1 ;; esac
Type guard
supported_erlang_arch() { case "${1:-$(uname -m)}" in x86_64|x64|aarch64|arm64) return 0 ;; *) return 1 ;; esac; } Prevention
- Never persist a `mise settings set arch <exotic>` without also setting erlang.compile=true
- For multi-arch CI matrices, encode the arch→policy mapping in the matrix setup script
When it happens
Trigger: `mise install erlang` on exotic Linux hardware (RISC-V, s390x mainframe, POWER, 32-bit ARM boards), or with `mise settings arch` overridden to such a value; also during lock resolution for a cross-compile PlatformTarget with one of those arches.
Common situations: QEMU-emulated multi-arch CI building erlang for riscv64/armv7; a stray `mise settings set arch riscv64` left in a shared settings file; NixOS on non-x86 workstations.
Related errors
- precompiled erlang is not available: {reason}
- precompiled erlang is not supported on musl linux
- unsupported OS version: {os_ver}
- precompiled erlang is not supported on {os}
- expected exactly one Hex OTP build record for {release_tag},
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/f85fc3515447bf37.
Report an issue: GitHub.