// the find
nerves-project/nerves
Craft and deploy bulletproof embedded software in Elixir
Nerves is the core tooling for building embedded Linux firmware where the Erlang VM runs as PID 1 instead of a general-purpose init system, with the whole application written in Elixir. It's for teams building IoT/embedded devices (Raspberry Pi, BeagleBone, custom boards) who want OTP supervision trees and hot code reloading instead of a stripped-down Linux distro with a scripting layer bolted on.
Booting straight into the BEAM instead of systemd/init is a real architectural choice, not a gimmick — you get supervisor-tree restart semantics for your whole device, not just your app process. The build runner abstraction (Docker, local, container) in lib/nerves/artifact/build_runners/ cleanly separates the cross-compilation environment from the firmware logic, and the artifact resolvers (GitHub, Gitea, plain URI) mean you're not locked into one hosting scheme for prebuilt system images. It's been running in production since 2016 and is still getting commits in 2026, so the OTP-failure-handling edge cases have mostly been found already.
This single repo is really just the entry point — actually using Nerves means pulling in a dozen+ separately versioned libraries (VintageNet for networking, Circuits.* for GPIO/I2C/SPI, NervesSSH, Shoehorn) and understanding how they fit together, which isn't obvious from here alone. Host setup is heavier than a typical Elixir project: Buildroot-based cross-compilation, WSL2 required on Windows, and first-firmware-build times that reflect building an embedded Linux userspace from source. And it's a one-way bet on Elixir — none of the reliability wins transfer if your team isn't already invested in the BEAM.