We are thrilled to announce Nerves v1.0 is finally out. This has been 4219 commits by 102 contributors since the initial commit on October 29th, 2013! This would not have been possible without our corporate sponsors and individual backers.

What’s Nerves?

Nerves is tooling and core runtime support for creating bulletproof embedded software running on the Erlang VM. The Erlang VM is known for its support for fault-tolerance, concurrency, and low-latency that has been proven out over the past two decades.

Nerves leverages the Elixir programming language and its tooling to bring a dynamic, functional approach to building maintainable embedded applications. Elixir’s Hex package manager extends this reach to a broad and growing selection of Erlang and Elixir libraries that run on embedded systems.

Nerves additionally uses Buildroot to access libraries and applications from the embedded Linux ecosystem for functionality lacking or impractical to move to Elixir or Erlang. Many of these applications can even be integrated into the same fault-tolerance abstractions used natively in Elixir.

Nerves has been ported to a variety of processors and boards. The Nerves v1.0 release includes official support for easily-obtained platforms like the Raspberry Pi, Beaglebone and Lego EV3.

What’s new?

This release is the consolidation of all the work done through the years. With v1.0, we have reached a stable milestone for the growth of software and projects using Nerves.

Nerves v1.0 consists of the following projects:

nerves - Nerves integration with Elixir’s build tool, Mix.

nerves_bootstrap - New project generation and bootstrap integration with mix

nerves_runtime - Small, general-purpose libraries and utilities for all Nerves devices

erlinit - Replacement for /sbin/init that launches an Erlang/OTP Release

that launches an Erlang/OTP Release nerves_system_br - Buildroot integration for building embedded Linux components

nerves_system_* - Official ports to boards and devices

toolchains - C/C++ cross-toolchains for ARM, MIPS, i586, and x86_64-based devices

Nerves tooling and core runtime libraries will follow semantic versioning.

Nerves hardware ports, called Nerves Systems, follow Buildroot releases. Nerves also provides toolchains for Elixir projects that contain C and C++. Both Nerves Systems and Toolchains aggregate many programs and libraries and therefore don’t follow semantic versioning. We will attempt to flag significant updates in the change notes and link to Buildroot release notes to aid industrial users who track constituent software packages closely.

With v1.0, we are providing a stable platform for the community to leverage and extend, and we are extremely excited with the projects and possibilities that are ahead of us!

Expectations

We would like to elaborate on the expectations regarding Nerves v1.0. The Nerves Project hosts many projects that are useful in building embedded systems and we have put significant thought into how many of those should be part of the 1.0 release. While pre-1.0 projects have not stopped people from using Nerves and shipping Nerves-based devices over the past few years, we understand that transitioning projects to 1.0 can provide confidence in the stability of API and tooling. The projects chosen for 1.0 are those that have remained stable for a long time and those that we are unlikely to break backwards compatibility going forward.

Learn more

You can get started with Nerves via our Getting Started guide. While most boards that are capable of running Linux can run Nerves, we recommend starting with Raspberry Pi or Beaglebone hardware.

You can also learn more about Nerves by checking out

We’re really looking forward to hearing from people using Nerves and we want all of you to be successful. If you need help or just want to share something you made, let us know on the Elixir Forum or the elixir-lang Slack.