Elixir (programming language)

Programming language running on the Erlang virtual machine


title: "Elixir (programming language)" type: doc version: 1 created: 2026-02-28 author: "Wikipedia contributors" status: active scope: public tags: ["concurrent-programming-languages", "functional-languages", "pattern-matching-programming-languages", "programming-languages", "programming-languages-created-in-2012", "software-using-the-apache-license", "brazilian-inventions"] description: "Programming language running on the Erlang virtual machine" topic_path: "technology/programming-languages" source: "https://en.wikipedia.org/wiki/Elixir_(programming_language)" license: "CC BY-SA 4.0" wikipedia_page_id: 0 wikipedia_revision_id: 0

::summary Programming language running on the Erlang virtual machine ::

::data[format=table title="Infobox programming language"]

FieldValue
nameElixir
logo[[File:Elixir programming language logo.svg
logo captionElixir
paradigmsmulti-paradigm: functional, concurrent, distributed, process-oriented
typingdynamic, strong
influencedGleam, LFE
platformErlang
licenseApache License 2.0
website
released
influenced_byClojure, Erlang, Ruby
designerJosé Valim
latest release version
latest release date
file_ext.ex, .exs
::

| name = Elixir | title = | logo = [[File:Elixir programming language logo.svg|frameless|170px|elixir programming language]] | logo caption = Elixir | paradigms = multi-paradigm: functional, concurrent, distributed, process-oriented | typing = dynamic, strong | influenced = Gleam, LFE | platform = Erlang | license = Apache License 2.0 | website = | released = | influenced_by = Clojure, Erlang, Ruby | designer = José Valim | latest release version = | latest release date = | latest preview version = | latest preview date = | file_ext = .ex, .exs

Elixir is a functional, concurrent, high-level general-purpose programming language that runs on the BEAM virtual machine, which is also used to implement the Erlang programming language. Elixir builds on top of Erlang and shares the same abstractions for building distributed, fault-tolerant applications. Elixir also provides tooling and an extensible design. The latter is supported by compile-time metaprogramming with macros and polymorphism via protocols.

The community organizes yearly events in the United States, Europe, and Japan, as well as minor local events and conferences.

History

José Valim created the Elixir programming language as a research and development project at Plataformatec. His goals were to enable higher extensibility and productivity in the Erlang VM while maintaining compatibility with Erlang's ecosystem.

Elixir is aimed at large-scale sites and apps. It uses features of Ruby, Erlang, and Clojure to develop a high-concurrency and low-latency language. It was designed to handle large data volumes. Elixir is also used in telecommunications, e-commerce, and finance.

In 2021, the Numerical Elixir effort was announced with the goal of bringing machine learning, neural networks, GPU compilation, data processing, and computational notebooks to the Elixir ecosystem.

Features

Examples

The following examples can be run in an iex shell or saved in a file and run from the command line by typing elixir **.

Classic Hello world example:

::code[lang=iex] iex> IO.puts("Hello World!") Hello World! ::

Pipe operator: ::code[lang=iex] iex> "Elixir" |> String.graphemes() |> Enum.frequencies() %{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}

iex> %{values: 1..5} |> Map.get(:values) |> Enum.map(& &1 * 2) [2, 4, 6, 8, 10]

iex> %{values: 1..5} |> Map.get(:values) |> Enum.map(& &1 * 2) |> Enum.sum() 30 ::

Pattern matching (a.k.a. destructuring): ::code[lang=iex] iex> %{left: x} = %{left: 5, right: 8} iex> x 5

iex> {:ok, [_ | rest]} = {:ok, [1, 2, 3]} iex> rest [2, 3] ::

Pattern matching with multiple clauses: ::code[lang=iex] iex> case File.read("path/to/file") do iex> {:ok, contents} -> IO.puts("found file: #{contents}") iex> {:error, reason} -> IO.puts("missing file: #{reason}") iex> end ::

List comprehension: ::code[lang=iex] iex> for n <- 1..5, rem(n, 2) == 1, do: n*n [1, 9, 25] ::

Asynchronously reading files with streams: ::code[lang=elixir] 1..5 |> Task.async_stream(&File.read!("#{&1}.txt")) |> Stream.filter(fn {:ok, contents} -> String.trim(contents) != "" end) |> Enum.join("\n") ::

Multiple function bodies with guards: ::code[lang=elixir] def fib(n) when n in [0, 1], do: n def fib(n), do: fib(n-2) + fib(n-1) ::

Relational databases with the Ecto library: ::code[lang=elixir] schema "weather" do field :city # Defaults to type :string field :temp_lo, :integer field :temp_hi, :integer field :prcp, :float, default: 0.0 end

Weather |> where(city: "Kraków") |> order_by(:temp_lo) |> limit(10) |> Repo.all ::

Sequentially spawning a thousand processes: ::code[lang=elixir] for num <- 1..1000, do: spawn fn -> IO.puts("#{num * 2}") end ::

Asynchronously performing a task: ::code[lang=elixir] task = Task.async fn -> perform_complex_action() end other_time_consuming_action() Task.await task {{cn|date=June 2023}} ::

References

References

  1. "elixir/LICENSE at master · elixir-lang/elixir · GitHub". GitHub.
  2. Valim, José. (25 May 2012). "Elixir v0.5.0 released".
  3. (23 November 2024). "Elixir's Evolution: History and Ecosystem".
  4. Woo, Jiahao. (15 January 2024). "The Story of Elixir".
  5. (2018-03-30). "Most Popular Programming Languages of 2018 - Elite Infoworld Blog".
  6. "Elixir".
  7. "ElixirConf".
  8. "ElixirConf".
  9. "Erlang & Elixir Fest".
  10. "Elixir LDN".
  11. "EMPEX - Empire State Elixir Conference".
  12. "Elixir - A modern approach to programming for the Erlang VM".
  13. "José Valim - ElixirConf EU 2017 Keynote".
  14. "Behinde the code: The One Who Created Elixir".
  15. "Numerical Elixir (Nx)".
  16. (24 September 2014). "Writing assertive code with Elixir".
  17. (12 May 2015). "Erlang and Elixir for Imperative Programmers". Leanpub.
  18. Wlaschin, Scott. (May 2013). "Railway Oriented Programming".

::callout[type=info title="Wikipedia Source"] This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page. ::

concurrent-programming-languagesfunctional-languagespattern-matching-programming-languagesprogramming-languagesprogramming-languages-created-in-2012software-using-the-apache-licensebrazilian-inventions