Tiny Erlang VM
2,227
stars
5,594
commits
Erlang
primary language
Jul 31, 2026
updated
Brings Erlang, Elixir and other functional languages to really small systems.
AtomVM implements from scratch a minimal Erlang VM that supports a subset of ErlangVM features and that is able to run unmodified BEAM binaries on really small systems like MCUs.
AtomVM aims to be easily portable to new platforms with a minimum effort, so additional platforms might be supported in a near future.
There is much more information, including a more complete "Getting Started Guide", examples, detailed build instructions, and contact information available on the AtomVM project website.
Don't forget to check out the examples repository to help get you started on your next IoT project.
Please, use v0.6.x releases, main branch is for development purposes and it might be unstable.
Required for building:
Documentation and Coverage:
make coverage).$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./src/AtomVM ./examples/erlang/hello_world.avm
Complete Build Instructions are available in the documentation for Generic UNIX (Linux, MacOS, FreeBSD, DragonFly), ESP32, STM32, Raspberry Pi Pico and Pico 2 (rp2), and WASM (NodeJS/Web).
AtomVM is no longer just a prototype — it has reached a solid level of compatibility with the BEAM ecosystem. It can execute unmodified, compiled BEAM modules, and most core standard library functions are already supported.
AtomVM is tested with code compiled with any version from OTP 21 to 27 (29 is supported only in main branch).
Crashes may still occur in edge cases, so we recommend using either the latest stable release (v0.6.x) or the main branch if you're experimenting with newer features. If you run into issues, please open an issue — we’d love your feedback.
For a detailed list of recent changes and new features, see the changelog.
AtomVM is ready to power your next embedded or lightweight functional programming project.
Your existing project might not work out of the box due to a few current limitations:
on_load functions and tracing are not yet supported.When a feature is implemented, we aim to provide behavior that is consistent with the official BEAM documentation and Erlang/OTP runtime.
Some of these limitations are on the roadmap, while others are deliberate design decisions to keep AtomVM lightweight, portable, and suitable for embedded systems.
This project has been created by Davide Bettio, and now is developed from a growing number of contributors.
Any kind of contribution is welcome, you can either contribute to this repository by improving the virtual machine, the core libraries or the documentation or by contributing to any of the organization repositories.
This project is under the terms of the Apache 2.0 license.
AtomVM is made possible thanks to the dedication of a vibrant community of individual contributors who have generously shared their time and expertise. We are deeply grateful for their ongoing support and passion over the years.
We also want to extend a special thank you to the following companies for supporting the development of AtomVM:
Thank you all for being part of this journey! 🙌
(top 30 of 39)
Erlang
59.9%
C
32.0%
Elixir
3.8%
CMake
2.9%
Tiny Erlang VM
2,227
stars
5,594
commits
Erlang
primary language
Jul 31, 2026
updated
Brings Erlang, Elixir and other functional languages to really small systems.
AtomVM implements from scratch a minimal Erlang VM that supports a subset of ErlangVM features and that is able to run unmodified BEAM binaries on really small systems like MCUs.
AtomVM aims to be easily portable to new platforms with a minimum effort, so additional platforms might be supported in a near future.
There is much more information, including a more complete "Getting Started Guide", examples, detailed build instructions, and contact information available on the AtomVM project website.
Don't forget to check out the examples repository to help get you started on your next IoT project.
Please, use v0.6.x releases, main branch is for development purposes and it might be unstable.
Required for building:
Documentation and Coverage:
make coverage).$ mkdir build
$ cd build
$ cmake ..
$ make
$ ./src/AtomVM ./examples/erlang/hello_world.avm
Complete Build Instructions are available in the documentation for Generic UNIX (Linux, MacOS, FreeBSD, DragonFly), ESP32, STM32, Raspberry Pi Pico and Pico 2 (rp2), and WASM (NodeJS/Web).
AtomVM is no longer just a prototype — it has reached a solid level of compatibility with the BEAM ecosystem. It can execute unmodified, compiled BEAM modules, and most core standard library functions are already supported.
AtomVM is tested with code compiled with any version from OTP 21 to 27 (29 is supported only in main branch).
Crashes may still occur in edge cases, so we recommend using either the latest stable release (v0.6.x) or the main branch if you're experimenting with newer features. If you run into issues, please open an issue — we’d love your feedback.
For a detailed list of recent changes and new features, see the changelog.
AtomVM is ready to power your next embedded or lightweight functional programming project.
Your existing project might not work out of the box due to a few current limitations:
on_load functions and tracing are not yet supported.When a feature is implemented, we aim to provide behavior that is consistent with the official BEAM documentation and Erlang/OTP runtime.
Some of these limitations are on the roadmap, while others are deliberate design decisions to keep AtomVM lightweight, portable, and suitable for embedded systems.
This project has been created by Davide Bettio, and now is developed from a growing number of contributors.
Any kind of contribution is welcome, you can either contribute to this repository by improving the virtual machine, the core libraries or the documentation or by contributing to any of the organization repositories.
This project is under the terms of the Apache 2.0 license.
AtomVM is made possible thanks to the dedication of a vibrant community of individual contributors who have generously shared their time and expertise. We are deeply grateful for their ongoing support and passion over the years.
We also want to extend a special thank you to the following companies for supporting the development of AtomVM:
Thank you all for being part of this journey! 🙌
(top 30 of 39)
Erlang
59.9%
C
32.0%
Elixir
3.8%
CMake
2.9%