jdx/mise · error
precompiled erlang is not supported on {os}
Error message
precompiled erlang is not supported on {os} What it means
During lock resolution (mise lock / locked installs), if the target OS is neither linux, macos, nor windows — e.g. freebsd/openbsd — and erlang.compile=false is set, mise bails: no precompiled source exists for that OS and compilation is disallowed. With compile unset, the same case records source-build lock info instead, so this only fires under an explicit compile=false policy.
Source
Thrown at src/plugins/core/erlang.rs:734
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 6f52dcdf99)
Solutions
- Allow source builds on BSD: `mise settings set erlang.compile true` (kerl supports building on FreeBSD)
- Scope the compile=false setting to platforms that actually have precompiled builds instead of setting it globally
- Manage Erlang via the BSD ports/packages on those hosts
Example fix
# before (~/.config/mise/settings.toml) [erlang] compile = false # on FreeBSD → precompiled erlang is not supported on freebsd # after [erlang] compile = true
Defensive patterns
Strategy: validation
Validate before calling
# don't apply a global compile=false on OSes that have no precompiled OTP UNAME=$(uname -s) if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ]; then mise settings set erlang.compile true # BSD etc: source builds only fi mise install erlang@27.1
Prevention
- Keep compile=false in per-platform config files (e.g. a Linux-only mise.toml layer) rather than global settings
When it happens
Trigger: `mise lock` or `mise install --locked` (or settings.locked=true) on a FreeBSD/OpenBSD host with `mise settings get erlang.compile` == false; generating a cross-platform lock entry whose PlatformTarget OS is freebsd.
Common situations: FreeBSD CI jails with reproducibility-oriented settings copied from Linux; lock matrices that enumerate BSD targets.
Related errors
- precompiled erlang is not available: {reason}
- precompiled erlang is not supported on musl linux
- unsupported architecture: {other}
- unsupported OS version: {os_ver}
- 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/84aafe87f16744f9.
Report an issue: GitHub.