Skip to content

Releases: atomvm/AtomVM

v0.7.0-alpha.1

06 Apr 21:49
v0.7.0-alpha.1
078004b

Choose a tag to compare

v0.7.0-alpha.1 Pre-release
Pre-release

This is an alpha release, the second pre-release on the road to v0.7.0. If you need maximum stability for production deployments, we recommend staying on v0.6.x. That said, we encourage you to try v0.7.0-alpha.1 and report any issues you encounter, your feedback is invaluable in shaping the stable release.

Please read the getting started guide for flashing instructions.

Added

  • Added json module to estdlib, compatible with Erlang/OTP json API
  • Added Keyword.put_new/3 to exavmlib
  • Added JSON module to exavmlib (Elixir wrapper for estdlib json)
  • Added erlang:node/1 BIF
  • Added erts_internal:cmp_term/2
  • Added short option to erlang:float_to_binary/2 and erlang:float_to_list/2
  • Added generic unix support for uart using POSIX nifs
  • Added RISC-V 64-bit (RV64IMAC) JIT backend
  • Added arm32 JIT backend
  • Added DWARF debug information support for JIT-compiled code
  • Added I2C and SPI APIs to rp2 platform
  • Added code:get_object_code/1
  • Added erlang:display_string/1 and erlang:display_string/2
  • Added Thumb-2 support to armv6m JIT backend, optimizing code for ARMv7-M and later cores
  • Added support for binary:split/2,3 list patterns and trim / trim_all options
  • Added timer:send_after/2, timer:send_after/3 and timer:apply_after/4

Changed

  • ~10% binary size reduction by rewriting module loading logic
  • erlang:float_to_binary/2 and erlang:float_to_list/2 now accept {decimals, 0..253} and {scientific, 0..249}
  • erlang:binary_to_float/1 and erlang:list_to_float/1 now use locale-independent parsing and strict format validation
  • ESP32: the boot.avm partition for Erlang-only images has been increased from 256KB to 512KB, matching the Elixir partition layout. The main.avm offset is now 0x250000 for all images (previously 0x210000 for Erlang-only).

Fixed

  • Fixed erlang:cancel_timer/1 return type spec and documentation to match OTP
  • Fixed map type ordering in term comparison to match OTP specification (maps should order between tuples and nil)
  • Fixed a bug in bs_match get_tail logic that occurred with OTP26-compiled beams
  • Fixed locale-dependent decimal separator in erlang:float_to_binary and erlang:float_to_list
  • Fixed erlang:binary_to_float/1 and erlang:list_to_float/1 returning inf for overflow instead of raising badarg
  • Fixed erlang:raise/3 with a built stacktrace causing an assertion failure when the re-raised exception passes through a non-matching catch clause

Removed

  • Removed support for OTP versions < 26
  • Removed old json_encoder module (now standard Erlang/OTP json module is available)

v0.7.0-alpha.0

20 Mar 13:04
v0.7.0-alpha.0
f60c037

Choose a tag to compare

v0.7.0-alpha.0 Pre-release
Pre-release

v0.7.0-alpha.0 release

This is an alpha release, the first pre-release on the road to v0.7.0. It represents over two year of development and introduces several groundbreaking features. While we have taken care to test thoroughly, APIs may still evolve before the stable release. If you need maximum stability for production deployments, we recommend staying on v0.6.x. That said, we encourage you to try v0.7.0-alpha.0 and report any issues you encounter, your feedback is invaluable in shaping the stable release.

OTP-28 and OTP-29 are now supported. This is a major improvement over v0.6.6 which did not include OTP-28 support. On macOS, Homebrew and MacPorts default to OTP-28 or later, so this release works out of the box with default system installations. You can use asdf or mise to manage multiple Erlang/OTP versions if needed.

Please read the getting started guide for flashing instructions.

Highlights

Distributed Erlang

