100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Programming

Installing Erlang

How to install Erlang/OTP on macOS, Linux, and Windows, verify the installation, and manage multiple versions.

FoundationsBeginner7 min readJul 10, 2026
Analogies

Installing Erlang

Installing Erlang means installing Erlang/OTP, a distribution that bundles the erl runtime shell, the erlc compiler, the BEAM virtual machine, and a large set of standard libraries collectively called OTP (Open Telecom Platform). Most developers today install OTP through a system package manager or a version manager rather than building it from source, since prebuilt binaries handle the native dependencies like OpenSSL and ncurses automatically.

🏏

Cricket analogy: Installing OTP is like a franchise signing a full squad rather than one star player: you get the erl shell, erlc compiler, and standard libraries bundled together, not just a bare interpreter.

macOS and Linux

On macOS, the fastest path is Homebrew with 'brew install erlang', which pulls a prebuilt OTP release and its dependencies. On Debian or Ubuntu Linux, 'apt install erlang' works for a quick start, though it can lag behind the latest OTP release; for production-grade control, many teams instead use kerl, a shell script that builds and manages specific OTP versions from source under your home directory.

🏏

Cricket analogy: Using apt to install Erlang on Ubuntu is like grabbing a ready-made bat off a sporting goods shelf, while using kerl to build from source is like getting a bat custom-pressed to your exact grip and weight.

Windows

On Windows, the Erlang Solutions installer or the official .exe installer from erlang.org provides a graphical setup that installs erl.exe, erlc.exe, and adds them to PATH automatically. Many Windows developers instead run Erlang inside Windows Subsystem for Linux (WSL2) with an Ubuntu distribution, since it gives the same apt-based workflow used on native Linux and avoids path or line-ending quirks that occasionally trip up native Windows installs.

🏏

Cricket analogy: Using the Windows .exe installer is like using a certified indoor cricket net facility, while running Erlang under WSL2 is like importing an outdoor pitch's exact conditions into that same building.

Verifying Your Installation

After installation, open a terminal and run 'erl' to launch the interactive shell; a successful install prints the Erlang/OTP version banner and drops you at the '1>' prompt. Running 'erl -version' prints just the runtime system version without entering the shell, and 'erl -eval "erlang:display(erlang:system_info(otp_release)), halt()." -noshell' is a quick scripted way to confirm the exact OTP release number your PATH resolves to.

🏏

Cricket analogy: Running 'erl' and seeing the version banner is like a bowler checking the speed gun reads correctly before the first over of a match, confirming the setup works before real work begins.

Managing Multiple Erlang Versions

Because different projects can require different OTP releases, most working Erlang developers use a version manager: kerl for building and switching between arbitrary OTP source builds, or asdf with the erlang plugin, which reads a per-project '.tool-versions' file and switches OTP (and often Elixir) versions automatically when you cd into a project directory. This matters in practice because rebar3 build tool behavior, NIF compatibility, and some standard library modules change across OTP major releases.

🏏

Cricket analogy: Switching OTP versions per project with asdf is like a franchise swapping its playing squad's kit between formats, fielding a T20 lineup one day and a Test lineup the next, based on the match at hand.

bash
# macOS (Homebrew)
brew install erlang

# Ubuntu/Debian
sudo apt update && sudo apt install erlang

# Using asdf version manager (any OS with asdf installed)
asdf plugin add erlang
asdf install erlang 26.2.1
asdf global erlang 26.2.1

# Verify
erl -version
# Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 14.2.1

erl
# Erlang/OTP 26 [erts-14.2.1] [source] [64-bit] [smp:8:8]
# Eshell V14.2.1 (press Ctrl+G to abort, type help(). for help)
# 1>

OTP stands for Open Telecom Platform. It refers not just to the runtime but to the full set of standard libraries and design principles (gen_server, supervisor, application) bundled with Erlang. When someone says 'install Erlang,' they almost always mean 'install Erlang/OTP.'

If you also plan to use Elixir or rebar3, check their compatibility tables against your installed OTP major version before pinning a version — a rebar3 release built against OTP 24 may not load NIFs compiled for OTP 26, and mismatches like this are a common source of confusing build failures for beginners.

  • Erlang/OTP bundles the erl shell, erlc compiler, BEAM VM, and standard libraries in one distribution.
  • macOS users typically install via Homebrew ('brew install erlang'); Linux users via apt or kerl.
  • Windows users can use the official erlang.org installer or run Erlang inside WSL2 for a Linux-like workflow.
  • 'erl -version' or launching the 'erl' shell confirms a successful installation and shows the OTP release.
  • Version managers like kerl and asdf let you pin a specific OTP version per project.
  • OTP major version mismatches can break rebar3 builds and NIF compatibility, so pin versions deliberately.
  • OTP stands for Open Telecom Platform and refers to the full library/runtime bundle, not just the compiler.

Practice what you learned

Was this page helpful?

Topics covered

#Programming#ErlangStudyNotes#InstallingErlang#Installing#Erlang#MacOS#Linux#StudyNotes#SkillVeris#ExamPrep