Fork me on GitHub
Learn More

Nitrogen brings interactive web applications to Erlang.

Event-Driven Development

Nitrogen uses an event-driven model built on top of Erlang pattern matching. Nitrogen allows you to tag elements with any Erlang term, and then act on the tag in server-side code when the user clicks on, hovers over, or otherwise interacts with the element. Handling the event is as simple as writing an Erlang function.

Browser-Based Testing

Nitrogen 2.3 introduces a dependency-free testing framework for validating your pages, postbacks, actions, and elements all work as expected. Create test cases that are instantiated server-side, execute something client-side (such as button presses), and validate the result server-side. View the documentation then check out the actual tests used by

Websockets Galore

Update or replace entire sections of your page asynchronously over websockets in a single line of code (with a clean fallback to ajax if Websockets are not supported by the proxy or client). Nitrogen lets you use the same consistent syntax to both build AND update the page. Nitrogen also includes support for long-running processes. By simply wrapping your long-running function call with a single line of code, you can turn a synchronous function into a long-running asynchronous function.

Javascript? What is it good for?

With Nitrogen's element construct, you rarely have to shift contexts from a server-side mentality (Erlang) to a client-side mentality (HTML, Javascript). Nitrogen applications can be built in pure Erlang and only rarely require hand-written Javascript or HTML (CSS, unfortunately, still needs to be written). Never shift contexts from client to server and back again.
Or put more succinctly, "Whereas Node.js brings the client-side to the server, Nitrogen brings the server-side to the client.".

Complex Interfaces: Drag/Drop/Sort

With Nitrogen, you can let a user interact with your application in complex ways. Nitrogen lets you tag the draggable, droppable, or sortable elements, and then respond to the resulting events in server-side code as easily as you would respond to a click.

Flexible Templating

Nitrogen includes a simple but powerful template system, allowing you to define a consistent style for your application. You can add headers, footers, and parameterized plugins to your page using a simple callout mechanism.

Data Binding

Nitrogen leverages the power of Erlang data structures and pattern matching to enable powerful one-way databinding. Data binding support makes it easy to display repeated documents like blog posts or comments.

Infinitely Extendible

With Nitrogen, you can create your own custom complex elements and actions, then package them up as Nitrogen Plugins, to easily include in other Nitrogen projects without having to copy-and-paste, or share them with the world.

Erlang Power

Nitrogen brings all of the advantages of Erlang to web application development, including hot code swapping, stability, and scalability.

Technology Stack

Mac, Linux, Windows, FreeBSD, Raspberry Pi etc.

Any platform that can run Erlang can also run Nitrogen, including Mac, Linux, Unix, and Windows (among others). Nitrogen does not contain any platform specific code.

Mochiweb, Yaws, Cowboy, Webmachine, or Inets for Serving

Nitrogen supports some of the most popular Erlang web servers equally: Mochiweb, Yaws, Cowboy, Webmachine, and Inets. Nitrogen abstracts out the server specific code, meaning that you write your application on one http server and seamlessly transfer to a different http server without changing a thing.

JQuery/JQuery UI/JQuery Mobile for Javascript and Effects

Nitrogen uses JQuery and the JQuery UI library for client side Javascript and the JQuery Mobile library for mobile development.


Nitrogen documentation is available for browsing online. It is also included in the source code under /doc/html, and is packaged in all binary downloads.

Read What's New in Nitrogen 2.x »

About Nitrogen

Nitrogen was created in 2008 by Rusty Klophaus (@rustyio). In June 2011, Jesse Gumm (@jessegumm) took over as project lead. It is in active development and is available for use under the MIT License.

Twitter: @nitrogenproject

Official Maintainers


Thanks to the many people who have helped make Nitrogen better, including:

  • Chris Williams (@voodootikigod)
  • Joel Reymond (@wagerlabs)
  • Tom McNulty
  • Martin Scholl (@zeit_geist)
  • Dave Peticolas
  • Jon Gretar Borgthorsson (@jongregar)
  • Dan Bravender (@dbravender)
  • Taavi Talvik
  • Torbjorn Tornkvist (@kruskakli)
  • Marius A. Eriksen (@marius)
  • Michael Mullis
  • John Dragos
  • Benjamin Nortier (@bjnortier)
  • Jay Doane
  • Robert Schonberger
  • Yurii Rashkovskii (@yrashk)
  • Ville Koivula
  • Manuel Duran Aguete
  • Jan-Felix Wittmann
  • Martin Sivak
  • Mattias Holmlund
  • Loïc Hoguin (@lhoguin)
  • Justin Kirby
  • Lorant Kurthy
  • Jonas Ådahl
  • Susan Potter (@susanpotter)
  • Rado Kozmer (@rkozmer)
  • Tuncer Ayaz
  • Steffan Panning
  • James Pharaoh
  • Sergei Lebedev
  • Milan Svoboda
  • Jenő I. Hajdu
  • Maxim Sokhatsky (@5HT)
  • Roman Shestakov (@rshestakov)
  • Witeman Zheng
  • Chan Sisowath
  • Florent Gallaire
  • Dmitriy Kargapolov
  • Andrii Zadorozhnii
  • Evan Miller (@evmill)
  • Alice Blitter Copper
  • Petr Kozorezov
  • Nikolay Garanko
  • Paul Khusainov
  • David N. Welton (@davidnwelton)
  • Tobias Herre
  • Josh Pyle
  • Niclas Axelsson
  • Evgeny M.
  • Boris Resnick
  • Piotr Nosek
  • Stefan Zegenhagen
  • Mehmet Emin Tok
  • Stuart Thackray
  • Amos Oviedo (@fooflare)
  • Alex Popov (@seidlitz)
  • Aaron Frantisak
  • Lloyd R. Prentice
  • Cameron Frederick (@cammcad)
  • Xue Hongwei
  • Steve Vinoski (@stevevinoski)
Copyright © 2008-2015 Nitrogen Web Framework. Released under the MIT License.