AtomVM now supports the Erlang distribution protocol, allowing AtomVM nodes running on microcontrollers to connect to standard BEAM nodes or other AtomVM instances via message passing. This release includes:

  • A pure Erlang erl_epmd client implementation
  • Support for external pids, ports, and refs in external terms
  • Remote shell support (with the necessary io and io_lib functions)
  • Cookie-based authentication
  • The distribution protocol supports alternative transport carriers beyond TCP/IP, opening up communication paths specific to embedded systems

This enables powerful use cases: debugging an MCU directly from a standard OTP shell, coordinating multiple microcontrollers via message passing, and building mixed clusters of BEAM and AtomVM nodes. TLS distribution is not yet available.

JIT Compilation and Multiple Execution Modes

AtomVM now supports four execution strategies:

  • Emulated - interprets BEAM bytecode (default, small and portable)
  • JIT - runtime compilation to native code
  • Native (AoT) - pre-compiled native code deployment
  • Hybrid - native code with bytecode fallback for unsupported opcodes

The JIT compiler is itself written in Erlang. Supported JIT architectures include RISC-V32, ARM v6-M (Cortex-M0+), x86_64, and aarch64.

Big Integer Support

AtomVM now supports integers up to 256-bit (sign + 256-bit magnitude). All arithmetic operations (+, -, *, div, rem, abs, etc.) and all bitwise operations (band, bor, bxor, bnot, bsl, bsr) work with big integers. Serialization via binary_to_term/1 and term_to_binary/1,2 is also supported.

Cryptographic Operations

A comprehensive crypto module has been added:

  • Key generation and exchange (crypto:generate_key/2, crypto:compute_key/4)
  • Digital signatures (crypto:sign/4, crypto:verify/5)
  • Streaming hashes and MACs (crypto:hash_init/update/final, crypto:mac_init/update/final)
  • AEAD encryption (crypto:crypto_one_time_aead)
  • PBKDF2 key derivation (crypto:pbkdf2_hmac/5)
  • Ed25519 support via optional libsodium integration (AVM_USE_LIBSODIUM=ON)

ETS

A limited but functional implementation of the OTP ets interface is now available, including support for set, bag, and duplicate_bag table types with operations such as insert, lookup, delete, member, update_counter, update_element, and more.

Expanded Hardware Support

  • ESP32C5 and ESP32C61: initial support for these new Espressif chips
  • ESP32P4 WiFi: WiFi connectivity via esp-wifi-external (requires ESP-IDF v5.4+)
  • 10 new STM32 families: enabled by switching to the official ST HAL/LL SDK
  • ESP-IDF v5.5: release images are now built with ESP-IDF v5.5

Elixir Improvements

  • Native GenServer and Supervisor support
  • Added Function.ex and Protocol.ex for improved Elixir 1.18 support
  • Process.link/1 and Process.unlink/1
  • Base64 encode/decode functions in the Base module
  • ESP32 builds can now enable Elixir support with a simple cmake flag: -DATOMVM_ELIXIR_SUPPORT=on

WebAssembly

AtomVM's Emscripten/WASM port continues to improve. Pre-built binaries are available for both Node.js and browser environments. This release powers projects like Popcorn, which runs Elixir directly in the browser, including the Elixir Language Tour.

POSIX File and Directory Operations

New POSIX functions for file I/O (seek, pread, pwrite, fsync, ftruncate, rename, stat, fstat) and directory operations (mkdir, rmdir) are now available on supported platforms.

Upgrade Notes

If upgrading from v0.6.x, please review the UPDATING.md file. Key changes:

  • Entry point change: init:boot/1 is now used as the entry point if it exists. It automatically starts the kernel application and calls start/0 from the identified startup module. Users who were manually starting the kernel application (typically for distribution) must stop doing so. Starting net_kernel is still required.
  • Ports replace pids for native processes: Port drivers should now return ports instead of pids. Socket matching code may need to change from is_pid/1 to is_port/1.
  • bsl overflow checking: Bitshift left now checks for overflows. Mask values before shifting: e.g. (Value band 0xF) bsl 252.
  • binary_to_integer/list_to_integer: No longer raise overflow: they raise badarg when the result exceeds 256 bits.
  • ESP32 Elixir builds: Can now be configured with idf.py -DATOMVM_ELIXIR_SUPPORT=on set-target ${CHIP} instead of copying partition files.
  • C API: The externalterm module has been renamed to external_term with a completely new API.
  • Removed: The deprecated network_fsm module has been removed.

