← History

LFE 2008

A homoiconic Lisp-2 with parentheses, macros, and the full power of the BEAM behind every form.

Paradigmsfunctional, concurrent, metaprogramming, message-passing, fault-tolerant
Typingdynamic, strong
Extensions.lfe
Created byRobert Virding

Influenced by: Erlang Elixir common lisp scheme maclisp clojure

LFE (Lisp Flavoured Erlang) is a Lisp dialect that compiles to Core Erlang and runs on the BEAM, giving Lisp's S-expression syntax and Common Lisp-style (unhygienic) macros first-class access to Erlang/OTP. It is a proper Lisp-2+ - separate namespaces for functions and values - that is homoiconic and dynamically, strongly typed, so code is data and metaprogramming is the native idiom. Because it emits 100% Erlang-compatible code, LFE modules call Erlang and OTP with zero penalty and can be mixed freely with Erlang and Elixir in the same release.

What makes it distinctive

History

LFE was created by Robert Virding, one of the three original co-inventors of Erlang at the Ericsson Computer Science Laboratory and a contributor to much of the early standard library and the compiler. A long-time Lisp programmer, Virding set out to build a Lisp that was designed specifically for the BEAM and could interoperate fully with Erlang/OTP rather than being a Lisp bolted on top of it. Early experiments in 2007 were mostly about parsing and implementing a Lisp on the VM and served as a preamble to the real project.

Virding announced the first public release of LFE on the erlang-questions mailing list in March 2008, with development done against Erlang/OTP release R12B-0. That first cut was deliberately limited: it did not yet handle recursive letrec, binaries, receive, or try, and there was no Lisp shell - it was a Lisp syntax front-end to the Erlang compiler more than a complete environment.

Over the following years LFE matured into a self-hosted, feature-complete language with a real REPL that - unlike the standard Erlang shell - can define functions and macros interactively. After roughly eight years of development, LFE reached its milestone 1.0 release in March 2016, an event widely noted in the community (covered by InfoQ that April). The 1.0 line cemented LFE as a stable, production-grade Lisp on the BEAM; the project notes it had been used in stable production applications since 2015.

Development has continued steadily since. The 2.x series modernised the toolchain around rebar3 and hex.pm packaging and refined the macro system and shell. Notable later releases include 2.1.x (2023) and 2.2.0 (January 2025). Throughout, LFE has remained closely tied to Erlang itself: because it compiles to Core Erlang, advances in the Erlang compiler and OTP flow through to LFE, and LFE code coexists seamlessly with vanilla Erlang and, by extension, the wider BEAM ecosystem including Elixir.

Resources

See it in Code Compare →