jdx/mise · error
precompiled erlang is not available: {reason}
Error message
precompiled erlang is not available: {reason} What it means
Thrown by mise's core erlang plugin when the precompiled OTP install path (hex.pm Bob builds, erlef/otp_builds, or erlang/otp releases) failed and erlang.compile is explicitly false, which forbids the kerl source-build fallback. The {reason} carries the underlying failure text (musl linux, unsupported OS/arch, missing Hex build record, GitHub release error). With compile unset or true, the same condition only emits a debug log and mise builds Erlang from source instead, so this error means 'no precompiled artifact AND you forbade compiling'.
Source
Thrown at src/plugins/core/erlang.rs:98
}
async fn install_kerl(&self) -> Result<()> {
debug!("Installing kerl to {}", display_path(self.kerl_path()));
HTTP_FETCH
.download_file(
format!("https://raw.githubusercontent.com/kerl/kerl/{KERL_VERSION}/kerl"),
&self.kerl_path(),
None,
)
.await?;
file::make_executable(self.kerl_path())?;
Ok(())
}
fn precompiled_unavailable(&self, reason: impl Into<String>) -> Result<Option<ToolVersion>> {
let reason = reason.into();
if Settings::get().erlang_compile(CompilePurpose::Inspect) == Some(false) {
bail!("precompiled erlang is not available: {reason}");
}
debug!("{reason}");
Ok(None)
}
fn release_tag(version: &str) -> String {
format!("OTP-{version}")
}
fn lockfile_url(&self, locked: bool, tv: &ToolVersion) -> Option<String> {
locked_platform_url(locked, &tv.lock_platforms, &self.get_platform_key())
}
fn set_lockfile_info(
&self,
tv: &mut ToolVersion,
install: Option<&str>,
url: &str,View on GitHub (pinned to 6f52dcdf99)
Solutions
- Allow the source fallback: `mise settings set erlang.compile true` (or `mise settings unset erlang.compile`) so kerl builds OTP when no precompiled build exists
- Run on a platform that has precompiled OTP: Ubuntu 20.04/22.04/24.04 glibc on x64/arm64, macOS x64/arm64, or Windows x64/x86
- If you must keep compile=false, pin CI to a supported image (e.g. GitHub Actions `runs-on: ubuntu-24.04`) so the precompiled path succeeds
- If {reason} says the build/release is missing, pick an OTP version listed at https://builds.hex.pm/builds/otp/<arch>/<os>/builds.txt
Example fix
# before (~/.config/mise/settings.toml) [erlang] compile = false # after — permit source compilation when no precompiled artifact exists [erlang] compile = true
Defensive patterns
Strategy: fallback
Validate before calling
# before installing erlang, check the compile policy vs the platform
if [ "$(mise settings get erlang.compile)" = "false" ]; then
. /etc/os-release 2>/dev/null || true
case "${ID:-}-${VERSION_ID:-}" in ubuntu-20.04|ubuntu-22.04|ubuntu-24.04) ;; *) echo "no precompiled OTP here; allowing source build" && mise settings set erlang.compile true ;; esac
fi
mise install erlang@27.1 Try / catch
if ! mise install erlang@27.1 2>&1 | tee /dev/stderr | grep -q 'precompiled erlang is not available'; then mise install erlang@27.1 # grep found the error → configure compile=true and retry else mise settings set erlang.compile true && mise install erlang@27.1 fi
Prevention
- Don't set erlang.compile=false globally; scope it to runners you know are Ubuntu 20.04/22.04/24.04 glibc on x64/arm64
- Pin CI images to ubuntu-24.04 instead of ubuntu-latest so the precompiled path keeps working
- Document in the repo's mise.toml comment which platforms the erlang config is validated on
When it happens
Trigger: `mise install erlang` (or any command that installs it, e.g. `mise use erlang@27.1`) on a host where `mise settings get erlang.compile` is false, AND the precompiled path fails: musl/Alpine Linux, non-Ubuntu distro, riscv64/s390x-class arch, an OTP version absent from builds.txt, or a GitHub API error fetching erlef/otp_builds.
Common situations: CI pinned to erlang.compile=false for reproducible precompiled installs, then the runner base image changes (ubuntu-latest moves past 24.04, or a switch to Alpine) and no precompiled build exists; developers on Fedora/Arch/Debian inheriting a teammate's Ubuntu-oriented config with compile=false.
Related errors
- precompiled erlang is not supported on musl linux
- unsupported architecture: {other}
- 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/2fba0571c7b03363.
Report an issue: GitHub.