Pre-built Binaries

Pre-built binaries are available for download from this release page:

  • ESP32: flashable images for esp32, esp32c2, esp32c3, esp32c5, esp32c6, esp32c61, esp32s2, esp32s3, esp32h2, and esp32p4 (standard and Elixir flavors)
  • Raspberry Pi Pico: UF2 firmware for pico, pico_w, pico2, and pico2_w (including RP2350 RISC-V variants)
  • WebAssembly: JS+WASM bundles for Node.js and browser environments

All binaries include SHA256 checksums for verification.

Added

  • Added a limited implementation of the OTP ets interface
  • Added code:all_loaded/0 and code:all_available/0
  • Added erlang:loaded/0
  • Added erlang:split_binary/2
  • Added inet:getaddr/2
  • Added support for external pids and encoded pids in external terms
  • Added support for external refs and encoded refs in external terms
  • Introduce ports to represent native processes and added support for external ports and encoded ports in external terms
  • Added atomvm:get_creation/0, equivalent to erts_internal:get_creation/0
  • Added menuconfig option for enabling USE_USB_SERIAL, eg. serial over USB for certain ESP32-S2 boards etc.
  • Partial support for erlang:fun_info/2 and erlang:fun_info/1
  • Added support for registered_name in erlang:process_info/2 and Process.info/2
  • Added net:gethostname/0 on platforms with gethostname(3).
  • Added socket:getopt/2
  • Added supervisor:terminate_child/2, supervisor:restart_child/2 and supervisor:delete_child/2
  • Added support for 'erlang:--/2'.
  • Added esp:partition_read/3, and documentation for esp:partition_erase_range/2/3 and esp:partition_write/3
  • Added support for list insertion in 'ets:insert/2'.
  • Support to OTP-28
  • Added atomvm:subprocess/4 to perform pipe/fork/execve on POSIX platforms
  • Added erl_epmd client implementation to epmd using socket module
  • Added support for socket asynchronous API for recv, recvfrom and accept.
  • Added support for UDP multicast with socket API.
  • Added support for ets:update_counter/3 and ets:update_counter/4.
  • Added erlang:+/1
  • Added lists:append/1 and lists:append/2
  • Added erlang:spawn_monitor/1, erlang:spawn_monitor/3
  • Added lists:dropwhile/2.
  • Support for float/1 BIF.
  • Added erlang:get/0 and erlang:erase/0.
  • Added erlang:unique_integer/0 and erlang:unique_integer/1
  • Added support for 'ets:delete/1'.
  • Added lists:flatmap/2
  • Added io:fwrite/1,2,3 and io:format/3 as well as few io functions required by remote shell
  • Added code:is_loaded/1 and code:which/1
  • Added several io_lib functions including io_lib:fwrite/2 and io_lib:write_atom/1
  • Added init:get_argument/1, init:get_plain_arguments/0 and init:notify_when_started/1
  • Added application:get_env/2
  • Added CodeQL analysis to esp32, stm32, pico, and wasm workflows
  • Added Function.ex and Protocol.ex improving Elixir 1.18 support
  • Added WiFi support for ESP32P4 via esp-wifi-external for build with ESP-IDF v5.4 and later
  • Added Process.link/1 and unlink/1 to Elixir Process.ex
  • Added erlang:module_loaded/1
  • Added binary:longest_common_prefix/1
  • Added binary:replace/3, binary:replace/4
  • Added binary:match/2 and binary:match/3
  • Added supervisor:which_children/1 and supervisor:count_children/1
  • Added monitored_by in process_info/2
  • Added mock implementation for current_stacktrace in process_info
  • Added erlang:list_to_bitstring
  • Reimplemented lists:keyfind, lists:keymember and lists:member as NIFs
  • Added AVM_PRINT_PROCESS_CRASH_DUMPS option
  • Added lists:ukeysort/2
  • Added support for big integers up to 256-bit (sign + 256-bit magnitude)
  • Added support for big integers in binary_to_term/1 and term_to_binary/1,2
  • Added proc_lib
  • Added gen_server ...
