Elixir is a dynamic, functional language that runs on BEAM, the virtual machine built for Erlang. Its creator, Brazilian developer José Valim, started the project in 2011 while working at Plataformatec, and Elixir first appeared publicly in 2012. To understand why José Valim created Elixir on the Erlang VM, you need to know that he was a member of the Ruby on Rails core team and had spent a lot of time fighting thread-safety problems in Ruby as machines gained more and more CPU cores.
Why José Valim created Elixir on the Erlang VM
Valim wanted a language that made concurrency natural rather than dangerous. Erlang, created at Ericsson in the 1980s, already solved that problem: lightweight isolated processes, message passing, supervision trees and decades of production use in telecom systems built for very high uptime. What Erlang lacked, in his view, was productivity tooling, metaprogramming and a syntax that newcomers found approachable.
Instead of building a new runtime, he built a new language on top of an excellent one. Elixir compiles to BEAM bytecode, calls Erlang libraries with no overhead and inherits the OTP framework. It adds a Ruby-flavored syntax, hygienic macros, protocols for polymorphism (an idea influenced by Clojure), and first-class tooling such as the mix build tool and the hex package manager. Elixir 1.0 was released in September 2014.
Design and key features
- Immutable data and pattern matching everywhere, including function heads.
- Processes that cost a few kilobytes each, so a single node can run millions of them.
- Supervisors that restart failed processes, the "let it crash" approach from Erlang.
- The pipe operator
|>, which makes data transformations read top to bottom. - Built-in documentation, testing (ExUnit) and an interactive shell (IEx).
A short Elixir example
This snippet spawns a process that waits for a message and replies, the basic building block of BEAM concurrency:
defmodule Greeter do
def start do
spawn(fn -> loop() end)
end
defp loop do
receive do
{:hello, from, name} ->
send(from, {:reply, "Hello, #{name}!"})
loop()
end
end
end
pid = Greeter.start()
send(pid, {:hello, self(), "BEAM"})
receive do
{:reply, msg} -> IO.puts(msg)
end
Where Elixir is used
The Phoenix web framework, created by Chris McCord, is Elixir's flagship project. Its LiveView library lets developers build interactive, real-time interfaces with server-rendered HTML over WebSockets and little or no custom JavaScript, an approach that inspired similar tools in other ecosystems. Discord is the most cited production user, having used Elixir for its real-time messaging infrastructure from early on. Pinterest, Bleacher Report and many fintech and IoT companies have also run Elixir in production.
The ecosystem has spread beyond web apps. Nerves targets embedded devices, Nx (Numerical Elixir, started in 2021) brings tensor computation and machine learning, and Livebook offers interactive notebooks. After Plataformatec was acquired by Nubank, Valim co-founded Dashbit in 2020 to keep working on the language and its tooling.
Milestones
| Year | Milestone |
|---|---|
| 2012 | First public release of Elixir |
| 2014 | Elixir 1.0 and the first Phoenix releases |
| 2019 | Phoenix LiveView announced |
| 2021 | Nx and Livebook introduced |
| 2023 onward | Research-backed gradual type system starts landing in the compiler |
Limitations
Elixir is dynamically typed, so some errors only show up at run time. The core team is addressing this with a set-theoretic gradual type system developed with researchers, rolled out incrementally so existing code keeps working, but it is still being completed. BEAM is also not designed for raw number crunching; CPU-heavy work is usually pushed to native code or to Nx backends. And the job market, while loyal and well paid, is much smaller than for JavaScript, Python or Java.
Should you learn Elixir?
If you build systems with lots of concurrent connections, such as chat, notifications, dashboards or IoT back ends, Elixir is one of the most productive tools available. It is also a friendly way into functional programming. Knowing why José Valim created Elixir on the Erlang VM sums up its appeal: you get Erlang's proven fault tolerance with modern tooling and a syntax that is pleasant to write every day.
Frequently asked questions
Is Elixir the same as Erlang?
No. Elixir is a separate language with its own syntax, macros and tooling, but it compiles to the same BEAM bytecode as Erlang. The two can call each other's code directly and share the OTP libraries.
Is Elixir related to Ruby?
Elixir borrows some of Ruby's syntax and developer-friendly culture, since its creator came from the Rails core team. Underneath, it is a functional language with immutable data and works very differently from Ruby.
Does Elixir have static types?
Not in the traditional sense. Elixir is dynamically typed, but recent versions are gradually adding a set-theoretic type system that can catch type errors at compile time without requiring annotations everywhere.







