A framework for building and deploying bulletproof embedded software using Elixir and the Erlang VM.
Nerves is a framework for crafting and deploying bulletproof embedded software using the Elixir programming language. It provides tooling and libraries to build small, self-contained software images that run on microprocessor-based systems, leveraging the reliability of the Erlang VM and the hardware support of Linux. It solves the challenge of developing reliable, maintainable embedded applications with the productivity of a high-level language.
Elixir developers and embedded systems engineers who want to build reliable, concurrent embedded applications for devices like Raspberry Pi, BeagleBone, and other microprocessors.
Developers choose Nerves because it brings the robustness and concurrency of the Erlang VM to embedded systems, allows leveraging the entire Elixir ecosystem, and produces minimal, deployable firmware images with a familiar development workflow.
Craft and deploy bulletproof embedded software in Elixir
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Leverages the entire Elixir stack, including Phoenix, LiveView, Nx, and Livebook, for embedded applications as highlighted in the README, enabling productive server-like development.
Uses Buildroot to include only what you use, creating small, self-contained software images that keep firmware lean and deployable.
Supports a wide variety of hardware from Raspberry Pi to BeagleBone and x86_64 via the Linux kernel, with officially maintained system configurations.
Provides Mix tasks for cross-compilation, firmware generation, and deployment, streamlining the workflow from code to burned SD card.
Starts the Erlang VM as a primary OS process, enabling concurrent, reliable embedded systems with built-in supervision trees.
Requires Elixir ~> 1.11 and deep familiarity with the BEAM ecosystem, which can be a significant hurdle for teams new to functional programming.
Demands specific host requirements (e.g., Mac OS 10.13+, 64-bit Linux, or WSL2) and cross-compilation toolchains, adding overhead compared to simpler embedded frameworks.
As admitted in the README, it contains little of what's in typical embedded Linux distributions, so additional configuration is needed for common packages and services.
Officially supports select boards; community ports may be less stable or outdated, as indicated by the 'outdated/inactive projects' section in the README.