About atomvm/AtomVM
AtomVM is a minimal Erlang virtual machine implemented from scratch that runs unmodified BEAM binaries on very small systems such as microcontrollers (MCUs). It supports a subset of the Erlang VM features and is compatible with Erlang, Elixir, and other BEAM-based languages. AtomVM can be deployed on ESP32, STM32, Raspberry Pi Pico, generic Unix platforms (Linux, macOS, FreeBSD, DragonFly), and even browsers or Node.js via WebAssembly. It is designed for easy portability to new platforms and is tested with OTP versions 21 through 27 (with main branch support for 29). The project is open source and has reached a solid level of BEAM compatibility, though edge-case crashes are still possible.
Key Features
Runs unmodified BEAM binaries on microcontrollers and small devices
Supports Erlang, Elixir, and other BEAM languages
Portable to multiple platforms: ESP32, STM32, Raspberry Pi Pico, generic Unix, WebAssembly
Minimal footprint, designed for resource-constrained environments
Tested with OTP 21 through 27 (29 supported in development branch)
Open source and community-driven
Pros & Cons
Pros
- Very small memory and storage footprint suitable for MCUs
- Runs unmodified compiled BEAM modules, reducing porting effort
- Open source with permissive license (Apache 2.0)
- Active community and regular releases
- Supports multiple popular embedded platforms out of the box
Cons
- Only a subset of the full Erlang VM features are implemented
- Edge-case crashes may still occur (project advises using stable releases)
- Requires compilation with specific Erlang/OTP versions (21-27 for now)
- Documentation and examples are still evolving
Best For
IoT and embedded systems development with Erlang/ElixirRunning BEAM applications on microcontrollers (MCUs)Learning and prototyping with Erlang/Elixir on low-cost hardwarePorting BEAM applications to small, custom hardware platforms
FAQ
What platforms does AtomVM support?
AtomVM supports Linux, macOS, FreeBSD, DragonFly (generic Unix), ESP32 SoC (with IDF/FreeRTOS), STM32 MCUs (with ST HAL/LL SDK), Raspberry Pi Pico and Pico 2, and WebAssembly (browsers and Node.js).
Can AtomVM run unmodified Erlang/Elixir code?
Yes, AtomVM can execute unmodified, compiled BEAM modules (.beam or .avm files) from Erlang, Elixir, and other BEAM languages, provided they use the supported subset of VM features.
Is AtomVM production-ready?
AtomVM is no longer just a prototype and has reached a solid level of compatibility. The project recommends using the latest stable release (v0.6.x) for production, as the main branch may be unstable. Edge-case crashes may still occur.