Fall started with the first official conference badge powered by AtomVM, handed out to attendees at Goatmire 2026. We have also released AtomVM v0.7.0-beta.0 and made several quality-of-life improvements to exatomvm, our Mix plugin for Elixir projects.
The Goatmire badge
We finally have an official AtomVM conference badge! Gus Workman at Protolux Electronics designed it with AtomVM in mind from the start. Built around an ESP32-S3, it has a 320x240 color display and a QWERTY keyboard, plus four RGB LEDs and infrared communication. The badge also has a temperature sensor and an accelerometer, with a Qwiic connector for adding more sensors.
The firmware is written in Elixir and includes contact sharing, chat and the conference schedule. There are Windows 95 and classic Macintosh themes to choose from, plus an application for forming Erlang clusters between badges. Firmware updates can be delivered over the air through NervesHub.
Elixir and the AtomVM tools made it easy to extend the firmware, and attendees wasted no time making it their own. People were adding games during the conference, including Connect Four and a racing game, then walking around with their own versions of the firmware. We were very happy to see people having this much fun with AtomVM!
You don’t need a badge on your desk to try the firmware, either. The badge repository includes a browser-based simulator. You can edit the Elixir code and try your changes without flashing a board each time.
AtomVM was also the subject of the four-hour AtomVM Is Real workshop and the talk AtomVM: When Constrained Doesn’t Mean Boring, both presented by Davide Bettio. Missed the workshop? The slides and exercises are online, so you can work through them at home, from your first application to reading sensors and publishing data over MQTT.
Making exatomvm easier to use
The conference and workshop were also a good opportunity to introduce several quality-of-life improvements in exatomvm. We tackled some of the annoying parts of getting started, such as finding the right serial port, looking up flash offsets and setting up a separate serial terminal.
Start with mix atomvm: it now explains the workflow and points you to the tasks you need.
For ESP32 boards, mix atomvm.esp32.install installs prebuilt firmware without an ESP-IDF
setup. You can choose a stable release, a prerelease or a nightly build, including images with
AtomGL. Add --version v0.7.0-beta.0 to select the beta instead of the default stable release.
Both install and flash can find the connected USB device automatically. And
mix atomvm.esp32.flash reads the partition table to find where your application belongs.
You no longer need to look up the flash offset yourself.
After flashing, mix atomvm.esp32.monitor shows console output without a separate serial
terminal. When a task needs an optional dependency such as pythonx or req, exatomvm tells you
what to add.
To summarize, once your project is configured, you can install AtomVM on your ESP32, build and flash your application and open the serial monitor with just four commands:
mix deps.get
mix atomvm.esp32.install --version v0.7.0-beta.0
mix atomvm.esp32.flash
mix atomvm.esp32.monitor
The flash task compiles and packs your application automatically. After changing your code, just run the flash task again. There is no need to reinstall AtomVM.
A note before installing: installation erases flash by default. On compatible installations,
--update keeps your application, NVS data and partition layout.
We also fixed a confusing source of compatibility warnings. exatomvm used to keep its own
list of supported functions and BEAM instructions, which could fall behind the AtomVM version
you were using. Now your project can declare its target release in mix.exs:
{:atomvm, "~> 0.7.0-beta.0", runtime: false}
The AtomVM package supplies that release’s compatibility
metadata to mix atomvm.check. The check also runs before packing or flashing, so its warnings
follow the release your project targets.
AtomVM v0.7.0-beta.0
AtomVM v0.7.0-beta.0, the first beta release in the v0.7.0 series, is now available.
This release adds a JIT backend for Xtensa on ESP32 and a WebAssembly JIT backend for the Emscripten platform. Erlang distribution can now use UART, and USB CDC port drivers are available for ESP32, RP2 and STM32.
Other additions include process aliases and map comprehensions. ESP32 applications can scan
for nearby Wi-Fi networks with network:wifi_scan/0,1, and the HTTP client now supports
chunked responses. The release also includes fixes for supervisor restarts and HTTP response
handling. See the full changelog
for the complete list of changes.
Prebuilt binaries are available on the GitHub release page. This is still a prerelease. Please report any issues you find while testing. When upgrading from v0.6.x, read UPDATING.md first.
Thank you to Gus and the badge team, everyone who joined us at Goatmire and all our contributors. We’re looking forward to seeing what else ends up running on those badges!
The AtomVM team