jdx/mise · error

unsupported OS version

Error message

unsupported OS version: {os_ver}

What it means

linux_precompiled_os_version maps the running Linux distribution to an Erlang/OTP precompiled build target. Only ubuntu-20.04, ubuntu-22.04 and ubuntu-24.04 are supported automatically; anything else (other distros, non-Ubuntu glibc systems) fails fast with this error instead of downloading an incompatible build.

Solutions

  1. Set erlang.precompiled_os in mise.toml to one of ubuntu-20.04, ubuntu-22.04 or ubuntu-24.04 to opt into a compatible glibc build
  2. Allow compiling from source instead of using precompiled builds (do not set compile = false)
  3. Run inside an Ubuntu 20.04/22.04/24.04 container or image

Example fix

// before (mise.toml)
[erlang]
// no precompiled target configured on Debian

// after
[settings.erlang]
precompiled_os = "ubuntu-24.04"
Defensive patterns

Strategy: validation

Validate before calling

os_id=$(. /etc/os-release && echo "$ID-$VERSION_ID"); case "$os_id" in ubuntu-20.04|ubuntu-22.04|ubuntu-24.04) echo ok;; *) echo "set erlang.precompiled_os or allow compile";; esac

Prevention

When it happens

Trigger: Installing a precompiled Erlang version on Linux when the detected OS version string is not one of the three whitelisted Ubuntu versions, and the erlang.precompiled_os setting was not used to opt in.

Common situations: Running mise on Debian, Fedora, Arch, Alpine or a non-LTS Ubuntu (e.g. 23.10) and running `mise install erlang` without compile or precompiled_os configuration; CI images based on non-Ubuntu distros.

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/97b1bc61ae66a44d. Report an issue: GitHub.

Appendix: source

Thrown at src/plugins/core/erlang.rs:247

                    "ubuntu22" => "ubuntu-22.04".to_string(),
                    "ubuntu20" => "ubuntu-20.04".to_string(),
                    _ => os,
                }
            } else if let Some(os_release) = linux_os_release() {
                format!("{}-{}", os_release.id, os_release.version_id)
            } else {
                bail!("could not determine OS release");
            }
        } else {
            // Cross-platform Linux lock resolution cannot inspect the target
            // distro, so use Bob's newest supported Ubuntu build.
            "ubuntu-24.04".to_string()
        };

        // Keep automatic targets stable so existing optionless source locks continue to match.
        // Other targets and glibc distributions can opt in with erlang.precompiled_os.
        if !["ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04"].contains(&os_ver.as_str()) {
            bail!("unsupported OS version: {os_ver}");
        }
        Ok(os_ver)
    }

    fn macos_asset_name(target: &PlatformTarget) -> Result<String> {
        let arch = match target.arch_name() {
            "x64" => "x86_64",
            "arm64" => "aarch64",
            other => bail!("unsupported architecture: {other}"),
        };
        Ok(format!("otp-{arch}-apple-darwin.tar.gz"))
    }

    fn windows_asset_name(version: &str, target: &PlatformTarget) -> Result<String> {
        let os = match target.arch_name() {
            "x64" => "win64",
            "x86" => "win32",
            other => bail!("unsupported architecture: {other}"),

View on GitHub (pinned to 533346cc37)