kerl
Manage Erlang/OTP versions
TLDR
Build and install an Erlang/OTP version in a directory
Activate an Erlang/OTP installation
Deactivate the current Erlang/OTP installation
List all available Erlang/OTP releases
List installed Erlang/OTP builds
SYNOPSIS
kerl [options] <command> [<args>]
PARAMETERS
update
Fetch latest list of available Erlang/OTP releases from erlang.org
build <release>
Build specified release from local source directory
build get <release> [<tag>]
Download source for release (optionally specific git tag) and build it
install <release> <prefix>
Install built release to directory prefix
uninstall <prefix>
Remove installed release from prefix
list builds
List all locally built releases
list installs
List all installed releases
delete build <release>
Delete build directory for release
shell <release> [<node args>]
Start erl shell for installed release
version
Show kerl version
--debug
Enable debug output
-h, --help
Show usage help
DESCRIPTION
kerl is a lightweight shell script for building, installing, and switching between multiple versions of Erlang/OTP on Unix-like systems. It enables developers to compile Erlang from source without root privileges, isolating installations in user directories. This avoids conflicts from system package managers, which often lag behind official releases.
Key benefits include easy version management, no need for sudo, and support for custom patches. Users download OTP source, build with kerl, and activate via environment variables or symlinks. It's popular in Elixir and Erlang communities for reproducible builds across projects.
Workflow: Update release list, download/build a version, install to a prefix, then run shells or binaries from the install path. Supports hiPE, crypto, and other features via configure flags passed during build.
CAVEATS
Requires build deps like gcc, ncurses-dev, openssl-dev, fop (for docs). Building takes time (30+ mins). No Windows support. Patches applied via build get-patches.
BASIC WORKFLOW
kerl update
kerl build get 26.2.1
kerl install 26.2.1 ~/otp/26.2
source ~/otp/26.2/activate
ACTIVATION
Use activate script to set PATH/ERL_* vars, or add to ~/.bashrc:
export PATH="$HOME/otp/26.2/bin:$PATH"
HISTORY
Created by TheLucid in 2010; first GitHub commit 2011. Gained popularity for isolated Erlang builds pre-asdf/asdf-erlang. Maintained at github.com/kerl/kerl with contributions for modern OTP support.


