Elixir is a functional, concurrent programming language built for applications that have to stay up. Created by José Valim and first released in 2012, it runs on the Erlang virtual machine — the BEAM — so it inherits more than three decades of Erlang’s work on fault tolerance, distribution and soft real-time performance, while adding a friendlier syntax and a modern toolchain. Data is immutable, processes are cheap, and failures are handled by isolating them in supervision trees instead of guarding every call by hand. Elixir is licensed under Apache-2.0, and the current release is 1.20.
Elixir’s argument is the platform underneath it. Erlang was designed for telephone switches that could not go down, and the BEAM gives every application lightweight processes, preemptive scheduling, supervision trees and the ability to hot-swap code — properties that most runtimes still only approximate. Elixir makes that platform pleasant to use: a syntax closer to Ruby, pattern matching with immutable data, a package manager, a test framework and documentation tooling that work out of the box. The result is a language where a single server can hold hundreds of thousands of concurrent connections without a thread pool to tune, a failing component restarts instead of taking the system down, and deployments scale by adding nodes rather than re-architecting. The trade-offs are real: the functional style and OTP’s process model take deliberate learning, and the ecosystem, though healthy, is smaller than Python’s or JavaScript’s — teams that need a giant library catalogue for data science or desktop GUIs are usually better served elsewhere.
Install Erlang/OTP and Elixir together — the distribution packages (sudo apt install elixir on Debian and Ubuntu, brew install elixir on macOS) handle both, and Windows has an official installer. Check the pair with elixir -v, then start the interactive shell with iex, where expressions are evaluated as you type. Create a project with mix new demo and run its tests with mix test; add dependencies in mix.exs and fetch them with mix deps.get. The official guides at elixir-lang.org cover the language and OTP in order, and iex -S mix starts a shell inside a project so you can call your own modules while it runs.