Read more

v0.6.6

23 Jun 23:04
v0.6.6
ff993a8

Choose a tag to compare

v0.6.6 release

Unfortunately, this release does not yet include support for OTP-28. We recommend using a supported version such as OTP-27 for the best experience with AtomVM v0.6.6.

That said, if you're eager to experiment, our main development branch inc ludes support for OTP-28. We strive to keep up with the latest OTP changes, so adventurous users are welcome to try it outโ€”with the usual caution that comes with using a development branch.

If you're on macOS, be aware that both Homebrew and MacPorts now default to OTP-28. To install an earlier version, you can use:

brew install erlang@27

Alternatively, consider using asdf or mise to manage multiple Erlang/OTP versions with ease.

Please, read the getting started guide for flashing instructions.

Added

  • Added the ability to run beams from the CLI for Generic Unix platform (it was already possible with nodejs and emscripten)
  • Added preliminary support for ESP32P4 (no networking support yet).
  • Added memory info in out_of_memory crash logs to help developers fix memory issues.
  • Added documentation and function specs for uart driver
  • Added uart:read/2 with a timeout parameter.
  • Missing erlang:is_function/2 BIF
  • Added erlang:is_record/2
  • Added ability to set per-interface dhcp_hostname on Pico W if present in config.

Fixed

  • Fixed specifications of nifs from esp_adc module
  • ESP32: fix gpio:init/1 on GPIO >= 32
  • Adding missing check, passing a non numeric argument to a function expecting a floating point might lead to a crash in certain situations.
  • Fixed several bugs in http_server (#1366)
  • Fixed generic_unix socket_driver to return {gen_tcp, closed} when socket is closed on Linux
    instead of {gen_tcp, {recv, 104}}
  • Fixed a memory leak where modules were not properly destroyed when the global context is destroyd
  • alisp: fix support to variables that are not binaries or integers.
  • Fixed destruction of ssl-related resources
  • Fixed corruption when dealing with specific situations that involve more than 16 x registers when certain VM instructions are used.
  • Fixed ESP32 GPIO interrupt trigger none
  • Fixed an issue where a timeout would occur immediately in a race condition
  • Fixed SPI close command
  • Added missing lock on socket structure
  • Fixed a race condition affecting multi-core MCUs where a timeout would not be properly cleared
  • Fixed a double free when esp32 uart driver was closed, yielding an assert abort
  • Fixed compilation with latest debian gcc-arm-none-eabi
  • Fixed network:stop/0 on ESP32 so the network can be started again
  • Fixed a memory corruption caused by binary:split/2,3
  • Fixed deadlock in socket code
  • Fixed bug in opcode implementation (select_val): when selecting a value among many others a shallow comparison was performed, so it was working just for plain values such as atoms and small integers
  • Fixed support for setting esp32 boot_path in NVS.
  • Fixed race conditions in network:start/stop.
  • Fixed crash calling network:sta_rssi(), when network not up.
  • Fixed error handling when calling min and max with code compiled before OTP-26: there was a bug when handling errors from BIFs used as NIFs (when called with CALL_EXT and similar opcodes)
  • Fixed matching of binaries on unaligned boundaries for code compiled with older versions of OTP
  • Added missing out of memory handling in binary_to_atom
  • Fixed call to funs such as fun erlang:'not'/1, that make use of BIFs
  • Fixed potential crashes or memory leaks caused by a mistake in calculation of reference counts and a race condition in otp_socket code
  • Fixed an out of memory issue by forcing GC to copy data from message fragments
  • Fixed a bug where calling repeatedly process_info on a stopped process could cause an out of memory error
  • Fixed possible concurrency problems in ESP32 UART driver
  • Fixed concurrency and memory leak related to links and monitors
  • Fixed issues with parsing of line references for stack traces
  • Fixed memory corruption issue with erlang:make_tuple/2
  • Fix potential use after free with code generated from OTP <= 24
  • Fix is_function/2 guard
  • Fixed segfault when calling lists:reverse/1 (#1600)
  • Fixed nif_atomvm_posix_read GC bug
  • Fixed erlang:is_number/1 function, now returns true also for floats
  • Fixed unlink protocol and add support for link/1 on ports
  • Do not abort when an out of memory happens while loading a literal value
  • Fixed potential memory corruption when handling integer immediates that are stored as boxed integer (this never happens with integers < 28 bits)
  • Correctly set Pico-W unique dhcp hostname when using the default, previously all rp2040 devices used the same "PicoW" dhcp hostname, causing collisions when multiple rp2040 are on the same network. (See issue #1094)

Changed

  • ESP32 UART driver no longer aborts because of badargs in configuration, instead raising an error
  • ESP32: v0.6.6 uses esp-idf v5.4.1 for pre-built images and v5.4.x is the suggested release also for custom builds

v0.6.5

15 Oct 00:37
v0.6.5
388940d

Choose a tag to compare

v0.6.5 release

Please, read the getting started guide for flashing instructions.

Important note: this version uses a different partitioning layout for ESP32 Elixir images (and dedicated images) that have room for additional Elixir modules. Make sure to use updated tooling and offsets.

Known Issues

  • i2c:write_bytes on ESP32 seems not working, use i2c:write_byte instead.

Added

  • ESP32: add a new Elixir release "flavor" with a bigger boot.avm partition that has room for
    Elixir standard library modules
  • ESP32: --boot option to mkimage.sh tool
  • Add erlang:atom_to_binary/1 that is equivalent to erlang:atom_to_binary(Atom, utf8)
  • Support for Elixir String.Chars protocol, now functions such as Enum.join are able to take
    also non string parameters (e.g. Enum.join([1, 2], ",")
  • Support for Elixir Enum.at/3
  • Add support for is_bitstring/1 construct which is used in Elixir protocols runtime.
  • Add support to Elixir Enumerable protocol also for Enum.all?, Enum.any?, Enum.each,
    Enum.filter, Enum.flat_map, Enum.reject, Enum.chunk_by and Enum.chunk_while
  • Support for maps:merge_with/3
  • Support for lists:last/1 and lists:mapfoldl/3
  • Add support to Elixir for Process.send/2 Process.send_after/3/4 and Process.cancel_timer/1
  • Add support for handle_continue callback in gen_server
  • Support for Elixir List.Chars protocol
  • Support for gen_server:start_monitor/3,4
  • Support for code:ensure_loaded/1
  • Support for io_lib:latin1_char_list/1
  • Add support to Elixir for Keyword.split/2
  • Support for binary:split/3 and string:find/2,3
  • Support for large tuples (more than 255 elements) in external terms.
  • Support for io:put_chars/2
  • Support for lists:nthtail/2
  • Support for Elixir IO.chardata_to_string/1
  • Support for Elixir List.duplicate/2
  • Support for binary:copy/1,2
  • Support for directory listing using POSIX APIs: (atomvm:posix_opendir/1,
    atomvm:posix_readdir/1, atomvm:posix_closedir/1).
  • ESP32: add support for esp_adc ADC driver, with Erlang and Elixir examples
  • Add handler for ESP32 network driver STA mode beacon_timeout (event: 21), see issue
    #1100
  • Support for mounting/unmounting storage on ESP32 (such as SD or internal flash) using
    esp:mount/4 and esp:umount/1
  • Support for binary_to_integer/2
  • Support for binary:decode_hex/1 and binary:encode_hex/1,2
  • Support for Elixir Base.decode16/2 and Base.encode16/2
  • Make external term serialize functions available without using externalterm_to_binary so terms
    can be written directly to a buffer.
  • Support for erlang:list_to_integer/2
  • Add externalterm_to_term_copy that can be safely used from NIFs taking temporary buffers

Changed

  • ESP32: Elixir library is not shipped anymore with esp32boot.avm. Use elixir_esp32boot.avm
    instead
  • Enum.find_index and Enum.find_value support Enumerable and not just lists
  • Install AtomVM libraries source code and binaries for better dialyzer integration
  • Made the device_config properties list in spi:open/1 optional (defaults to []), so you can use the function with only a bus_config

Fixed

  • ESP32: content of boot.avm partition is not truncated anymore
  • ESP32: Fixed gpio:set_int to accept any pin, not only pin 2
  • Fix memory corruption in unicode:characters_to_binary
  • Fix handling of large literal indexes and large extended literal indexes
  • unicode:characters_to_list: fixed bogus out_of_memory error 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)
  • Fix several uses of free on prevously released memory on ESP32, under certain error condition using
    network:start/1, that would lead to a hard crash of the VM.
  • Fix a bug in ESP32 network driver where the low level driver was not being stopped and resoureces were not freed
    when network:stop/0 was used, see issue #643
  • uart:open/1,2 now works with uppercase peripheral names

v0.6.4

18 Aug 08:49
v0.6.4
00ff986

Choose a tag to compare

v0.6.4 release.

Please, read the getting started guide for flashing instructions.

Added

  • Implement gpio:init/1 on esp32 to initialize pins for GPIO usage, which some pins
    require depending on default function and bootloader code
  • Implement missing opcode 161 (raw_raise), that looks more likely to be generated with Elixir code
  • Support for Elixir Map.replace/3 and Map.replace!/3
  • Support for Elixir Kernel.struct and Kernel.struct!
  • Support for Elixir IO.iodata_to_binary/1
  • Support for Elixir exceptions: Exception module and the other error related modules such as
    ArgumentError, UndefinedFunctionError, etc...
  • Support for Elixir Enumerable and Collectable protocol
  • Support for Elixir Enum functions: split_with, join, map_join, into, reverse,
    slice and to_list
  • Support for Elixir MapSet module
  • Support for Elixir Range module
  • Support for Elixir Kernel.min and Kernel.max
  • Support (as stub) for erlang:error/3 (that is required from Elixir code)

v0.6.3

20 Jul 21:36
v0.6.3
3a107ae

Choose a tag to compare

v0.6.3 release.

Please, read the getting started guide for flashing instructions.

Added

  • Simple http client, that can be used for different use case such as downloading OTA updates
  • Elixir support for Keyword.merge Keyword.take Keyword.pop(!) Keyword.keyword? Keyword.has_key? functions.
  • Support for ESP32-H2
  • lists:keytake/3 implemented.
  • Support for setting channel used by network driver wifi access point.
  • Support for maps:iterator/2 and ~kp with io_lib:format/2 that were introduced with OTP26.
  • Support for erlang:apply/2
  • Support for lists:keystore/4
  • Support for erlang:size/1 bif
  • Support for USB serial output on ESP32 (needs to be manually enabled)
  • Support for lists:filtermap/2
  • Support for standard library queue module
  • Support for maps:from_keys/2 NIF
  • Support for standard library sets module

Changed

  • 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.
  • Default size of ESP32 RTC slow memory from 4086 to 4096, except on ESP32-H2 where it's 3072
  • Update byte_size/1 and bit_size/1 to implement OTP27 match context reuse optimization OTP-18987.

Fixed

  • Fix bug (with code compiled with OTP-21) with binary pattern matching: the fix introduced with
    02411048 was not completely right, and it was converting match context to bogus binaries.
  • Fix creation of multiple links for the same process and not removing link at trapped exits.
    See issue #1193.
  • Fix error that is raised when a function is undefined
  • Fix a bug that could yield crashes when functions are sent in messages
  • Fix bug where failing guards would corrupt x0 and x1
  • Fix a memory leak when raising out of memory error while executing PUT_MAP_ASSOC instruction

v0.6.2

26 May 14:34
v0.6.2
1a52db9

Choose a tag to compare

v0.6.2 release.

Please, read the getting started guide for flashing instructions.

CHANGELOG

Added

  • Support for DragonFly BSD (generic_unix platform).
  • Added guards is_even and is_odd to the Integer module
  • Add a number of functions to proplists module, such as delete/2, from/to_map/1, etc...
  • Add esp:deep_sleep_enable_gpio_wakeup/2 to allow wakeup from deep sleep for ESP32C3 and ESP32C6.
  • Obtain RSSI of the current connection with network:sta_rssi/0 on ESP32.
  • Pico-W support for network:sta_rssi/0.
  • Add support to ESP32C2

Fixed

  • Fix invalid read after free in ssl code, see also issue
    #1115.
  • Fix semantic of ssl:recv(Socket, 0) to return all available bytes, matching what OTP does.
  • Fix binary option handling in ssl:connect/3 so binary can be used instead of
    {binary, true}.
  • Fix scheduling of trapped process that were wrongly immediately rescheduled before being signaled.
  • Fix gen_tcp and ssl types.
  • Fix documentation and specification of esp:sleep_enable_ext0_wakeup/2 and esp:sleep_enable_ext1_wakeup/2.

Changed

  • Stacktraces are included by default on Pico devices.
  • Changed ssl default from {active, false} to {active, true} in order to have same behavior as
    OTP. Since active mode is not supported right now, active must be explicitly set to false:
    ssl:connect(..., ..., [{active, false}, ...]), otherwise it will crash.

v0.6.1

20 Apr 16:11
v0.6.1
bc9b6e1

Choose a tag to compare

v0.6.1 release.

Please, read the getting started guide for flashing instructions.

CHANGELOG

Added

  • Added experimental optimized GC mode that makes use of C realloc instead of copying data around, it can be enabled with -DENABLE_REALLOC_GC=On.

Fixed

  • Fix bug in erlang:ref_to_list/1 and erlang:display/1: the unique integer was truncated on some 32-bit architectures
  • Stop hardcoding erl_eval as module name in both display and fun_to_list
  • Correctly display and convert to list funs such as fun m:f/a
  • Fixed bug in STM32 cmake that could cause builds with multiple jobs to fail due to incorrect artifact dependency
  • Fix crash on macOS due to missing call to psa_crypto_init for TLS 1.3
  • Fix crypto test on rp2040

v0.6.0

05 Mar 17:33
v0.6.0
5208cbb

Choose a tag to compare

First v0.6.x series stable release!

Please, read the getting started guide for flashing instructions.

This release introduces a lot of new features compared to v0.5.x: such as support for multiple cores, support for beam files compiled with OTP 26, OTP lower level socket API, resources and a richer standard library, etc...

It is very hard to make a complete list of changes, so I suggest to take a look to the changelog file.

Also special thanks to all the contributors for their amazing work, that made this release possible.

v0.6.0-rc.0

03 Mar 22:19
v0.6.0-rc.0
27351a2

Choose a tag to compare

v0.6.0-rc.0 Pre-release
Pre-release

v0.6.0-rc.0 release.

Please, read the getting started guide for flashing instructions.

CHANGELOG

Added

  • BOOTLOADER_OFFSET for all current Esp32 models.
  • Added API to send messages from FreeRTOS tasks or pthreads, typically to
    easily support integration with Esp32 callbacks

Fixed

  • BOOTLOADER_OFFSET was incorrect for Esp32-C6 and Esp32-S2.
  • Fixed a bug that would fail to set DHCP hostname in STA+AP mode on all ESP32 platforms.
  • ESP32-S3: crash in network driver caused by a smaller stack size for scheduler threads, when
    calling esp_wifi_init(). See also issue #1059.
  • Fixed Esp32 network driver on non-SMP builds
  • ESP32: fixed bug in gpio:stop/0 and gpio:close/1 that would cause the VM to crash.