A delightful functional language for reliable webapps.

Elm is a functional language that compiles to JavaScript. It competes with projects like React as a tool for creating websites and web apps. Elm has a very strong emphasis on simplicity, ease-of-use, and quality tooling.

The overall goal is to combine:

  • A devotion to communication, design, and user experience.
  • Strong theoretical foundations.

Examples of these goals in practice include the following.

No Runtime Exceptions

Unlike hand-written JavaScript, Elm code does not produce runtime exceptions in practice. Instead, Elm uses type inference to detect problems during compilation and give friendly hints. This way problems never make it to your users. NoRedInk has 90k+ lines of Elm, and after more than a year in production, it still has not produced a single runtime exception.

Great Performance

Elm has its own virtual DOM implementation, designed for simplicity and speed. All values are immutable in Elm, and the benchmarks show that this helps us generate particularly fast JavaScript code.

Enforced Semantic Versioning

Elm can detect all API changes automatically thanks to its type system. We use that information to force everything in our package catalog to follow semantic versioning precisely. No more surprises in PATCH releases!

lightbulb_outline View ideas list


  • elm
  • javascript
  • haskell


comment IRC Channel
email Mailing list
mail_outline Contact email

Elm Software Foundation 2017 Projects

  • Palmer Paul
    Elm for iOS
    Elm is a programming language for creating browser-based web apps. Elm for iOS (a.k.a. Elm Mobile) aims to bring the benefits of the Elm programming...