• New project generator updates
    • Update dependency versions to latest
    • Add NervesMOTD to the iex.exs
    • Add more comments to commonly edited locations in the mix.exs


  • New project generator updates

    • Strip everything but docs with MIX_ENV=dev

      Since most users don't use debug symbols, strip them out of the beams even for dev builds. This keeps docs, though. Here's are some firmware sizes to see the effect: circuits_quickstart_unstripped.fw 43597619 circuits_quickstart_docs.fw 33595640 circuits_quickstart_stripped.fw 33016963 As you can see, this saves ~10 MB and retains docs.


  • New project generator updates
    • Add config/host.exs so that there's a more obvious location for host-only configuration
    • Add rootfs_overlay/etc/iex.exs to the list of files to format with mix format


  • New project generator updates
    • Added osd32mp1 to default targets in new project generator. See nerves_system_osd32mp1 for system information.
    • Update formatting to more closely match Elixir 1.11's new project generator
    • Simplify the Nerves/Mix integration (now only an update to config.exs)
    • Bump Nerves to ~> 1.7.0
    • Bump Shoehorn to ~> 0.7.0
    • Disable busy waiting in the BEAM by default.


  • New project generator updates
    • Bump NervesPack to 0.4 which drops :nerves_firwmare_ssh in favor of :nerves_ssh and :ssh_subsystem_fwup for access and updates.
    • Bump Nerves to ~> 1.6.3
    • Bump NervesRuntime to ~> 0.11.3
    • Bump RingLogger to ~> 0.8.1


  • New project generator updates
    • Update systems to latest versions.
    • Add an example for overriding erlinit options using Mix config.


  • New project generator updates
    • Bump Nerves to 1.6 and update systems.
    • Default to use --nerves-pack.
    • Remove options for --init-gadget.


  • Enhancements
    • Updated Elixir 1.10 deprecated function calls.


  • Enhancements

    • Improved support for reproducible builds in new projects by setting source_date_epoch. Existing projects can add this to the :nerves config.

      For example:

      config :nerves, source_date_epoch: "1577467691"
    • Added support for generating new projects using nerves_pack instead of nerves_init_gadget. See nerves_pack for more information. For example:

      mix my_app --nerves-pack


  • Enhancements
    • Don't allow projects to be named nerves. Those won't work anyway.


  • Enhancements
    • Synchronize new project files to better match the versions from mix new


  • Enhancements

    • Added rpi4 to default targets in new project generator. See nerves_system_rpi4 for system information.
    • Update release config to only strip beams for :prod firmware.
  • Bug fixes

    • Fix --cookie in new project generator for overriding the cookie.


  • Enhancements
    • Updated new project generator to use Elixir ~> 1.9


  • Bug fixes
    • Change distillery to ~> 2.0 in the new project generator.


  • Bug fixes
    • Add distillery ~> 2.1 to the new project generator.
    • Lock down the nerves dependency to ~> 1.4.5 in new projects.


  • Bug fixes
    • Compile distillery before nerves when included as an optional dependency.


  • Enhancements
    • New projects include nerves_init_gadget by default. If you want a minimal project that does not include nerves_init_gadget, pass --no-init-gadget.


  • Enhancements
    • Create mix.exs files with build_embedded: true so that build products aren't stored in the source tree. This helps fix a source of confusion when switching targets and C/C++ build products don't get rebuilt.
    • Improve the missing ssh key error message in config.exs


  • Enhancements
    • Added rpi3a to default supported targets list. See nerves_system_rpi3a.
    • Bumped the minimum versions from 1.5 to 1.6.
    • Improved error message when trying to create new projects that support Elixir ~> 1.8 while running a version that is < 1.8.
    • Set required bootstrap archive version to ~> major.minor of the version of nerves_bootstrap that generated the new project.


  • Bug fixes
    • Configure nerves_bootstrap to support Elixir ~> 1.7. Use ~> 1.8 for new projects.


Version v1.4.0 adds support for Elixir 1.8's new built-in support for mix targets. In Nerves, the MIX_TARGET was used to select the appropriate set of dependencies for a device. This lets you switch between building for different boards and your host. Elixir 1.8 pulls this support into mix and lets you annotate dependencies for which targets they should be used.

