jdx/mise · error

unsupported architecture

Error message

unsupported architecture: {other}

What it means

linux_precompiled_base_url maps the host architecture to the naming used by Erlang's precompiled build artifacts; the target arch matched none of the known values (x64→amd64 etc.). Without a mapping there is no download URL to build, so the function bails with the unsupported arch name.

Solutions

  1. Compile Erlang from source on the unsupported architecture (enable erlang_compile, install build dependencies)
  2. Run on x86_64 or arm64 hardware/emulation (e.g. qemu-user or arm64 runners)
  3. Check that a typo in MISE_ARCH / target triple isn't causing a bogus arch name

Example fix

// before
# armv7 device
mise install erlang@26.2
// after
mise settings set erlang_compile true
mise install erlang@26.2  # compiles from source
Defensive patterns

Strategy: validation

Validate before calling

case "$(uname -m)" in x86_64|aarch64|arm64) echo "precompiled OK";; *) echo "unsupported arch: compile from source";; esac

Try / catch

null

Prevention

When it happens

Trigger: Installing precompiled Erlang on architectures like x86 (32-bit), riscv64, ppc64le, s390x, or armv7 Linux.

Common situations: Raspberry Pi 32-bit OS; niche server architectures (s390x mainframes, ppc64le); riscv64 dev boards running mise.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/f85fc3515447bf37. Report an issue: GitHub.

Appendix: 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 533346cc37)