No description
  • Erlang 54.5%
  • C 37.6%
  • Elixir 3.7%
  • CMake 3.1%
  • CodeQL 0.4%
  • Other 0.5%
Find a file
Mikal 0f65bd8976
All checks were successful
Release / macOS ARM64 (push) Successful in 38s
Release / Linux x86_64 (push) Successful in 3m19s
ci: handle existing releases, upload macOS to Forgejo
- Linux: check for existing release before creating (avoids dupe error)
- macOS: upload tarball to Forgejo release via API instead of SCP
- macOS polls for release (Linux may create it first)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 07:18:53 +01:00
.forgejo/workflows ci: handle existing releases, upload macOS to Forgejo 2026-02-19 07:18:53 +01:00
.github Fix a workflow bug where a non-jit run could use a jit cached beam 2026-02-17 15:09:39 +01:00
.reuse Start using .license files, and remove entries from dep5 2022-03-09 01:23:12 +01:00
CMakeModules Use ninja on FreeBSD builds 2026-01-31 08:30:24 +01:00
code-queries Fix false positives of term-use-after-gc CodeQL query 2026-02-15 16:07:10 +01:00
doc doc: update links to esp-idf documentation 2026-02-09 10:33:42 +01:00
examples Add OneForAll supervisor to gleam example 2025-11-27 23:28:22 +01:00
libs feat: subprocess stdin/stderr pipes + os:cmd, shell, getenv 2026-02-19 02:20:40 +01:00
LICENSES Add Dasbhit and Software Mansion logos 2025-04-27 02:07:54 +02:00
src feat: subprocess stdin/stderr pipes + os:cmd, shell, getenv 2026-02-19 02:20:40 +01:00
tests Fix a bug with jit_raise when calling stacktrace_create_raw 2026-02-14 11:21:12 +01:00
tools JIT: optimize calls to term_to_int using types 2025-09-29 20:19:40 +02:00
.clang-format .clang-format: enable InsertBraces option 2025-09-13 15:56:43 +02:00
.clang-format-ignore Apply clang-format to more files 2025-11-15 23:35:15 +01:00
.gitignore Example idf_component.yml (nif install method) 2025-11-12 15:48:13 +01:00
.tool-versions fix: update .tool-versions erlang to 28.3 2026-02-19 07:01:48 +01:00
C_CODING_STYLE.md Use -Wpendantic with Clang, fix AVMCCS-L002 issues 2025-09-30 20:50:32 +02:00
CHANGELOG.md Add few missing ledc functions 2026-02-06 22:07:37 +01:00
CMakeLists.txt Start phasing out old OTP versions 2026-01-08 02:56:10 +01:00
CODE_OF_CONDUCT.md Add Code of Conduct 2022-03-17 22:56:33 +01:00
CONTRIBUTING.md Update CONTRIBUTING.md (after our new C coding style guide) 2025-07-16 18:16:31 +02:00
LICENSE Switch to Apache-2.0 license 2022-01-27 22:47:52 +01:00
README.Md Forward port changes from v0.6 release branch 2025-06-17 18:40:46 +02:00
SECURITY.md SECURITY.md: add v0.6.x as supported 2024-03-05 13:12:16 +01:00
UPDATING.md NIFs: list_to_integer: fix it and support for big integers 2025-10-06 15:50:03 +02:00
version.cmake Forward port changes from v0.6 release branch 2024-03-05 19:36:05 +01:00

AtomVM

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.

Supported Platforms

  • Linux, macOS, FreeBSD, DragonFly (generic_unix)
  • ESP32 SoC (with IDF/FreeRTOS, see esp32)
  • STM32 MCUs (with LibOpenCM3, see stm32)
  • Raspberry Pi Pico and Pico 2 (see rp2)
  • Browsers and NodeJS with WebAssembly (see emscripten)

AtomVM aims to be easily portable to new platforms with a minimum effort, so additional platforms might be supported in a near future.

Getting Started

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.

Dependencies

Required for building:

Documentation and Coverage:

  • gcov and lcov are optionally required to generate coverage report (make coverage).
  • For documentation build requirements consult the Documentation README.

Step-by-Step Build Instructions (generic unix platform)

$ 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).

Project Status

Build and Test

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 (28 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 — wed 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.

Known Limitations

Your existing project might not work out of the box due to a few current limitations:

  • The standard library is minimal — some functions and modules are not yet implemented.
  • Features that depend on a full operating system (e.g. file I/O, OS processes) may be missing or behave differently.
  • Certain BEAM features like on_load functions and tracing are not yet supported.
  • Some functionality may simply be missing — if you find a gap, feel free to open an issue, and well take a look.

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.

About This Project

This project has been created by Davide Bettio, and now is developed from a growing number of contributors.

How to Contribute

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.

License

This project is under the terms of the Apache 2.0 license.

❤️ Acknowledgements

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:

Dashbit Software Mansion

Thank you all for being part of this journey! 🙌