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

  1. 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
  2. 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
  3. 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
  4. 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

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


AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22). Data as JSON: /api/errors/2fba0571c7b03363. Report an issue: GitHub.