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.
# 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
1. What does 'installing Erlang' actually install in practice?
2. Which command is the standard quick-install method for Erlang on macOS?
3. What is kerl primarily used for?
4. How can you confirm your Erlang installation succeeded without entering the interactive shell?
5. Why might mismatched OTP versions cause build problems with rebar3?
Was this page helpful?
You May Also Like
What Is Erlang?
An introduction to Erlang's origins, design philosophy, and the concurrent, fault-tolerant systems it was built to run.
Your First Erlang Program
Writing, compiling, and running a real Erlang module, from module declaration and exports through the shell workflow.
Atoms and Terms
Understanding Erlang's atom data type and how atoms, numbers, tuples, and lists combine to form Erlang terms.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics