Packages

Extract the content from an HTML document to Markdown (removing non-content sections and tags)

Current section

Files

Jump to
html2markdown test support fixtures elixir_wikipedia.md
Raw

test/support/fixtures/elixir_wikipedia.md

[Jump to content](#bodyContent)
[![](/static/images/icons/wikipedia.png)![Wikipedia](/static/images/mobile/copyright/wikipedia-wordmark-en.svg)![The Free Encyclopedia](/static/images/mobile/copyright/wikipedia-tagline-en.svg)](/wiki/Main_Page) [Search](/wiki/Special:Search)
# Elixir (programming language) 28 languages From Wikipedia, the free encyclopedia
Programming language running on the Erlang virtual machine
| [![](//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/60px-Question_book-new.svg.png)](/wiki/File:Question_book-new.svg) | This article
**relies excessively on [references](/wiki/Wikipedia:Verifiability) to [primary sources](/wiki/Wikipedia:No_original_research#Primary,_secondary_and_tertiary_sources)**
.
Please improve this article by adding [secondary or tertiary sources](/wiki/Wikipedia:No_original_research#Primary,_secondary_and_tertiary_sources).
*Find sources:* ["Elixir" programming language](https://www.google.com/search?as_eq=wikipedia&q=%22Elixir%22+programming+language)[news](https://www.google.com/search?tbm=nws&q=%22Elixir%22+programming+language+-wikipedia&tbs=ar:1) **·** [newspapers](https://www.google.com/search?&q=%22Elixir%22+programming+language&tbs=bkt:s&tbm=bks) **·** [books](https://www.google.com/search?tbs=bks:1&q=%22Elixir%22+programming+language+-wikipedia) **·** [scholar](https://scholar.google.com/scholar?q=%22Elixir%22+programming+language) **·** [JSTOR](https://www.jstor.org/action/doBasicSearch?Query=%22Elixir%22+programming+language&acc=on&wc=on)
*( June 2023)*
*( [Learn how and when to remove this message](/wiki/Help:Maintenance_template_removal))* |
| Elixir | Elixir |
| --- | --- |
| [![elixir programming language](//upload.wikimedia.org/wikipedia/en/thumb/b/b9/Elixir_programming_language_logo.svg/250px-Elixir_programming_language_logo.svg.png)](/wiki/File:Elixir_programming_language_logo.svg) Elixir | [![elixir programming language](//upload.wikimedia.org/wikipedia/en/thumb/b/b9/Elixir_programming_language_logo.svg/250px-Elixir_programming_language_logo.svg.png)](/wiki/File:Elixir_programming_language_logo.svg) Elixir |
| [Paradigms](/wiki/Programming_paradigm) | [multi-paradigm](/wiki/Multi-paradigm_programming_language): [functional](/wiki/Functional_programming), [concurrent](/wiki/Concurrent_programming), [distributed](/wiki/Distributed_programming), [process-oriented](/wiki/Process-oriented_programming) |
| [Designed by](/wiki/Software_design) | José Valim |
| First appeared | 2012; 13 years ago ( 2012) |
| | |
| [Stable release](/wiki/Software_release_life_cycle) | 1.18.4
<sup>[[ 1 ]](#cite_note-wikidata-38d73dbc67fe379aec44b4c951a0b1d72113a0cd-v18-1)</sup>
[![Edit this on Wikidata](//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png)](https://www.wikidata.org/wiki/Q5362035?uselang=en#P348)
/ 21 May 2025
; 59 days ago
( 21 May 2025) |
| | |
| [Typing discipline](/wiki/Type_system) | [dynamic](/wiki/Type_system), [strong](/wiki/Strong_typing) |
| [Platform](/wiki/Computing_platform) | [Erlang](/wiki/Erlang_(programming_language)) |
| [License](/wiki/Software_license) | [Apache License 2.0](/wiki/Apache_License_2.0) <sup>[[ 2 ]](#cite_note-2)</sup> |
| [Filename extensions](/wiki/Filename_extension) | .ex, .exs |
| Website | [elixir-lang.org](https://elixir-lang.org) |
| Influenced by | Influenced by |
| [Clojure](/wiki/Clojure), [Erlang](/wiki/Erlang_(programming_language)), [Ruby](/wiki/Ruby_(programming_language)) | [Clojure](/wiki/Clojure), [Erlang](/wiki/Erlang_(programming_language)), [Ruby](/wiki/Ruby_(programming_language)) |
| Influenced | Influenced |
| [Gleam](/wiki/Gleam_(programming_language)), [LFE](/wiki/LFE_(programming_language)) | [Gleam](/wiki/Gleam_(programming_language)), [LFE](/wiki/LFE_(programming_language)) |
**Elixir** is a [functional](/wiki/Functional_programming), [concurrent](/wiki/Concurrent_computing), [high-level](/wiki/High-level_programming_language) [general-purpose](/wiki/General-purpose_programming_language) [programming language](/wiki/Programming_language) that runs on the [BEAM](/wiki/BEAM_(Erlang_virtual_machine)) [virtual machine](/wiki/Virtual_machine), which is also used to implement the [Erlang](/wiki/Erlang_(programming_language)) programming language. <sup>[[ 3 ]](#cite_note-:0-3)</sup> Elixir builds on top of Erlang and shares the same abstractions for building [distributed](/wiki/Distributed_computing), [fault-tolerant](/wiki/Fault-tolerant) applications. Elixir also provides tooling and an [extensible](/wiki/Extensible) design. The latter is supported by compile-time [metaprogramming](/wiki/Metaprogramming) with [macros](/wiki/Macro_(computer_science)) and [polymorphism](/wiki/Polymorphism_(computer_science)) via protocols. <sup>[[ 4 ]](#cite_note-4)</sup>
The community organizes yearly events in the United States, <sup>[[ 5 ]](#cite_note-5)</sup> Europe, <sup>[[ 6 ]](#cite_note-6)</sup> and Japan, <sup>[[ 7 ]](#cite_note-7)</sup> as well as minor local events and conferences. <sup>[[ 8 ]](#cite_note-8)</sup> <sup>[[ 9 ]](#cite_note-9)</sup>
## History
[ [edit](/w/index.php?title=Elixir_(programming_language)&action=edit&section=1) ]
José Valim created the Elixir programming language as a [research and development](/wiki/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. <sup>[[ 10 ]](#cite_note-10)</sup> <sup>[[ 11 ]](#cite_note-11)</sup>
Elixir is aimed at large-scale sites and apps. It uses features of [Ruby](/wiki/Ruby_(programming_language)), Erlang, and [Clojure](/wiki/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. <sup>[[ 12 ]](#cite_note-12)</sup>
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. <sup>[[ 13 ]](#cite_note-13)</sup>
## Versioning
[ [edit](/w/index.php?title=Elixir_(programming_language)&action=edit&section=2) ]
Each of the minor versions supports a specific range of Erlang/ [OTP](/wiki/Open_Telecom_Platform) versions. <sup>[[ 14 ]](#cite_note-14)</sup> The current stable release version is 1.18.4 <sup>[[ 1 ]](#cite_note-wikidata-38d73dbc67fe379aec44b4c951a0b1d72113a0cd-v18-1)</sup> [![Edit this on Wikidata](//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png)](https://www.wikidata.org/wiki/Q5362035?uselang=en#P348).
## Features
[ [edit](/w/index.php?title=Elixir_(programming_language)&action=edit&section=3) ]
- [Compiles](/wiki/Compiler) to [bytecode](/wiki/Bytecode) for the [BEAM virtual machine](/wiki/BEAM_(Erlang_virtual_machine)) of [Erlang](/wiki/Erlang_(programming_language)). <sup>[[ 15 ]](#cite_note-elixirhome-15)</sup> Full interoperability with Erlang code, without [runtime](/wiki/Runtime_(program_lifecycle_phase)) impact.
- Scalability and fault-tolerance, thanks to Erlang's lightweight concurrency mechanisms <sup>[[ 15 ]](#cite_note-elixirhome-15)</sup>
- [Built-in tooling](/wiki/Mix_(build_tool)) for managing dependencies, code compilation, running tests, formatting code, remote debugging and more.
- An interactive [REPL](/wiki/Read%E2%80%93eval%E2%80%93print_loop) inside running programs, including [Phoenix](/wiki/Phoenix_(web_framework)) web servers, with code reloading and access to internal state
- Everything is an [expression](/wiki/Expression_(computer_science)) <sup>[[ 15 ]](#cite_note-elixirhome-15)</sup>
- [Pattern matching](/wiki/Pattern_matching) <sup>[[ 15 ]](#cite_note-elixirhome-15)</sup> to promote assertive code <sup>[[ 16 ]](#cite_note-16)</sup>
- Type hints for static analysis tools
- Immutable data, with an emphasis, like other [functional](/wiki/Functional_programming) languages, on [recursion](/wiki/Recursion_(computer_science)) and [higher-order functions](/wiki/Higher-order_function) instead of [side-effect](/wiki/Side-effect_(computer_science)) -based [looping](/wiki/Loop_(computing))
- [Shared nothing concurrent programming](/wiki/Shared_nothing_architecture) via message passing ( [actor model](/wiki/Actor_model)) <sup>[[ 17 ]](#cite_note-17)</sup>
- [Lazy](/wiki/Lazy_evaluation) and [async collections](/wiki/Futures_and_promises) with streams
- Railway oriented programming via the `with` construct <sup>[[ 18 ]](#cite_note-18)</sup>
- Hygienic [metaprogramming](/wiki/Metaprogramming) by direct access to the [abstract syntax tree](/wiki/Abstract_syntax_tree) (AST). <sup>[[ 15 ]](#cite_note-elixirhome-15)</sup> Libraries often implement small [domain-specific languages](/wiki/Domain-specific_language), such as for databases or testing.
- Code execution at compile time. The Elixir compiler also runs on the BEAM, so modules that are being compiled can immediately run code which has already been compiled.
- [Polymorphism](/wiki/Polymorphism_(computer_science)) via a mechanism called protocols. [Dynamic dispatch](/wiki/Dynamic_dispatch), as in [Clojure](/wiki/Clojure), however, without [multiple dispatch](/wiki/Multiple_dispatch) because Elixir protocols dispatch on a single type.
- Support for documentation via Python-like docstrings in the [Markdown](/wiki/Markdown) formatting language <sup>[[ 15 ]](#cite_note-elixirhome-15)</sup>
- [Unicode](/wiki/Unicode) support and [UTF-8](/wiki/UTF-8) strings
## Examples
[ [edit](/w/index.php?title=Elixir_(programming_language)&action=edit&section=4) ]
The following examples can be run in an `iex` [shell](/wiki/Shell_(computing)) or saved in a file and run from the [command line](/wiki/Command_line) by typing `elixir *<filename>*`.
Classic [Hello world](/wiki/%22Hello,_World!%22_program) example:
```
iex> IO.puts("Hello World!")Hello World!
```
Pipe operator:
```
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](/wiki/Pattern_matching) (a.k.a. destructuring):
```
iex> %{left: x} = %{left: 5, right: 8}iex> x5iex> {:ok, [_ | rest]} = {:ok, [1, 2, 3]}iex> rest[2, 3]
```
Pattern matching with multiple clauses:
```
iex> case File.read("path/to/file") doiex> {:ok, contents} -> IO.puts("found file: #{contents}")iex> {:error, reason} -> IO.puts("missing file: #{reason}")iex> end
```
[List comprehension](/wiki/List_comprehension):
```
iex> for n <- 1..5, rem(n, 2) == 1, do: n*n[1, 9, 25]
```
Asynchronously reading files with streams:
```
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](/wiki/Guard_(computer_science)#Mathematics):
```
def fib(n) when n in [0, 1], do: ndef fib(n), do: fib(n-2) + fib(n-1)
```
Relational databases with the Ecto library:
```
schema "weather" do field :city # Defaults to type :string field :temp_lo, :integer field :temp_hi, :integer field :prcp, :float, default: 0.0endWeather |> where(city: "Kraków") |> order_by(:temp_lo) |> limit(10) |> Repo.all
```
Sequentially spawning a thousand processes:
```
for num <- 1..1000, do: spawn fn -> IO.puts("#{num * 2}") end
```
[Asynchronously](/wiki/Async/await) performing a task:
```
task = Task.async fn -> perform_complex_action() endother_time_consuming_action()Task.await task
```
<sup>[ *[citation needed](/wiki/Wikipedia:Citation_needed)* ]</sup>
## See also
[ [edit](/w/index.php?title=Elixir_(programming_language)&action=edit&section=5) ]
- ![](//upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/40px-Free_and_open-source_software_logo_%282009%29.svg.png) [Free and open-source software portal](/wiki/Portal:Free_and_open-source_software)
- [Concurrent computing](/wiki/Concurrent_computing)
- [Distributed computing](/wiki/Distributed_computing)
- [Parallel computing](/wiki/Parallel_computing)
## References
[ [edit](/w/index.php?title=Elixir_(programming_language)&action=edit&section=6) ]
1. ^ [<sup>***a***</sup>](#cite_ref-wikidata-38d73dbc67fe379aec44b4c951a0b1d72113a0cd-v18_1-0) [<sup>***b***</sup>](#cite_ref-wikidata-38d73dbc67fe379aec44b4c951a0b1d72113a0cd-v18_1-1) *["Release 1.18.4"](https://github.com/elixir-lang/elixir/releases/tag/v1.18.4). 21 May 2025. Retrieved 25 May 2025.*
2. **[^](#cite_ref-2)** *["elixir/LICENSE at master · elixir-lang/elixir · GitHub"](https://github.com/elixir-lang/elixir/blob/master/LICENSE). *GitHub*.*
3. **[^](#cite_ref-:0_3-0)** *["Most Popular Programming Languages of 2018 - Elite Infoworld Blog"](https://web.archive.org/web/20180509080342/https://www.eliteinfoworld.com/blog/popular-programming-languages-2018/). 2018-03-30. Archived from [the original](https://www.eliteinfoworld.com/blog/popular-programming-languages-2018/) on 2018-05-09. Retrieved 2018-05-08.*
4. **[^](#cite_ref-4)** *["Elixir"](https://elixir-lang.org). *José Valim*. Retrieved 2013-02-17.*
5. **[^](#cite_ref-5)** *["ElixirConf"](http://elixirconf.com/). Retrieved 2018-07-11.*
6. **[^](#cite_ref-6)** *["ElixirConf"](http://elixirconf.eu/). Retrieved 2018-07-11.*
7. **[^](#cite_ref-7)** *["Erlang & Elixir Fest"](https://elixir-fest.jp/). Retrieved 2019-02-18.*
8. **[^](#cite_ref-8)** *["Elixir LDN"](http://www.elixir.london/). Retrieved 2018-07-12.*
9. **[^](#cite_ref-9)** *["EMPEX - Empire State Elixir Conference"](http://empex.co/). Retrieved 2018-07-12.*
10. **[^](#cite_ref-10)** *[*Elixir - A modern approach to programming for the Erlang VM*](https://vimeo.com/53221562). Retrieved 2013-02-17.*
11. **[^](#cite_ref-11)** *[*José Valim - ElixirConf EU 2017 Keynote*](https://www.youtube.com/watch?v=IZvpKhA6t8A). [Archived](https://ghostarchive.org/varchive/youtube/20211117/IZvpKhA6t8A) from the original on 2021-11-17. Retrieved 2017-07-14.*
12. **[^](#cite_ref-12)** *["Behinde the code: The One Who Created Elixir"](https://www.welcometothejungle.com/en/articles/btc-elixir-jose-valim/). Retrieved 2019-11-25.*
13. **[^](#cite_ref-13)** *["Numerical Elixir (Nx)"](https://github.com/elixir-nx). *[GitHub](/wiki/GitHub)*. Retrieved 2024-05-06.*
14. **[^](#cite_ref-14)** *[*Elixir is a dynamic, functional language designed for building scalable and maintainable applications: elixir-lang/elixir*](https://github.com/elixir-lang/elixir), Elixir, 2019-04-21, retrieved 2019-04-21*
15. ^ [<sup>***a***</sup>](#cite_ref-elixirhome_15-0) [<sup>***b***</sup>](#cite_ref-elixirhome_15-1) [<sup>***c***</sup>](#cite_ref-elixirhome_15-2) [<sup>***d***</sup>](#cite_ref-elixirhome_15-3) [<sup>***e***</sup>](#cite_ref-elixirhome_15-4) [<sup>***f***</sup>](#cite_ref-elixirhome_15-5) *["Elixir"](https://elixir-lang.org/). Retrieved 2014-09-07.*
16. **[^](#cite_ref-16)** *["Writing assertive code with Elixir"](http://blog.plataformatec.com.br/2014/09/writing-assertive-code-with-elixir/). 24 September 2014. Retrieved 2018-07-05.*
17. **[^](#cite_ref-17)** *Loder, Wolfgang (12 May 2015). [*Erlang and Elixir for Imperative Programmers*](https://leanpub.com/erlangandelixirforimperativeprogrammers). "Chapter 16: Code Structuring Concepts", section title "Actor Model": Leanpub. Retrieved 7 July 2015.* `{{[cite book](/wiki/Template:Cite_book)}}`: CS1 maint: location ( [link](/wiki/Category:CS1_maint:_location))
18. **[^](#cite_ref-18)** *Wlaschin, Scott (May 2013). ["Railway Oriented Programming"](https://fsharpforfunandprofit.com/rop/). *F# for Fun and Profit*. [Archived](https://web.archive.org/web/20210130221804/http://fsharpforfunandprofit.com/rop/) from the original on 30 January 2021. Retrieved 28 February 2021.*
## Further reading
[ [edit](/w/index.php?title=Elixir_(programming_language)&action=edit&section=7) ]
- *Simon St. Laurent; J. Eisenberg (December 22, 2016). *Introducing Elixir: Getting Started in Functional Programming 2nd Edition*. [O'Reilly Media](/wiki/O%27Reilly_Media). [ISBN](/wiki/ISBN_(identifier)) [978-1491956779](/wiki/Special:BookSources/978-1491956779).*
- *Sasa Juric (January 12, 2019). *Elixir in Action 2nd Edition*. [Manning Publications](/wiki/Manning_Publications). [ISBN](/wiki/ISBN_(identifier)) [978-1617295027](/wiki/Special:BookSources/978-1617295027).*
[Categories](/wiki/Help:Category)
:
- [Concurrent programming languages](/wiki/Category:Concurrent_programming_languages)
- [Functional languages](/wiki/Category:Functional_languages)
- [Pattern matching programming languages](/wiki/Category:Pattern_matching_programming_languages)
- [Programming languages](/wiki/Category:Programming_languages)
- [Programming languages created in 2012](/wiki/Category:Programming_languages_created_in_2012)
- [Software using the Apache license](/wiki/Category:Software_using_the_Apache_license)
Hidden categories:
- [CS1 maint: location](/wiki/Category:CS1_maint:_location)
- [Articles with short description](/wiki/Category:Articles_with_short_description)
- [Short description is different from Wikidata](/wiki/Category:Short_description_is_different_from_Wikidata)
- [Articles lacking reliable references from June 2023](/wiki/Category:Articles_lacking_reliable_references_from_June_2023)
- [All articles lacking reliable references](/wiki/Category:All_articles_lacking_reliable_references)
- [All articles with unsourced statements](/wiki/Category:All_articles_with_unsourced_statements)
- [Articles with unsourced statements from June 2023](/wiki/Category:Articles_with_unsourced_statements_from_June_2023)
Elixir (programming language)
[#](#)
[#](#)
[#](#)
[#](#)
[#](#)
[#](#)
[#](#)
[Add topic](#)