See the project update guide to learn how to migrate your project.

  • Enhancements
    • New projects are generated for Elixir 1.8.
    • Support non-RSA SSH keys in new projects.


  • New project generator fixes
    • Enable multi_time_warp mode by default. This fixes an issue where the Erlang system clock wouldn't get updated after the clock was set.


  • New project generator enhancements
    • Update ring_logger to ~> 0.6.
    • Add toolshed ~> 0.2 and update rootfs_overlay/etc/iex.exs
    • Enable Erlang Distribution when Mix.env() != :prod
    • Remove ev3 from default supported target list
    • Update bbb system version requirement to ~> 2.0
    • Update all other system version requirements to ~> 1.5


  • Enhancements

  • Bug fixes

    • Invoke Nerves environment when calling deps.compile.
    • Display warning instead of raising when calling mix run.


  • Enhancements
    • Use :dhcpd instead of :linklocal for nerves_init_gadget defaults.


  • New features
    • Enable heart in the new project generator. This engages both a software-based watchdog (Erlang's heart feature) and a hardware-based one on systems that support it. If the Erlang VM becomes unresponsive, one of the watchdogs will reboot the processor. See the Erlang heart documentation for changing timeouts and adding callbacks to your application.
    • Enable build_embedded. This ensures that C build products are separated based on target and prevents many causes of x86 build products ending up on ARM targets unintentionally.


  • Bug fixes
    • Add RingLogger to all deps in new project generator. This fixes an issue that causes new projects generated with --init-gadget to crash on boot running on the host.


Add support for generating new projects with nerves_init_gadget. To generate a new project with nerves_init_gadget included, pass --init-gadget to mix

For example:

mix my_app --init-gadget


This release updates the new project generator to create projects that will work with Elixir 1.7 and Distillery 2.0.

  • Enhancements
    • Update new project generator to support shoehorn v0.4.
    • Bump minimum deps to latest versions.


  • Enhancements
    • Update new project generator to target 1.0 systems


  • Bug Fixes


  • Updates
    • New project generator no longer conditionally defines application/0 in mix.exs depending on target. It is recommended to conditionally choose the main supervisors children instead.
    • New project generator moves the dependency shoehorn to be included for both host and target environments.


  • Updates
    • Various new project generator code format updates. Include :runtime_tools in :extra_applications.
  • Bug fixes
    • Only display Nerves environment helper text when the Nerves environment is loaded. Fixes issues with running mix commands like mix format - that require the I/O to remain clean.


  • Updates
    • Remove build_embedded from the mix.exs since it was unnecessary
    • Fix update check in mix local.nerves
    • Various changes to align new project generator with the one in Elixir 1.6.
    • Add rootfs_overlay directory and populate it with an iex.exs to load the nerves_runtime IEX helpers. This replaces a common manual process of doing this or something similar afterwards.
    • Add a commented out reference for enabling Erlang's heartbeat monitor


  • Bug fixes
    • Various mix format updates to the template
    • Update template so that projects use v1.0.0-rc system releases so that they compile
    • Fix archive update check logic


Nerves no longer automatically compiles any nerves_package that is missing it's pre-compiled artifact. This turned out to rarely be desired and caused unexpectedly long compilation times when things like the Linux kernel or gcc got compiled.

When a pre-compiled artifact is missing, Nerves will now tell you what your options are to resolve this. It could be retrying mix deps.get to download it again. If you want to force compilation to happen, add a :nerves option for the desired package in your top level project:

  {:nerves_system_rpi0, "~> 1.0-rc", nerves: [compile: true]}


  • Bug Fixes
    • deps.get and deps.update aliases should always be added to the project regardless of target.


The v0.7.x and earlier releases only required two aliases in your mix.exs to pull in the Nerves enhancements to mix.exs. This releases adds more aliases. Rather than requiring your mix.exs file to be updated if the Nerves alias hooks change in the future, we recommend updating your mix.exs as follows:

  # mix.exs

  def project do
      # ...
      aliases: ["loadconfig": [&bootstrap/1]],

  # Starting nerves_bootstrap pulls in the Nerves hooks to mix, but only
  # if the MIX_TARGET environment variable is set.
  defp bootstrap(args) do
    Application.start(:nerves_bootstrap)"loadconfig", args)

