Introduction

This is a guide to developing commercial products with Nerves based on the lessons learned by the team at Redwire Labs. Product development can be a challenging journey, so we are sharing this resource with the community so that you can avoid the pitfalls we have seen and shortcut the path to success.

Redwire Labs is a product development agency that specializes in commercial IoT products built with Nerves and Elixir.

Why we use Nerves

In our experience, Nerves has been an excellent technology that expedites the development of connected products, and is built on a platform that supports robustness and reliability.

Nerves is the framework for running an Elixir application on embedded Linux. It uses Buildroot to create a custom Linux system that's tailored to your project and boots the system into the application (as process 1), opposed to running a Linux distro, which tends to be heavier weight and comes with extra cruft. Nerves also provides facilities to update firmware in the field, and an A/B partition scheme that allows for rolling back in the case of a failed firmware update.

Elixir is used as the main application programming language. From a firmware development perspective, this allows developers to reason about the system at a higher level, avoiding the need to worry about things like memory management and segmentation faults. However, developers still have the low-level tools they need to interface with hardware, like bitwise operations. From the perspective of developing a connected product, Elixir is a language that can be used for both the firmware and backend server, making it easier for developers to understand each side of the system. Our full stack engineers are even able to develop features in vertical slices through the firmware and backend codebases.

The BEAM VM runs the Elixir application, and is known for its use in developing low-latency, distributed, and fault-tolerant systems. It also comes with OTP, which can be thought of as the standard library. OTP provides much more functionality out of the box than most other languages, like state machines, directed graphs, and ETS tables (in-memory database).

Last updated