jdx/mise · error

precompiled erlang is not supported on

Error message

precompiled erlang is not supported on {os}

What it means

resolve_lock_info resolves the artifact lock for an Erlang version. When the platform has no precompiled support and the user explicitly disabled compilation (compile = false), no install path exists, so it fails with this error.

Solutions

  1. Remove compile = false so mise can build Erlang from source
  2. Install on a platform with precompiled support (Ubuntu 20.04/22.04/24.04 x86_64/aarch64, macOS x64/arm64, Windows x64/x86)
  3. Pin a platform that has precompiled artifacts via erlang.precompiled_os

Example fix

// before (mise.toml)
[settings.erlang]
compile = false

// after
[settings.erlang]
# compile = false removed; allow source builds on unsupported platforms
Defensive patterns

Strategy: validation

Validate before calling

# confirm platform is precompiled-supported before setting compile=false
case "$(uname -s)-$(uname -m)" in Linux-x86_64|Linux-aarch64|Darwin-*) echo precompiled-ok;; *) echo "do not set erlang compile=false";; esac

Prevention

When it happens

Trigger: Configuring erlang compile = false (or node_compile-style setting set to false) on an OS not covered by precompiled builds, then installing Erlang.

Common situations: Users on unsupported Linux distros or non-x86/arm64 platforms who set compile = false to speed installs, not realizing precompiled builds are unavailable there.

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/84aafe87f16744f9. Report an issue: GitHub.

Appendix: source

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

                    Err(err) if compile == Some(false) => Err(err),
                    Err(_) => self.resolve_source_lock_info(&tv.version).await,
                }
            }
            "windows" => {
                let info = match Self::windows_asset_name(&tv.version, target) {
                    Ok(asset_name) => {
                        Self::github_asset_lock_info("erlang/otp", &release_tag, &asset_name).await
                    }
                    Err(err) => Err(err),
                };
                match info {
                    Ok(info) => Ok(info),
                    Err(err) if compile == Some(false) => Err(err),
                    Err(_) => self.resolve_source_lock_info(&tv.version).await,
                }
            }
            os if compile == Some(false) => {
                bail!("precompiled erlang is not supported on {os}")
            }
            _ => self.resolve_source_lock_info(&tv.version).await,
        }
    }
}

fn source_build_kerl_env(
    install_env: IndexMap<String, crate::config::env_directive::EnvValue>,
    kerl_base_dir: &Path,
) -> IndexMap<String, Option<OsString>> {
    let mut env = install_env
        .into_iter()
        .map(|(key, value)| (key, value.into_string().map(OsString::from)))
        .collect::<IndexMap<_, _>>();
    // Source lock metadata resolves a GitHub archive and stages it here. Keep
    // kerl from selecting another backend or download directory and silently
    // building a different archive instead.
    env.insert(

View on GitHub (pinned to 533346cc37)