Skip to content

Erlang ​

mise installs Erlang/OTP from a precompiled build when one exists for your platform and compiles it from source with kerl otherwise.

Quick start ​

Install Erlang for the project, then print the OTP release without starting an interactive shell:

sh
mise use erlang@29
mise exec -- erl -noshell -eval 'io:format("~s~n", [erlang:system_info(otp_release)]), halt().'
# 29

Use mise use -g erlang@29 for a personal default. For Elixir, see Elixir, which explains how to pick an Elixir build for your OTP major.

Choosing a version ​

erlang@29 selects the newest 29.x release, erlang@29.1.1 selects that release, and erlang@latest selects the newest release. List the available versions with mise ls-remote erlang. See version requests for the full syntax.

Version files ​

mise reads no Erlang-specific version file. Set the version in mise.toml or .tool-versions.

How mise installs Erlang ​

By default mise tries a precompiled build for your platform and compiles from source with kerl when none is available:

PlatformDefault source
macOS (x64, arm64)Precompiled, from erlef/otp_builds
Windows (x64, x86)Precompiled, from the Erlang/OTP GitHub releases
Ubuntu 20.04, 22.04 and 24.04 (x64, arm64), including GitHub ActionsPrecompiled, from Bob on builds.hex.pm
Other Linux distributions, and musl systems such as AlpineCompiled from source with kerl

Set erlang.compile to true to always build from source, or to false to fail instead of compiling when no precompiled build exists. mise sets no Erlang environment variables; the install's bin directory goes on PATH.

On Linux, mise reads /etc/os-release to find the Ubuntu release. On GitHub Actions Ubuntu runners it reads the runner's ImageOS instead (ubuntu20, ubuntu22 or ubuntu24). Where no precompiled build applies, mise lock records the Erlang/OTP source archive, so every machine that uses the lockfile compiles the same release. When mise lock runs on macOS or Windows and resolves a Linux platform, it records Bob's Ubuntu 24.04 build.

On Alpine and NixOS, all_compile currently defaults to true, so mise compiles Erlang without trying a precompiled build. This default is deprecated and changes in mise 2027.8.0, but the change does little for Erlang. mise has no precompiled Erlang for musl, so Alpine always compiles. mise does not detect NixOS as an Ubuntu release, so even after the change NixOS compiles unless you choose one of Bob's targets. On NixOS with nix-ld, set all_compile = false and erlang.precompiled_os to use one of Bob's builds (see the next section). With erlang.compile = false, an install with no applicable precompiled build fails instead of compiling, so do not set it on Alpine, or on NixOS without erlang.precompiled_os. To keep compiling, set all_compile = true explicitly.

An installed plugin named erlang takes precedence over the built-in installer. If mise behaves differently from this page, check mise plugins ls and see selecting another implementation.

Bob's Ubuntu builds on other distributions ​

Bob's builds target Ubuntu but may also run on other glibc-based Linux distributions with compatible system libraries. Ubuntu 26.04 is not detected automatically. Set erlang.precompiled_os to use one of Bob's targets:

mise.toml
toml
[settings.erlang]
precompiled_os = "ubuntu-24.04"

Accepted targets are ubuntu-20.04, ubuntu-22.04, ubuntu-24.04 and ubuntu-26.04.

Precompiled builds link to system libraries such as OpenSSL, ncurses, ODBC and wxWidgets. A compatible glibc alone does not guarantee that every optional Erlang application works. mise.lock records the selected target, so choose one that works on every machine that uses the lockfile.

Source builds with kerl ​

Source builds need kerl's build dependencies. mise downloads kerl itself, fetches the Erlang/OTP source archive, and runs kerl build-install with one make job per CPU. To pass configure flags, set KERL_CONFIGURE_OPTIONS with install_env:

mise.toml
toml
[tools]
erlang = { version = "29", install_env = { KERL_CONFIGURE_OPTIONS = "--without-javac" } }

mise sets KERL_BASE_DIR, KERL_DOWNLOAD_DIR and KERL_BUILD_BACKEND itself, so values for those in install_env are ignored.

Tool options ​

Erlang has no Erlang-specific options. install_env reaches kerl source builds, the install step of precompiled Linux builds, and postinstall commands. Other generic options are described in tool options.

Settings ​

Set these under [settings] in a config file, with mise settings set, or with a setting's environment variable where it has one. See which value wins when a setting is set in more than one place.

erlang.compile

Compile Erlang from source instead of using a precompiled build.

  • Type: boolean
  • Default: unset
  • Environment variable: MISE_ERLANG_COMPILE

true always builds from source with kerl. false uses only precompiled builds and fails when none exists for the platform. When unset, all_compile decides; if that is unset too, mise uses a precompiled build when one is available and builds from source otherwise.

erlang.precompiled_os

Ubuntu release whose precompiled Erlang build from builds.hex.pm mise installs on Linux.

  • Type: string
  • Default: unset
  • Environment variable: MISE_ERLANG_PRECOMPILED_OS
  • Choices:
    • ubuntu-20.04
    • ubuntu-22.04
    • ubuntu-24.04
    • ubuntu-26.04

Applies to glibc Linux targets, including mise lock for Linux platforms from another OS, which otherwise assumes ubuntu-24.04. When unset on Linux, mise derives it from $ImageOS (GitHub Actions) or /etc/os-release, and uses precompiled builds automatically only for Ubuntu 20.04, 22.04 and 24.04. Set it to ubuntu-26.04 on that release, or to one of these Ubuntu releases on another glibc distribution to use that release's build; other values are rejected. musl Linux always builds from source.

MIT LicenseCopyright © 2026jdx.dev