-
AtomVM v0.6.5 for MacOS
2024/10/15 AtomVM v0.6.5 MacOS update options
Updates for MacOS through
macports
andhomebrew
are now available for AtomVM v0.6.5. For first time installation see the MacOS installation section of the Getting Started Guide.To upgrade a previously tapped
homebrew
install use:$ brew update $ brew upgrade atomvm
To upgrade an install from
macports
$ sudo port selfupdate $ sudo port upgrade outdated
For all the details about the AtomVM v0.6.5 release see the release announcement.
Documentation for the v0.6.5 release of the AtomVM virtual machine, including a Getting Started Guide, can be found in the AtomVM Documentation.
To help get you inspired there are examples ready to use with our
ExAtomVM mix
andatomvm_rebar3_plugin
standard tool plugins in the AtomVM examples repository on GitHub.Many thanks go to Davide Bettio, for creating and maintaining such a fine work of software, to Paul Guyot for maintaining the
macports
release, and to Peter Madsen-Mygdal for maintaining thehomebrew tap
, along with all of their other contributions ;-)The AtomVM team
-
Announcing AtomVM v0.6.5
2024/10/14 Announcing AtomVM v0.6.5
We are pleased to announce the release of v0.6.5 of the AtomVM virtual machine!
First and foremost our apologies to ESP32 users wanting to use all the great new Elixir features added in the V0.6.4 release. The binary images were corrupted and may Elixir features were unavailable. We have fixed the problem and now publish an Elixir flavored image that has a larger library partition. This change necessitates changing the application partition offset to 0x250000. The ExAtomVM
mix
plugin repository has already been updated with the correct default offset, a new release should be available in the very near future.Note: We are investigating a bug in the ESP32
i2c
driver, that was reported hours before this release,i2c:write_bytes
on ESP32 seems to be causing a hard fault, as a workaround usei2c:write_byte
instead.Expanded Erlang support includes:
erlang:atom_to_binary/1
that is equivalent toerlang:atom_to_binary(Atom, utf8)
is_bitstring/1
maps:merge_with/3
lists:keytake/3
,lists:last/1
,lists:mapfoldl/3
, andlists:nthtail/2
support for handle_continue callback in gen_server
gen_server:start_monitor/3,4
code:ensure_loaded/1
io_lib:latin1_char_list/1
io:put_chars/2
erlang:list_to_integer/2
binary_to_integer/2
binary:copy/1,2
,binary:split/3
,binary:decode_hex/1
, andbinary:encode_hex/1,2
string:find/2,3
- Support for directory listing using POSIX APIs: (
atomvm:posix_opendir/1
,atomvm:posix_readdir/1
,atomvm:posix_closedir/1
)
Expanded Elixir support features:
String.Chars
protocol, now functions such asEnum.join
are able to take also non string parameters; e.g.Enum.join([1, 2], ",")
Enumerable
protocolProcess.send/2
,Process.send_after/3/4
, andProcess.cancel_timer/1
List.Chars
protocolList.duplicate/2
Keyword.split/2
IO.chardata_to_string/1
Base.decode16/2
andBase.encode16/2
Enum.find_index
andEnum.find_value
support Enumerable and not just lists
Enhancements to the ESP32 platform:
- The ESP32 platform now includes the
esp_adc
driver module for using the ADC peripheral to measure analog voltages. Building from source, and including the atomvm_adc component is no longer necessary (or even supported, now that ESP-IDF v4.4.x has been deprecated). - Support for mounting/unmounting storage on ESP32 (such as SD or internal flash) using
esp:mount/4
andesp:umount/1
- Made the device_config properties list in
spi:open/1
optional (defaults to[]
), so you can use the function with only abus_config
- The network driver supports a callback for beacon lost events (usually encountered when signal quality is poor or network congestion),
network:stop/0
works as expected.
Many bugs have been fixed in addition to the previously mentioned fix for ESP32 images, including:
- Fixed memory corruption in
unicode:characters_to_binary
- Fixed handling of large literal indexes and large extended literal indexes
- Fixed bogus out_of_memory error when using
unicode:characters_to_list
on some platforms such as ESP32 - Fix crash in Elixir library when doing
inspect(:atom)
- General
inspect()
compliance with Elixir behavior (but there are still some minor differences) - On ESP32
uart:open/1,2
now works with uppercase peripheral names - Several edge case memory bugs were fixed in the ESP32 network driver, ans when stopped all resources are freed.
- Fixed a bug in decoding terms that led to some pin numbers being rejected when setting GPIO interrupts on the ESP32 platform.
For the full set of bug fixes, changes and additions consult the Changelog.
Download images and binaries are available for most platforms, except STM32, are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions. MacOS users also have the option of installing with
macports
.The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.5 release of the AtomVM virtual machine, including a Getting Started Guide, can be found in the AtomVM Documentation.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating and maintaining such a fine work of software. Special thanks to first time contributors Yuto Oguchi, Rafał Trójniak, Jakub Gonet, and Kevin Schweikert, as well as the rest of the contributors and bug reporters who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.4
2024/08/18 Announcing AtomVM v0.6.4
We are pleased to announce the release of v0.6.4 of the AtomVM virtual machine!
This release greatly enhances support for Elixir language programming. Many Elixir modules and functions have been added:
- Implement missing opcode 161 (raw_raise), that looks more likely to be generated with Elixir code
- Support for Elixir Kernel:
- Kernel.struct and Kernel.struct!
- Kernel.min and Kernel.max
- MapSet module
- Range module
- Enum functions: split_with, join, map_join, into, reverse, slice and to_list
- Map.replace/3 and Map.replace!/3
- IO.iodata_to_binary/1
- Support for Elixir Enumerable and Collectable protocol
- Support for Elixir exceptions: Exception module and the other error related modules such as ArgumentError, UndefinedFunctionError, etc…
- Support (as stub) for erlang:error/3 (that is required from Elixir code)
The ESP32 platform now implements
gpio:init/1
, which was previously only used (and required) on the rp2040 platform. This function is used to initialize pins for GPIO usage, which some pins require depending on default function and bootloader code.For the full set of bug fixes, changes and additions consult the Changelog.
Download images and binaries are available for most platforms, except STM32, are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions. MacOS users also have the option of installing with
macports
, and an updated HomeBrew tap should be available in the near future.The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.4 release of the AtomVM virtual machine, including a Getting Started Guide, can be found in the AtomVM Documentation.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating and maintaining such a fine work of software, as well as the contributors and bug reporters who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.3
2024/07/22 Announcing AtomVM v0.6.3
We are pleased to announce the release of v0.6.3 of the AtomVM virtual machine!
This release expands OTP coverage to include the Erlang
sets
andqueue
modules and several ElixirKeyword
functions:Keyword.merge
,Keyword.take
,Keyword.pop(!)
,Keyword.keyword?
, andKeyword.has_key?
. Support for~kp
withio_lib:format/2
andmaps:iterator/2
that were introduced with OTP26 have added, along withmaps:from_keys/2
. Thelists
modules gains support forlists:keytake/3
,lists:keystore/4
, andlists:filtermap/2
. Support forerlang:size/1
anderlang:apply/2
has also been added.A simple http client, that can be used for different use cases, such as downloading OTA updates has been added to
eavmlib
.The channel used in access point mode can now be changed in the
network
driver.This release adds support for ESP32-H2 devices. Support has also been added for USB serial output on ESP32 devices with native USB support (ESP32-S2 for example).
Notable changes include:
- the default size of ESP32 RTC slow memory being bumped from 4086 to 4096, except on ESP32-H2 where it’s 3072 bytes
- updates to
byte_size/1
andbit_size/1
to implement OTP27 match context reuse optimization OTP-18987 - ESP32 network driver messages for event 40 (home channel change events) are now suppressed, but the details for the channel changes can be observed in the console log if “debug” level logging is enabled in ESP-IDF Kconfig options.
Several bugs have been fixed, including the creation of multiple links for the same process and links not being removed at trapped exits. A bug affecting binary pattern matching (for builds with OTP-21) has been fixed, and several memory related bugs have been corrected, as well as a bug that could yield crashes when functions are sent in messages. The error that is raised when a function is undefined has also been fixed.
For the full set of bug fixes, changes and additions consult the Changelog.
Download images and binaries are available for most platforms, except STM32, are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions. MacOS users also have the option of installing with
macports
, and an updated HomeBrew tap should be available in the near future. The “tap” is currently out of date, but a fix has already been submitted.The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.3 release of the AtomVM virtual machine, including a Getting Started Guide, can be found in the AtomVM Documentation.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating and maintaining such a fine work of software. Special thanks also to takasehideki and Mikael Karlsson for their first contributions to the project, along with the rest of the contributors and testers who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.2
2024/05/29 Announcing AtomVM v0.6.2
We are pleased to announce the release of v0.6.2 of the AtomVM virtual machine!
This release changes the ssl default from
{active, false}
to{active, true}
in order to have same behavior as OTP, as well as fixing several ssl related bugs. Stacktraces are now enabled by default on the rp2040 platform; so, like the ESP32, when a user application crashes a stacktrace will be emitted to make debugging applications easier.We have added support for the ESP32-C2, as well as DragonFly BSD on the generic_unix platform. Other additions include
esp:deep_sleep_enable_gpio_wakeup/2
to allow wakeup from deep sleep for ESP32C3 and ESP32C6, as well as the ability for WiFi enabled devices to obtain the signal strength of the connection to an access point usingnetwork:sta_rssi/0
. A number of new functions have been added to the proplists module, and guardsis_even
andis_odd
have been added to the Elixir Integer module.For the full set of bug fixes, changes and additions consult the Changelog, and check the Updating Instructions.
Download images and binaries are available for most platforms, except STM32, are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.2 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.1
2024/05/06 Announcing AtomVM v0.6.1
We are pleased to announce the release of v0.6.1 of the AtomVM virtual machine!
This is a small update that introduces a new experimental feature: an optimized GC mode. This mode uses C’s realloc instead of copying data around and can be enabled with the
-DENABLE_REALLOC_GC=On
flag.The other notable changes include several bug fixes:
- A crash on macOS has been addressed by adding a missing call to psa_crypto_init for TLS 1.3.
- Functions such as fun m:f/a are now correctly displayed and converted to lists.
- An issue where the unique integer was truncated on some 32-bit architectures has been fixed, particularly when using
erlang:ref_to_list/1
anderlang:display/1
.
For the full set of bug fixes, changes and additions consult the Changelog, and check the Updating Instructions.
Download images and binaries are available for most platforms, except STM32, are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.1 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.0
2024/03/23 Announcing AtomVM v0.6.0
We missed announcing the last few beta and rc releases that all came in a flurry as we were busy doing tests on hardware and this announcement is actually late, but for anyone who missed it, we are pleased to announce that we have a new v0.6.0 stable release!
In this release SPI, I2C, and UART peripheral configurations have been changed, for details consult the documentation for these modules in the
eavmlib
documentation. There is now an ESP32 API for allowing coexistence of native and Erlang I2C drivers, for example, allowing the use of the nativeatomvm_ssd1306
Display driver, with a pure erlang driver for the SHT3x temperature sensor. GPIO interrupt (currently only supported on ESP32 and STM32 platforms) messages can now be sent to a designated receiver usinggpio:set_int/4
. Support forlists:split/2
has also been added. ESP32 platform now supports retrieving the device’s e-fuse MAC address withesp:get_default_mac/0
.AtomVM now uses UTF-8 encoding for atoms when using
erlang:term_to_binary/1
, in conformance with OTP-26, andbinary_to_atom/1
andatom_to_binary/1
now default to utf8. Support has been added for utf8 encoding to*_to_atom
andatom_to_*
functions.We have made improvements to the rp2040 platform that should make development workflows much smoother. The device will now accept re-flashing a new application using the
atomvm_rebar3_plugin
pico_flash
task after the application has exited. Previously the device would be unresponsive after exiting. There is also a default 20 second timeout, which the device will wait for a USB console connection to be established, before running the application. Previously our default build would start the application immediately, giving the user no time to connect to be able to see the output ofhello_world
before the application exited, and the device became unresponsive.The port call tuple format has been changed to the same format as gen_server, so cast support can be added. This change means older versions of
atomvmlib
will not work, libraries from latest version must be used. Check the Update Instructions for other breaking changes for both BEAM application developers, as well as for contributors, and driver developers using nifs or ports.Under the hood enhancements feature a new atom table, which uses less memory, and has improved performance.
Several memory related bugs have been fixed. A random number generation bug has been fixed on ESP32 and RPi2040, as well as a bug shared by both platforms that would cause invalid GPIO pull directions to be silently set to
floating
without an error.For the full set of bug fixes, changes and additions consult the Changelog, and check the Updating Instructions.
Download images and binaries are available for most platforms, except STM32 (and some generic_unix hosts for this release due to specific Mbed-TLS requirements) are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
-
Announcing AtomVM v0.6.0-beta.1 (Pre-release)
2024/02/29 Announcing AtomVM v0.6.0-beta.1 (Pre-release)
We are pleased to announce that our pre-release of v0.6.0 is now in beta!
Wait! What happened to the v0.6.0-beta.0 release? Our all volunteer QA team (thank you @petermm) discovered a problem with the ESP32S3 builds that caused starting
esp32init.beam
to crash the VM. This is the default network application that will create a wireless AP on an ESP32 that has been flashed with the AtomVM image, but does not have a user application flashed yet. Once connected to the “AtomVM-ESP32” network that is created you can access an alisp console at 192.168.4.1 on port 2323, or connect to http port 8080 to change the network to station mode and connect to a wifi network, where the arepl console will be available on port 2323 on the devices acquired IP address. We have determined the cause of the problem, but it has not been fixed in this release.In this release SPI, I2C, and UART peripheral configurations have been changed, for details consult the documentation for these modules in the
eavmlib
documentation. There is now an ESP32 API for allowing coexistence of native and Erlang I2C drivers, for example, allowing the use of the nativeatomvm_ssd1306
Display driver, with a pure erlang driver for the SHT3x temperature sensor. GPIO interrupt (currently only supported on ESP32 and STM32 platforms) messages can now be sent to a designated receiver usinggpio:set_int/4
. Support forlists:split/2
has also been added. ESP32 platform now supports retrieving the device’s e-fuse MAC address withesp:get_default_mac/0
.AtomVM now uses UTF-8 encoding for atoms when using
erlang:term_to_binary/1
, in conformance with OTP-26, andbinary_to_atom/1
andatom_to_binary/1
now default to utf8. Support has been added for utf8 encoding to*_to_atom
andatom_to_*
functions.We have made improvements to the rp2040 platform that should make development workflows much smoother. The device will now accept re-flashing a new application using the
atomvm_rebar3_plugin
pico_flash
task after the application has exited. Previously the device would be unresponsive after exiting. There is also a default 20 second timeout, which the device will wait for a USB console connection to be established, before running the application. Previously our default build would start the application immediately, giving the user no time to connect to be able to see the output ofhello_world
before the application exited, and the device became unresponsive.The port call tuple format has been changed to the same format as gen_server, so cast support can be added. This change means older versions of
atomvmlib
will not work, libraries from latest version must be used. Check the Update Instructions for other breaking changes for both BEAM application developers, as well as for contributors, and driver developers using nifs or ports.Under the hood enhancements feature a new atom table, which uses less memory, and has improved performance.
Several memory related bugs have been fixed. A random number generation bug has been fixed on ESP32 and RPi2040, as well as a bug shared by both platforms that would cause invalid GPIO pull directions to be silently set to
floating
without an error.For the full set of bug fixes, changes and additions since the v0.6.0-alpha.2 release consult the Changelog, and check the Updating Instructions.
Download images and binaries are available for most platforms, except STM32 (and some generic_unix hosts for this release due to specific Mbed-TLS requirements) are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0-beta.1 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
-
AtomVM `master` branch renamed
2024/02/22 Recent updates to the name of the
master
branch.Earlier this month the name of the AtomVM
master
branch was renamed tomain
. If you have previously made a local clone of the repository, and would like to keep up to date with changes to themain
branch, there are a fewgit
commands that will rename your local copy and update the git configuration to track themain
AtomVM branch on GitHub.From inside your local clone of AtomVM:
shell$ git branch -m master main shell$ git fetch origin shell$ git branch -u origin/main main shell$ git remote set-head origin -a
At this point you now have a local clone that will stay up to date with changes in the upstream AtomVM
main
branch.We have also recently created the
release-0.6
branch, which should be used if you wish to contribute any bug fixes. If you do find a bug, please open an issue on GitHub.If you encounter a feature you think we are lacking, please open an issue for that too. Any contributions of new features should be made on the
main
branch.The AtomVM team
-
Previous Announcements
2023/12/10 Announcing AtomVM v0.6.0-alpha.2 (Pre-release)
This pre-release has a build dependency change from OpenSSL to one on Mbed-TLS to provide cryptographic functions for the generic_unix platform.
Numerous bugs have been fixed since the last release including where guards would raise exceptions instead of just being false, precision of integers used with timers which could yield to halts and wait times smaller than expected, and big endian CPUs are working again.
New features include the introduction of OTP socket interface support, support for
net:getaddrinfo/1,2
, minimal OTPssl
interface support,crypto:strong_rand_bytes/1
using Mbed-TLS on generic_unix, ESP32 and RP2040 platforms, support forcrypto:one_time/4,5
on Unix and Pico as well as forcrypto:hash/2
on Pico. Improvements for the STM32 platform include complete device configuration without the need to edit hardcoded values in the source files, complete GPIO driver support, and improved performance by enabling flash cache and i-cache.For the full set of bug fixes, changes and additions consult the Changelog.
Download images and binaries are available for most platforms, except STM32 (and some generic_unix hosts for this release due to specific Mbed-TLS requirements) are available from AtomVM Releases on GitHub. STM32 users as well as anyone needing to build a generic_unix port for a device without release binaries should consult the Build Instructions.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0-alpha.2 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
As always, tools, drivers, and modules are available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
2023/10/09 Announcing AtomVM v0.6.0-alpha.1 (Pre-release)
This is a follow up to the recent v0.6.0-alpha.0 release that fixes some bugs and adds a few new features.
The ESP32 port gains support for ULP wakeup, and expands crypto support. Basic wifi support has been added for the RPi Pico W. There is now the ability to select from heap growth strategies as a fine-tuning option to
spawn_opt/2,4
. Several platforms now have the ability to set the system clock withatomvm:posix_clock_settime/2
. A few more standard Erlang functions have been added to the core libraries as well. For a complete list of all the changes consult the Changelog.Download images and binaries are available for most platforms (for now stm32 ports must be build locally) are available from AtomVM Releases on GitHub.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0-alpha.1 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
We have a growing collection of tools, drivers, and modules available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
2023/09/01 Announcing AtomVM v0.6.0-alpha.0 (Pre-release)
After many months of work, we are happy to announce a pre-release of v0.6.0-alpha.0 of the AtomVM virtual machine, a lightweight implementation of the BEAM for small and cheap micro-controllers!
This pre-view contains many improvements and bug fixes that the AtomVM team has been working on, including SMP support on all multi-core platforms, support for the ESP32-S3, ESP32-C3, and ESP32-S2 chips, and the addition of a very basic rp2040 (a.k.a. Raspberry Pi Pico) port, as well as an emscripten port using nodejs with Wasm to run AtomVM in the browser. See the Changelog for all the improvements, bug fixes, and breaking changes since the 0.5.0 release.
Download images for the ESP32 family are available on the AtomVM Releases GitHub page. Other platforms should consult the Build Instructions for the v0.6.0-alpha.0 release.
The git repository and tarballs of the AtomVM source release for all platforms can be found on our GitHub AtomVM page.
Documentation for the v0.6.0-alpha.0 pre-release of the AtomVM virtual machine, including a Getting Started Guide, can be found at the AtomVM Documentation page.
We have a growing collection of tools, drivers, and modules available on the GitHub AtomVM Project page.
Many thanks go to Davide Bettio, for creating such a fine work of software, as well as the contributors and testers who have helped make this release possible.
The AtomVM team
2022/04/05 AtomVM Example Programs
We have extracted our example programs into a self-contained and growing github repo with minimal dependencies. For example, if you have flashed the AtomVM image to an ESP32 device, you can simply use rebar3 to build and flash your applications, making the compile/flash/debug cycle you experience on embedded devices fairly painless.
Please note that at this stage, support for building Elixir programs is quite far behind that of Erlang, so best to stick with Erlang until further notice.
© 2024 atomvm.net
•
Theme Moonwalk