LinuxCommandLibrary

kerl

Manage Erlang/OTP versions

TLDR

Build and install an Erlang/OTP version in a directory

$ kerl build-install [28.0] [28.0] [path/to/installation_directory]/[28.0]
copy

Activate an Erlang/OTP installation
$ . [path/to/installation]/activate
copy

Deactivate the current Erlang/OTP installation
$ kerl_deactivate
copy

List all available Erlang/OTP releases
$ kerl list releases
copy

List installed Erlang/OTP builds
$ kerl list installations
copy

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.

SEE ALSO

erl(1), erlc(1), make(1), asdf(1)

Copied to clipboard