This release has the following changes:

  • Enhancements
    • precompile will compile all Nerves packages instead of only the system and its children.
    • Calling run while MIX_TARGET is set will raise an exception for trying to run cross compiled code on the host.
    • Application.start(:nerves_bootstrap) will attempt to add aliases to the mix project on the top of the stack if MIX_TARGET is set.


  • Enhancements
    • Added alias for deps.update to append nerves.deps.get to fetch artifacts.


  • Enhancements

    • Added Mix task nerves.deps.get

    • nerves_bootstrap will check for updates when nerves.deps.get is called.

    • Added Nerves.Bootstrap.add_aliases/1 This helper function ensures that your project has the required Nerves mix aliases defined and in the correct execution order. The function takes the existing aliases as a keyword list and injects the required Nerves aliases. You will need to update your mix.exs target aliases to use this version of nerves_bootstrap like this:

      defp aliases(_target) do
          # Add custom mix aliases here
        |> Nerves.Bootstrap.add_aliases()

      You should also update your required dependency for nerves to {:nerves, "~> 0.9", runtime: false}

  • Bug Fixes

    • disable precompiler when calling mix nerves.clean to prevent having to build the package so we can clean it.
    • Fixes issue where project dependencies that contain calls to System.get_env in their config or mix file or rebar deps that have rebar-config.script overrides that make os:getenv calls were not being configured for the cross compile environment.


  • Enhancements
    • Changed update location from Github to
    • Fixed compiler warning
    • Synchronize new project template with Elixir 1.6 updates (includes formatter)


  • Enhancements
    • Removed unsupported systems from default targets and added x86_64.
    • Moved to independent hex package.


  • Enhancements
    • [mix] Use the new rootfs_overlay option rather than the deprecated rootfs_additions option and also recommend placing the relevant files in a top-level rootfs_overlay directory in the project root rather than in config/rootfs_additions.
    • [mix] system dependencies are appended as a list so there is a clear location for where system specific dependencies are added.
    • [mix] moved the config for bootloader above so that it is configured before importing target specific configuration.


  • Enhancements
    • Improved error messages in Mix task. In particular, it now reminds you to set MIX_TARGET.
  • Bug Fixes
    • The nerves.env Mix task (used internally by Nerves) now checks that your deps have been fetched before trying to load.
    • Fix extraneous whitespace in mix.exs generated by mix


  • Enhancements
    • New Mix task, which provides a consistent way to configure a Buildroot-based Nerves system on both OSX and Linux. This replaces the Mix task that was provided by the nerves dependency, which had not been fully implemented.
    • Add an optional --disabled flag to the nerves.env Mix task, which allows the Nerves environment to be compiled and loaded in a disabled state so that it doesn't try to actually cross-compile all the dependencies at load time. This is primarily used so that Mix tasks like can run on the host without having to wait for dependencies to compile when they won't even be used.
    • Related to the previous change, the nerves.precompile task does not try to compile the toolchain and system when Nerves.Env is loaded in a disabled state.


  • Bug Fixes
    • System dependencies were not being built in order when system is the parent project


  • Enhancements
    • Pass +Bc in vm.args to avoid accidental CTRL+C
    • Update deps and loosen version requirements
    • Include bootloader in new projects
  • Bug Fixes
    • Choose the right compiler when parent project is a Nerves system package


  • Enhancements
      • lock files are split by target
      • Target dependencies are explicitly broken out in mix.exs through passing --target to the generator. Defaults to declaring all officially supported Nerves Targets.
      • A default cookie is generated and placed in the vm.args. the cookie can be set by passing --cookie


  • Bug Fixes
    • Added support for OTP 20: Fixes issue with RegEx producing false positives.


  • Enhancements
      • defaults to Host target env
      • includes nerves_runtime
      • prompt to install deps and run nerves.release.init
      • unset MIX_TARGET when generating a new project
  • Bug Fixes
    • removed rel/.gitignore from new project generator



  • Bug Fixes
    • update nerves dep in new project generator to 0.4.0
  • Enhancements
    • Additional debug output when setting NERVES_DEBUG=1
    • Ability to output information about the loaded Nerves env via mix nerves.env --info


  • Enhancements
    • Support for nerves_package compiler


  • Bug Fixes
    • Do not warn on import Supervisor.Spec
    • Silence alias location messages unless NERVES_DEBUG=1
  • Enhancements
    • Support for Elixir 1.3.2


  • Enhancements
    • Support for elixir ~> 1.3.0-rc.0