Skip to content

Repository files navigation

Nerves Desktop

A native desktop application for discovering, managing, and provisioning Nerves devices. Built with Phoenix LiveView and ElixirKit.

Features

  • Device Discovery: Automatically find Nerves devices on your local network via mDNS.
  • Interactive Console: Built-in iex console over UART or SSH powered by xterm.js for direct device interaction.
  • Firmware Burner: Download and flash Nerves firmware images to SD cards/storage devices.
  • Resources: A page of quick links to a wide range of Nerves resources, repos, hex packages and more

Screenshots

Devices list page Device console page Nerves burner page

Installation

This application is in the very early stages of development. Nightly builds can be found here. Download and install the correct target for your platform. We currently build for the following targets/architectures:

  • MacOS (Intel and Apple Silicon)
  • Windows (x64)
  • Linux (amd64 and aarch64)
    • .deb (Ubuntu/Debian)
    • .rpm (Fedora)
    • AppImage (everything else)

If you download and install the software, please note the following:

  • Code signing is not set up yet. You may receive errors or warnings that the software is untrusted. For MacOS, the error looks like the following: Apple could not verify that Nerves Desktop is free of malware

    To override this, go to Privacy & Security setting and press "Open Anyway":

    System Preferences on MacOS with open anyway button

  • There may be bugs with installation or use of the software. If you run into any, please file issues

Build from Source

To run this application from source, you need the following installed on your host machine:

1. Development Environment

  • Elixir 1.19 and Erlang/OTP 28

  • Rust** and Cargo (via rustup)

  • Node.js (for assets)

  • Tauri CLI*— cargo tauri is not part of stock Cargo. Install it with:

    cargo install tauri-cli --version "^2.0" --locked

2. System Dependencies

macOS:

brew install libusb dtc zlib pkg-config

Ubuntu/Debian (includes Tauri's WebKit/GTK requirements as well as the sunxi tooling deps):

sudo apt-get install \
  libwebkit2gtk-4.1-dev libsoup-3.0-dev libjavascriptcoregtk-4.1-dev \
  libusb-1.0-0-dev libfdt-dev zlib1g-dev pkg-config

Getting Started

1. Setup Elixir Dependencies

mix deps.get

2. Run the Desktop App

The following command starts the Phoenix server and the native Tauri window simultaneously:

cargo tauri dev

Cutting a Release

The VERSION file at the repository root is the single source of truth for the application version. mix.exs reads it directly, and Tauri inherits its version from src-tauri/Cargo.toml, which is kept in sync with it.

Builds that were not cut from a tag report their version with a -dev suffix in the sidebar (v0.1.0-dev), so a nightly is always distinguishable from a release.

1. Bump the version

Edit VERSION, then propagate it to the files that cannot read it themselves:

mix version.sync

This rewrites the version in src-tauri/Cargo.toml and src-tauri/Cargo.lock. mix version.check verifies the two agree and runs as part of mix precommit.

2. Commit and tag

The tag must match VERSION prefixed with v, or the release build fails before any platform is built:

git commit -am "Release v0.2.0"
git tag v0.2.0
git push origin main --tags

3. Publish

Pushing the tag triggers release.yml, which verifies the tag against VERSION and then builds every platform. The artifacts are attached to a draft release, so review them and write the release notes before publishing it from the GitHub releases page.

Nightlies are unaffected: build.yml still runs on a schedule and publishes to the rolling nightly tag. Both share the build steps in app-build.yml.

Future Work

Currently, this is an experiment to see if this is a useful resource for the Nerves community. Your feedback is incredibly important to gauge that metric. We have planned the following features for future developments (in no particular order):

  • Code signing
  • Automatic updates
  • Integrated Nerves MCP server (tools for connecting to Nerves devices, reading logs, etc)
  • NervesKey provisioning
  • Nerves Starter Kit integration
  • Flashing second-stage bootloader (rpiboot/sunxi-fel)

If you have any feature requests, please open an issue to open discussion on the topic

Related Projects

This project is a thin GUI wrapper over several other Nerves projects. Notably:

About

Desktop app for managing Nerves devices

Resources

Code of conduct

Contributing

Security policy

Stars

10 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages