docs/lang/erlang.md
mise can be used to install and manage multiple versions of erlang on the same system.
Install Erlang for the project, then check the OTP release without starting an interactive Erlang shell:
mise use erlang@latest
mise exec -- erl -noshell -eval 'io:format("~s~n", [erlang:system_info(otp_release)]), halt().'
Use mise use -g erlang@latest for a personal default, or replace latest with
the release series required by your application.
See available versions with mise ls-remote erlang.
These instructions use mise's built-in erlang support. An installed external
plugin with the same name can change the behavior; use mise plugins ls to
check for overrides. See the core implementation
for backend details.
mise tries a compatible precompiled build by default and falls back to a source
build when needed. Source builds use kerl and
require its platform build dependencies. Set erlang.compile = true to request
a source build, or false to fail when a precompiled build is unavailable.
See kerl's documentation for build dependencies and configuration.
On GitHub Actions Linux runners, ImageOS=ubuntu24, ImageOS=ubuntu22, and
ImageOS=ubuntu20 map to their corresponding precompiled Erlang build targets. In the
default erlang.compile mode, unsupported values record the Erlang/OTP source archive
as the platform's locked input so installs can reproduce the kerl fallback.
The builds published by Bob target Ubuntu,
but may also run on other glibc-based Linux distributions with compatible system
libraries. Set erlang.precompiled_os to opt in to one of Bob's Ubuntu targets:
[settings.erlang]
precompiled_os = "ubuntu-22.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 version alone does not guarantee that every optional
Erlang application will work. The selected target is recorded in mise.lock; use a
target compatible with every machine that consumes the lockfile.
The following tool-options are available for the erlang backend.
These options go in the [tools] section in mise.toml.
install_envSet environment variables for kerl build/install commands and other install-time commands run by
the core erlang backend:
[tools]
erlang = { version = "latest", install_env = { KERL_CONFIGURE_OPTIONS = "--without-javac" } }