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 introduced 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 NitrogenProject.com.
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.".
Built-In Caching
Use Nitrogen's Cache Handler to locally cache pages or parts of pages to
'turbo-ize' your pages. Uses
NitroCache by default, but as with all Nitrogen's handlers, you can write your own
cache handler to tap into Mnesia, Redis, Memcached, or any other cache system
you want
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. With Pandoc, make templates from non-HTML sources as well.
That includes Markdown, LaTeX, RTF, PDF, and more!
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. JQuery Mobile is included for now, but is deprecated and will
be removed.