Releases: Moddable-OpenSource/moddable
Moddable SDK 4.8.0
The Moddable SDK 4.8.0 release contains improvements made between May 5, 2024 and June 5, 2024.
This release features very low-level improvements to the Moddable SDK. Highlights include:
- Updated to ESP-IDF v5.2.2 for ESP32 family MCUs
- ECMA-419 Files API on embedded using LittleFS
- Reliability improvements for BLE using NimBLE
Important: The Moddable SDK now recommends using ESP-IDF v5.2.2, the most recent production version of the Espressif SDK. This version contains major improvements to BLE and Wi-Fi compared to the previously recommended v5.1.2. Updating to ESP-IDF v5.2.2 is straightforward. For the vast majority of Moddable SDK projects, no JavaScript code are required. The Moddable SDK contains instructions for updating on macOS, Linux, and Windows.
Release Details
- XS JavaScript engine
- Fix
ModuleSource
instancebindings
property for modules imported only for side-effects (reported by @kriskowal) - Add
xsBeginHostExit
andxsEndHostExit
to allow catching fatal exceptions - Default for
mxBoundsCheck
is now enabled to favor reliable execution (catching stack overflows, for example) - Consistent definitions of
xsNewHost*
functions between xs.h and xsAll.h, needed for WebAssembly builds (contributed by @SMotaal) - Add callbacks for new Base64 functions for compatibility with snapshots (contributed by @SMotaal)
- Lockdown creates secure functions with
length
that matches original (for test262 compatibility) - Metering
- Implement for JavaScript parser
Array
,RegExp
,String
, andTypedArray
loops that don't invoke scripts
- Fixes for issues uncovered through extensive fuzz testing. Thank you to @Agoric for their support of this work.
ArrayBuffer.fromBigInt
range check fixed- Hostile mapper function that detaches buffer no long crashes
TypedArray
- Fix
- ECMA-419
- nRF52 Serial
- Restart receive after read error
- Enable
useCount
to avoid exceptions after closing - Reliability improvements
- Files
- Embedded
- Implementation using LittleFS. Passes all unit tests on ESP32 family.
- Linux
- POSIX file support available on Linux
- Linux uses
RESOLVE_BENEATH
to fully sandbox file access
- Implement link support for POSIX file systems
- Embedded
- PWM
- PWM on ESP-IDF v5.2.x doesn't support low frequencies as fully as previous versions of ESP-IDF. An exception is thrown if an unsupported frequency is requested.
- ESP32 H2, ESP32 C6, and ESP32 C3 now support ECMA-419 builds
- ESP32 C6 and ESP32 H2 do not provide Pulse Count IO
- ESP32 RISC-V devices do not provide GCC atomics. IO modules now work around this.
- nRF52 Serial
- Modules
- HTML5 WebSocket implementation supports optional options object to include full ECMA-419
ws:
orwss:
configuration - HTML5 EventSource implementation reports
status
andstatusText
so scripts can detect/handle errors (contributed by @stc1988) - Piu supports slow motion rendering (60x slower than real-time)
- HTML5 WebSocket implementation supports optional options object to include full ECMA-419
- Devices
- ESP32
- Add Wi-Fi
station_connect
andstation_disconnect
events for ESP32 targets (contributed by @stc1988) - Audio Output amplifier control on ESP32 improvements
- Turns off sooner after audio completes
- Doesn't toggle if new audio queued while playing
- BLE for NimBLE on ESP-32
- Improvements to reliability, especially after closing, motivated by behavior changes in ESP-IDF 5.2.x
- Bug fix in read descriptors. Previously some descriptor look-ups failed resulting in values being provided in an incorrect format. In some rare cases, this may require updating project code.
- In rare cases, scan results could be delivered after terminating scan. This has been fixed.
- ILI9341 parallel driver
- Trigger transmit simplifications
- Larger default rendering buffer (32 scan lines)
- Eliminate potential tear on first frame after rendering pause
- Add Wi-Fi
- nRF52
- Option to read User Information Configuration Registers (UICR) to a file using J-Link with the
-t readuicr
option tomcconfig
- Only enable QSPI in build when
USE_QSPI
is set (off by default)
- Option to read User Information Configuration Registers (UICR) to a file using J-Link with the
- ESP32
- TypeScript
- Tools
xst
- Support saving and loading test results as configurations to easily compare results between test runs
- Adjust memory limit for oss-fuzz to reduce out-of-memory errors
- Patches to limit memory use now thread safe
ble2gatt
- Requires array values to be arrays, not single values
- Tests
- Add unit tests for draft ECMA-419 Files API
- BLE client and server tests updated
- Fix tests related to descriptors now that look-up is working correctly
- If service look-up fails (rare, but happens) provide descriptive error message
- NimBLE doesn't provide RSSI immediately after connection, so wait for services to be polled before requesting RSSI
Contact Us
If you have questions or suggestions about anything here, please reach out:
- Start a new Discussion on our GitHub repository
- Drop by our Gitter to chat
- Contact us on Twitter at @moddabletech
Moddable SDK 4.7.0
The Moddable SDK 4.7.0 release contains improvements made between April 3, 2024 and May 5, 2024.
This release features very low-level improvements to the Moddable SDK. Highlights include:
- Nordic nRF52 IO enhancements
- String performance optimizations
- First implementation of draft ECMA-419 Files API
- Significant additions to
xst
, the XS test tool, to expand test coverage including running test262 under Hardened JavaScript
Note: This release is expected to be the last using ESP-IDF 5.1.2. We will migrate to ESP-IDF 5.2.1 in the next few weeks. ESP-IDF 5.2.1 has many Wi-Fi and BLE improvements.
Release Details
-
XS JavaScript engine
- String optimizations
- Background: XS optimizes strings to minimize memory use. For some operations on larger strings (over 1024 bytes), this reduces performance.
- Added optional side-table to optimize common string operations. The side-table caches the following information for the most recently used strings:
- String length in bytes
- String length in Unicode codepoints
- Flag indicating string is 7-bit only ASCII
- Last accessed index in bytes and Unicode codepoints
- Side-table improves performance of common operations by 100x or more for long strings
- Disabled by default in embedded runtimes
- Enabled by default in command line build tools and
xsbug
- Upgrade to
fdlibm
from FreeBSD (previously using Netlib version)- Benefits
- Actively maintained version
- Fixes several undefined behavior errors
- Generates results consistent with V8
- Note: XS does not use
fdlibm
by default but provides it as an option for runtimes that need numerical consistency beyond what ECMA-262 requires
- Benefits
- Fixes for issues uncovered through fuzz testing. Thank you to @Agoric for their support of this work.
String.prototype.at
could read from arbitrary memory if garbage collection occurred while validating arguments- Eliminate overflow in newly added
Uint8Array
toBase64
andtoHex
- Fix build conflict between string cache and metering (contributed by @raphdev)
- String optimizations
-
Modules
- ECMA-419
- Early implementation of Files for ECMA-419 3rd Edition. This is currently POSIX-only, for macOS and Linux. Embedded device support and unit tests are planned.
- Poco
- Option to allocate pixel buffers in DMA capable memory as required by ILI9341 (MIPI) 8-bit parallel display driver
- Let display driver set minimum size of pixel rendering buffer
- ILI9341 (MIPI) 8-bit parallel display driver keeps display output disabled until first frame is drawn to eliminate start-up display glitch
- ECMA-419
-
Devices
- nRF52
- Improvements when building on nRF targets on Windows
USE_WDT
supported- Don't build USB sources on device without USB (UART-only)
- ECMA-419 PWM
hz
getter returns actual frequency, not requested frequency- Support more frequencies with nrF52 specific
top_value
property in constructor's options object
- Instrumentation supported on UART-only builds
- Reset pins to default configuration when closed (not in use). This can reduce energy use.
- Uses SPI2 by default, instead of SPI3, to work around intermittent start-up failures
- Fix build conflict with nRF52
_read
and newread
symbol from XS Base64 support
- Improvements when building on nRF targets on Windows
- ESP32
- Backlight management changes for Hosts that implement
Backlight
class (e.g. Moddable Two, Moddable Display 2)- Commodetto and Piu turn on backlight for projects that include them
- Projects that don't use Commodetto or Piu leave backlight off at start-up
- Backlight management changes for Hosts that implement
- nRF52
-
Documentation
- Add note about working with ESP32 devices that have both USB and UART ports
- Document XS build flags related to strings for configuring ports
- Fix broken links in documentation (contributed by @stc1988). Discovered as part of the project translating Moddable SDK documentation into Japanese.
-
Tools
xst
- Option to track all XS memory allocations to support more efficient fuzzing
- Optionally abort when memory limit exceeded
- Free memory on unrecoverable VM exists
- Source code split into three parts to contain test262 and fuzzing support in their own files for easier maintenance
- Profiling data includes metering count when metering is enabled
- Remove code to disable LSAN, now that xst can clean-up memory allocations on abort (contributed by @raphdev)
- Options to run test262 under lockdown (
-l
) and inside a Compartment after lockdown (-lc
) to validate test262 conformance under Hardened JavaScript.
- Option to track all XS memory allocations to support more efficient fuzzing
serial2xsbug
on macOS suggests launching xsbug if attempt to connect to it failsnodered2mcu
maps Blockly to Function node (enables Blockly support for embedded JavaScript using Node-RED) (thanks to @ralphwetzel for the suggestion and @spillz-dxb for the motivation) @phoddie/node-red-mcu#126
Contact Us
If you have questions or suggestions about anything here, please reach out:
- Start a new Discussion on our GitHub repository
- Drop by our Gitter to chat
- Contact us on Twitter at @moddabletech
Moddable SDK 4.6.0
The Moddable SDK 4.6.0 release contains improvements made between March 4, 2024 and April 3, 2024.
Highlights of this release include:
- M5Nano C6 and M5Stack Core 2 v1.1 device support
- Support for proposed standard Base64 and Hex extensions to
Uint8Array
from Ecma TC39. XS is the first JavaScript engine to ship support for this proposal! Please give it a try to help evaluate the design before it is finalized. - fontbm now included in the release tools binaries making it easier than ever to use custom fonts in your projects (if you don't use the downloadable release binaries, you'll still continue building fontbm yourself)
Note: This release is expected to be the last using ESP-IDF 5.1.2. We will migrate to ESP-IDF 5.2.1 in the next few weeks. ESP-IDF 5.2.1 has many Wi-Fi and BLE improvements.
Release Details
- Devices
- Add support for M5Stack Core 2 v1.1. (Contributed by @meganetaaan and first time contributor @RChikamura!)
- Add support for M5Nano C6 (
esp32/m5nanoc6
) (contributed by @stc1988) - Add
esp32/esp32h2_cdc
andesp32/esp32c6_cdc
platform targets for USB debugging (motivated by @stc1988) #1326
- ESP32 family
- Wi-Fi now clears credentials when done with a connection to avoid unexpected reconnects
- ECMA-419
- ILI9341_P8 driver
- Defaults to 50 FPS
- Enable tearing-effect interrupt
- Fixes for compatibility with testmc
- Modules
EventSource
(for Server-Sent Events) now supportsmethod
,headers
, andbody
options. This was motivated by certain AI cloud services.- AudioOut and
pins/servo
modules now link on Linux for convenience when using the simulator (Reported by @ronron-gh) #1328 - Piu outline shape object supports disabling bounding box clip
- zlib encoder and decoder modules reduce native stack size by moving buffers from stack to heap. This allows the modules to be used reliably with the default stack configurations.
- XS
- Base64 / Hex Stage 3 proposal fully implemented
- See proposal's playground for documentation and examples
- Passes 100% of test262 tests
- API designed enables streaming decoding and encoding to reduce peak memory use. See the example.
- Moddable SDK modules and examples updated to use new JavaScript language Base64 and Hex transformations in place of Moddable SDK Base64 and Hex modules
Hex
andBase64
modules still supported, but new code is recommended to use the new JavaScript language features
- Fixes for issues uncovered through fuzz testing. Thank you to @Agoric for their support of this work.
- Obscure bug in
DataView.prototype.slice
triggered by hostile use ofspecies
that triggered a call tomemcpy
with overlapping ranges - Obscure native stack overflow in
RegExp
parser - Reliably convert
-9223372036854775808
toBigInt
- Obscure bug in
- Base64 / Hex Stage 3 proposal fully implemented
- Tools
fontbm
font generator- Supports user supplied character files. Documentation. (Motivated by work by @kitazaki and input from @NW-Lab) phoddie/node-red-mcu#123
- If
fontbm
is available in the default$PATH
, then$(FONTBM)
environment variable no longer needs to be set
- test262 now runs on ESP32-S3 devices using
esp32/esp32s3
platform target xst
now has-b
option to load binary files as JavaScript source text (useful for fuzzer generated test cases)- Disable ASAN on RegExp stack check for more reliable fuzzing (contributed by @raphdev)
- Tests
- Wi-Fi scan cancel test waits for final scan to complete
- Wi-Fi mode off test uses
$DONE(err)
instead of throwing - Wi-Fi constructor BSSID test uses highest signal strength access point if more than one available to improve reliability of test
- Wi-Fi timeouts increased to allow tests to pass in more environments
- TypeScript
- Typings for the standalone easing functions, recently split out from Piu. (Contributed by @stc1988)
Contact Us
If you have questions or suggestions about anything here, please reach out:
- Start a new Discussion on our GitHub repository
- Drop by our Gitter to chat
- Contact us on Twitter at @moddabletech
Moddable SDK 4.5.0
This release contains improvements to the Moddable SDK made between February 2, 2024 and March 4, 2024.
Highlights of this release include:
- XS 15, the latest version of our embedded JavaScript engine is here! It supports all the new capabilities of the latest revision of the JavaScript language, ECMAScript 2024!
- Energy savings. ESP32 now has the option to power-off Wi-Fi when not in use and nRF52 uses significantly less energy when in idle, extending battery life.
- New M5Stack simulator lets you use the Moddable SDK's simulator to more accurately develop your M5Stack projects.
New Hardware: Moddable recently launched the Moddable Display product line. Moddable Display is the beautiful way to bring your latest embedded JavaScript project from the workbench to the real world.
Reminder: ESP-IDF v5.1.2 is now recommended for ESP32 development. Please see the January 2024 Release Notes for details on how to update.
Release Details
- XS
- XS 15 is here, with full support for ECMAScript 2024 (ES2024)! Conformance with the standard for all new features is 100%. Overall conformance is 99.92% for language tests and 99.88% for built-ins tests (see the XS Conformance document for details). New features in ECMAScript 2024 include:
- New
RegExp
v
flag for Unicode set mode to work with Unicode properties of strings, set notation, and improved case-insensitive matching Promise.withResolvers()
for convenience when creating promises in some programming stylesObject.groupBy()
andMap.groupBy()
to aggregate dataAtomics.waitAsync()
for non-blocking wait on shared memory changes (not available yet for embedded targets)String.prototype.isWellFormed()
andString.prototype.toWellFormed()
to efficiently check and ensure a string contains well-formed Unicode- Resizable
ArrayBuffer
and growableSharedArrayBuffers
(these were already supported in XS 14)
- New
- Optimizations for String
getOwnProperty
,String.prototype.at()
, andString.prototype.replaceAll()
- Handle out of memory errors safely in
xsdtoa.c
- Fixes for issues uncovered through fuzz testing. Thank you to @Agoric for their support of this work.
- XS reports syntax error for
try
without eithercatch
orfinally
- Module specifiers with an arbitrary number of "../" are now supported
- XS 15 is here, with full support for ECMAScript 2024 (ES2024)! Conformance with the standard for all new features is 100%. Overall conformance is 99.92% for language tests and 99.88% for built-ins tests (see the XS Conformance document for details). New features in ECMAScript 2024 include:
- ESP32
- 8-bit parallel ILI9341 driver
- CS pin optional
frameRate
accessor to set hardware refresh rate- Uses binary semaphore to synchronize with tearing-effect ISR to eliminate spin loop
- Using Serial JTAG debugger port with xsbug is now much more reliable. Worked around bug in the ROM that caused occasional hangs when writing. #1299 (reported by @NW-Lab)
- Audio output supports optional GPIO to enable/disable an external audio amplifier
- Clean-up watch-dog timer settings in sdkconfig files
- 8-bit parallel ILI9341 driver
- nRF52
- Default to
PowerMode.LowPower
instead ofPowerMode.ConstantLatency
for (much) lower energy use during system sleep- New example showing how to set
PowerMode
- New example showing how to set
- Hardware supports misaligned writes, so no need to set
mxMisalignedSettersCrash
(slightly faster 32-bit TypedArray writes) - When done using pin, reset to default state to reduce energy use
- Default to
- Modules
- New
WiFi.Mode
enumeration of constants for Wi-Fi operating modes - Wi-Fi implements new
off
mode to disable the Wi-Fi stack #1295- This frees memory (about 60 KB on ESP32) and reduces energy use
- Implemented on ESP32 and Raspberry Pi Pico
- Check for availability with
if ("off" in WiFi.Mode)
- Requested by @beckerzito, thanks to @tve for input.
- OpenAI Audio streaming now supports Wave files in additional to previous MP3 support. (Contributed by @stc1988) #1316
- Easing equation functions split out from Piu to their own module to be more generally useful (suggested by @stc1988) #1309
- MQTT client handles write error while sending initial connect message
- New
- Drivers
- GT911 touch interrupt now triggers on rising edge (lower latency)
- AM2320 temperature and humidity sensor - more reliable read timing and general clean-up. (contributed by @louisvangeldrop) #1311
- Tools
- M5Stack simulator! (contributed by @stc1988). Use
mcconfig -d -m -p sim/m5stack
to try it out. - mcpack fixes for module aliasing to allow more npm modules to work correctly. (Reported by @FWeinb who is now using protobuf for protocol buffers)
- xst
- On Linux no longer sets
-fsanitize-recover=undefined
(contributed by @raphdev) - Hooks memory allocators (
malloc
, etc) to be able to force failures when fuzzing
- On Linux no longer sets
mcchex
now available in Linux binary distribution (contributed by @ethos-jgreenwood) #1315
- M5Stack simulator! (contributed by @stc1988). Use
- TypeScript
- Typing for
Time.delta()
(contributed by @meganetaaan) - Typing for
Outline.scale
single scale factor overload (contributed by @stc1988) - Typing for
easing
(contributed by @stc1988)
- Typing for
- Examples
- ECMA-419 blink and button examples report missing pin configuration
- Color-Picker example manifest updated to include Commodetto explicitly #1303 (reported by @stc1988)
- Wi-Fi examples updated to use new
WiFi.Mode
enumeration to improve readability - SomaFM app uses much less memory on station list screen, improving reliability
Contact Us
If you have questions or suggestions about anything here, please reach out:
- Start a new Discussion on our GitHub repository
- Drop by our Gitter to chat
- Contact us on Twitter (X) at @moddabletech
Moddable SDK 4.4
This release contains improvements to the Moddable SDK made between January 3, 2024 and February 1, 2024.
Highlights of this release include:
- Moddable Display. Our latest hardware is also our most beautiful. Fully supported in this release.
- Web Streams. Help explore the feasibility and potential of this powerful web standard on embedded devices.
- OpenAI text-to-speech provides another high quality option that's easy to add to projects.
- Bosch BME68x Visualizers for round displays (works in the simulator too). Learn how to use outline graphics to creatively visualize sensor data.
- Many low-level improvements for nRF52 ports. The port that powers our ultra-low energy Moddable Four is more capable than ever.
New Hardware: Moddable recently launched the Moddable Display product line. Moddable Display is the beautiful way to bring your latest embedded JavaScript project from the workbench to the real world.
Documentation: All of the Moddable SDK documentation is available to read on moddable.com. We recently moved the site to a new hosting provider so browsing the documentation is fast.
Reminder: ESP-IDF v5.1.2 is now recommended for ESP32 development. Please see the January 2024 Release Notes for details on how to update.
Release Details
- Moddable Display
- Build build targets to support all Moddable Display products
- Documentation
- New Bosch BME68x Visualizers for sensor (temperature, humidity, pressure) on round display
- Check out the video demo
- Core host with four different visualizers implemented as mods
- Great example of using outline rendering to build an advanced UI
- See readme for details and build instructions
- Experimental web streams implementation for embedded (!!)
- Effort to study feasibility of standard web streams on embedded
- Modified version of WHATWG reference implementation
- Includes examples using
fetch()
, ECMA-419 Digital IO, and ECMA-419 touch sensor - Conformance verified at better than 99% using Web Platform Tests.
- See the readme for more information
- Modules
- OpenAI text-to-speech support using streaming MP3 audio. (Contributed by @stc1988)
- New
AW3641
flash-light driver (with example). Works with M5Stack Core-S3. (contributed by @NW-Lab) ls013b4dn04
display driver support for 180 degree rotation- Works with Moddable Four and Moddable Display 4
- Jog dial adjusts direction based on screen rotation
- Accelerometer adjusts direction based on screen rotation
- Works with Moddable Four and Moddable Display 4
structuredClone()
fix for TypedArray under XS 14.3- Implement
TextDecoder
special case for invalid UTF-8 data on flush (for compatibility with Web Streams tests) - Streaming JSON parser
- Major documentation update with cookbook and reference sections
- Eliminated timezone dependency in unit tests
- MQTT client
- Keep-alive improvements to eliminate mistaken disconnects
- Uses elapsed-time rather than time-of-date for keep-alive timeouts
- Support TLS device certificates for Node-RED MCU Edition
- ECMA-419
- TCP socket on macOS no longer tries to look-up IP addresses using DNS. Fixes connection failures.
- TLS socket now uses normative module specifier
embedded:io/socket/tcp/tls
- HTTP server (listener) example fix for missing request body (reported by @stc1988) #1298
- MQTT client
- Now accepts buffer for
read()
(in addition to number, as before) - Keep-alive improvements to eliminate mistaken disconnects
- Uses elapsed-time rather than time-of-date for keep-alive timeouts
- Now accepts buffer for
- XS
xst
(XS test tool)- Uses
fdlibm
for certain functions of theMath
object to guarantee exact results across all platforms test (details).fdlibm
is recommended, but not required, by ECMA-262. - Supports Fuzzilli on Linux builds (for cloud fuzzing!) (contributed by @raphdev)
- On macOS and Windows now supports Memory and Undefined Behavior sanitizers (contributed by @raphdev)
- Uses
- Bug fixes for issues detected by fuzzing
- Fix infinite loop in Regular Expression's with nested greedy quantifiers
- Fix crash calling
super()
from within an arrow function - If
SharedArrayBuffer
allocation fails, there was a potential to crash on the next garbage collection. Fixed. - Consistent out-of-memory handling via
fxAbort()
- JavaScript parser previously threw exception
dtoa
library previously ignored allocation failures
- xsbug
- Crash on surrogate pairs split across buffers fixed
- REPL now ignores debugger statements, as it does other breaks
- Devices
- ESP32
- nRF52
- Support for Serial 7E1 and 7O1 modes
- Optional pull-up on receive pin for serial
- Supports multiple devices on the same I²C bus
- Report address of mods flash partition from
mcconfig
using-t modLocation
- Free SPI buffers on
close()
- Instrumented builds working again
- Fix date to conversion for New Year's Day on ESP8266, nRF52, Raspberry Pi Pico, and QCA4020 (off by one error in
modGmTime
).
- Tools
- New mchex tool to convert any file to the Intel Hexadecimal Object File Format (.hex)
mcconfig
for simulator now supports-t xsbug
to debug without re-building
- Documentation
- Timer
- Added details of
this
in callbacks - Detailed description of initial and repeat intervals
- Added details of
- Timer
- Examples
- Timer example updated with schedule and unschedule
- Moddable Four first-run app doesn't try to sleep in debug builds (deep sleep is unavailable in debug builds)
- TypeScript
Contact Us
If you have questions or suggestions about anything here, please reach out:
- Start a new Discussion on our GitHub repository
- Drop by our Gitter to chat
- Contact us on Twitter at @moddabletech
Moddable SDK 4.3.8
This release contains improvements to the Moddable SDK made between December 1, 2023 and January 2, 2024.
Highlights of this release include:
- Streaming JSON parser
- LTR-553ALS driver for combined Proximity and Ambient Light sensor (ECMA-419 compatible)
- nRF52 watchdog timer support
Important: ESP-IDF v5.1.2 is now recommended for ESP32 development.
- If you used xs-dev to install the Moddable SDK, execute
xs-dev update --device esp32
- Otherwise, follow the update instructions for macOS and Linux and Windows.
Release Details
- Contributed
- New streaming JSON parser reduces RAM required to process JSON responses by 10x or more. Invaluable when working with web services that return large, bloated JSON responses. Extensively documented. Includes examples demonstrating different uses including simple property name (key) filtering, pattern matching, and advanced context-aware filters. (Contributed by @markwharton)
- Devices
- New ECMA-419 LTR-553ALS sensor driver (Proximity and Ambient Light). (Contributed by @stc1988) This sensor is built into the M5Stack Core3.
- Built-in ESP32 touch pad support builds with ESP-IDF v5. (reported by @ntGus) #1263
- Support Watchdog Timer on nRF52 devices (set
"USE_WDT":"1"
in "build" section of manifest)
- Embedded Runtime
- Rework message handling (modMessage) to minimize blocking while processing messages. At most, only messages present at start of service are now processed. (reported by @beckerzito) #1257
- Only enable unit test support for
xsbug://
when debugging is enabled - For ESP32, separate out soft-reset (
MODDEF_SOFTRESET
) support from unit test (MODDEF_TEST
) to allow it to be used in more scenarios. CallmodSoftReset()
from C to request a soft reset at next turn. #1267
- Modules
- HTTP server reads through all of ignored request body for maximum compatibility (reported by @tve) #1270
- HTTP server accepts boxed string (String object) as response body (reported by @tve) #1269
- ECMA-419 TCP Listener had incorrect destructor function in host hooks leading to crash when terminating virtual machine (reported by @tve) #1267
- XS JavaScript engine
- Improvements to adding private field to object in ROM. These are related to stamping private fields (see "Returning overriding object").
- If object is petrified (fully immutable), adding private field fails with an exception (previously crashed)
- If object is alias-able, adding private field succeeds
- XS host hooks modified to support native dispatch table
signature
field replacessweeper
(unused). Signature indicates the type of the dispatch table that follows.- Any fields following
signature
are defined by the object - Use
xsGetHostHooks()
,xsGetHostHooksIf()
, orxsGetHostHooksValidate()
to retrieve host hooks for for an object
- Fix undefined behavior in
strtod2()
when converting long string literals flagged by UBSAN on oss-fuzz. (Thanks to David M. Gay for review and refinement) String.fromArrayBuffer()
andArrayBuffer.fromString()
now correctly handle null characters (reported by @tve) #1271 (thanks to @Frida854 for reporting a problem in the initial implementation #1279)
- Improvements to adding private field to object in ROM. These are related to stamping private fields (see "Returning overriding object").
- Examples
- Two new examples to draw a bitmap image from a PNG (motivated by question from @RiteshK551) #1280
- Rectangular image with no alpha channel
- Arbitrarily shaped image with blended edges using alpha channel
- Two new examples to draw a bitmap image from a PNG (motivated by question from @RiteshK551) #1280
- Documentation
- Describe Files class error handling (contributed by @tve)
- Document behavior of HTTP server
close()
(contributed by @tve) - Explain handling of Strings in HTTP (contributed by @tve)
- Recommend install of icon pack when using WSL2 (works around GTK bug). (contributed by @kallistisoft) #1272
Moddable SDK 4.3.4
This release contains improvements to the Moddable SDK made between November 6, 2023 and November 30, 2023.
Highlights of this release include:
- New animated Piu round-balls example for circular displays
- New circular display simulator (WaveShare Pico RP2040)
- Support for M5Dial and M5Stamp S3 devices
- LittleFS now available on Raspberry Pi Pico
Release Details
- Devices
- ESP32 Family
- Add support for M5Dial device (contributed by @stc1988)
- Add support for M5Stamp S3 device (contributed by @stc1988)
- Watchdog timer working again on ESP32 Family devices. Was temporarily broken by upgrade to ESP-IDF 5. (Contributed by @tve)
- Raspberry Pi Pico
- LittleFS is now available on Raspberry Pi Pico (requested by @ArashMotamedi, implemented by @mkellner)
- nRF52
- Latest nRF52 bootloader binary with option to update firmware using BLE
- ESP32 Family
- Modules
- ECMA-419
- ECMA-419 Serial implementations all default the format to
"buffer"
. This was previously"number"
on some platforms. Tracks an update to ECMA-419. EcmaTC53/spec#41 (Reported by @HipsterBrown). Projects that rely on the default format being"number"
need to be updated. - ECMA-419 HTTP Client consistently updates writable count to fix edge case write failures with TLS. (reported by @sburel)
- ECMA-419 GT911 touch driver implements
get configuration
to allow Piu to use its interrupt - MQTT.js module implementation now uses URL module
- ECMA-419 WebSocket module implementation now uses URL module
- ESP32 family devices running a debug build now reserve the Serial transmit and receive pins used for debugging. If a script attempts to use these pins, it generates an exception. Inspired by report #1226 by @ralphwetzel.
- ECMA-419 Serial implementations all default the format to
- ElevenLabs text-to-speech supports additional parameters (contributed by @stc1988)
- ECMA-419
- XS
- Fix
typeof
operator for host (native) functions to return"function"
- Module loader now only calls resolve hook once for each unique module specifier in a Compartment
- Module loader wasn't always decrementing loaded module count, leading to preposterous loaded module count
- Fix crash in XS debugging support when launching a second time (very rare).
- Fix
- Examples
- New Piu round-balls example for circular displays -- balls bounce of the edges of a circle
- Fix capitalization of GIF and QRCode paths in Moddable Four First run app to build on case-sensitive file systems
- httpserverputfile example now uses
config.file.root
for portability. (Reported by @kallistisoft) #1246 - Giphy app only opens
Flash
module instance once. This allows it to work on ESP-IDF 5 which no longer supports memory mapping the same region multiple times. (reported by @stc1988) #1258.
- Instrumentation
- Fix instrumentation memory leak when root VM allocated more than once
- Instrument additional cases of floating point math in add, subtract, and multiply
- Tools
mcrun
supports-t build
option to build mod without deploying or running- New "WaveShare Pico RP2040" device simulator provides round screen (for use with piu/round-balls example)
- ESP32 makefile on macOS & Linux supports experimental
-t buildArchive
to build the archive with Moddable SDK objects but not build and link the ESP-IDF host (for specialized scenarios like building the Moddable SDK into an ESP-IDF application) - XS Linker fixes #1209 again ("0" and "@" confusion). This original fix was broken when fixing #1232. Both #1209 and #1232 are now fixed. Thanks to @linfan68 for re-reporting.
- Tests
- Add warning if Resource
slice
test on fails on Windows because Moddable SDK was checked out with Windows line endings instead of Unix line endings
- Add warning if Resource
- Documentation
- XS in C documentation updated with high-level introduction to Host Object, Host Data, and Host Chunk. (contributed by @tve based on text from @phoddie)
- Repository root readme notes that XS now supports ECMAScript 2023
Moddable SDK 4.3.0
This release contains improvements to the Moddable SDK made between October 2, 2023 and November 5, 2023.
This release contains many enhancements for mods, one of the most unique and popular features of the Moddable SDK. Highlights of this release include:
- The XS performance profiler now works with mods, so you can profile all the JavaScript code in your project (including the examples in our book.
- Arrow functions are incredibly popular with JavaScript developers for their compact syntax. They are so popular that developers often use them when their primary feature -- automatically binding to
this
-- isn't needed. We've reduced the memory use arrow functions that don't accessthis
so embedded JavaScript developers can use them with the smallest possible overhead. - ESP-IDF v5 support has deepened with improvements to several more modules since rolling out last month in Moddable SDK 4.2. Thank you to the developers who reported issues and helped with fixes.
News
- Save the date! 🎉Ecma TC53 is holding a workshop to discuss proposals and consider options for Embedded JavaScript standardization including new APIs, interoperability, packaging, and Hardened JavaScript. 🎉
- 📆December 6
- 📍Apple Park
- 🧑🏽💻Everyone with relevant expertise welcome
- The Node-RED MCU Plug-in by @ralphwetzel is live. It has some great new features include:
- Support for Node-RED v3.1.0
- Support for Moddable Four and other nRF52 powered devices
November Community Update
The monthly Moddable Community Call is now a monthly Moddable Community Update! We'll share more about this soon. Sign up to receive an email notification when new community updates are published.
Release Details
- Modules
- Servo driver fix for ESP-IDF v5. Contributed by @meganetaaan.
- ESP32 audio out no longer uses deprecated
is2_write_expand
, configuring the IDF driver to do the expansion instead. Reported by @meganetaaan. #1227 - Improve PSRAM support ESP32 family devices with sdkconfig updates to consistently set
CONFIG_SPIRAM_USE_MALLOC
- ILI9341 (MIPI) display drivers
command()
API supports all byte buffers now, not justArrayBuffer
- Experimental ESP32 ILI9341 parallel display driver updated to work with ESP-IDF v5.
- SSD1306 driver builds in all cases again (change to destructor failed in some cases). Reported by @stc1988 and @PLCMercenary. #1239
- ECMA-419
- Restore serial driver bypass on ESP32. Reported by @meganetaaan. #1226
- Moddable Four host provider instance now includes PulseCount, SPI, and LIS3DH sensor driver.
- Raspberry Pi Pico
- Neopixel driver uses
ws2812.pio
from Pico SDK for easier maintenance - Raspberry Pi Pico build now uses
PICO_SDK_DIR
instead ofPICO_SDK_PATH
. Contributed by @stc1988.
- Neopixel driver uses
- Outline rendering fix for ESP32-S3. Cannot use program memory (IRAM) for rendering buffer (works on ESP32). Reported by @meganetaaan who also helped isolate the problem. #1239
- XS JavaScript engine
- Reduce memory use by arrow functions that do not use
this
. This optimizes a common pattern of JavaScript developers: use of arrow functions when thethis
binding is not needed. - Array destructuring now correctly caches the iterator's
next
. Reported by @gibson042 #1223 - Regular Expression maximum qualifier was not always applied correctly. Reported by @Jinyn01. #1238
RegExp.prototype.source
now only escapes\
if necessary, consistent with web engines. Issue found when testing fix for #1238.- Fix bug in linker when building mods that caused symbols to be omitted. Many thanks to @stc1988 for reporting this obscure bug. #1232
- Debugging support no longer triggers a spurious breakpoint when inspecting a property implemented by a getter.
- Fixes for issues identified by fuzz testing with Fuzzilli and oss-fuzz. Thank you to @Agoric for their ongoing assistance with this work.
- Fix use of uninitialized variable in rarely used path in module loader
String.prototype.replace
andString.prototype.replaceAll
changed to eliminate uninitialized variable warning from UBSan (the uninitialized value was never used)- dtoa (widely used library to convert floating point numbers to strings) updated to eliminate use of an uninitialized variable. There is no evidence this bug ever caused a conformance issue or created a vulnerability in XS. Many thanks to David M. Gay for the patch.
- In certain memory configurations, passing a search string to
String.prototype.replace
orString.prototype.replaceAll
that was longer than the string to be searched read from unintended memory which could crash if that memory was unmapped.
- Reduce memory use by arrow functions that do not use
- TypeScript
- Fixes to
wifi
andpins/digital
type declarations
- Fixes to
- Examples
- New EventEmitter example for use with
mcpack
- xsuse example measures memory use of arrow functions in more detail to verify the XS arrow function optimization
- New EventEmitter example for use with
- Documentation
- ESP32 documentation now lists all supported members of the ESP32 family
- Fix link to BLE Remotes blog post in BLE HID peripheral example. Contributed by @stc1988.
- Mods documentation describes the current archive format used for mods, as well as a basic introduction to the Atom/Box file structure archives use.
- Linux portion of Getting Started document updated based on developer feedback
- Tools
mcrun
(build tool for mods)- Suppress output of default
check
module when pixel format is set tox
(unknown -- typically used for projects without a display) - Suppress output of empty
config
module when no configuration properties are defined for the mod - For nRF52, adds support for serial connected devices
- For ESP32, now discovers serial ports consistently with
mcconfig
- Suppress output of default
- XS Profiler now supports profiling mods. This required assigning profile IDs to functions in mods during of remapping process.
mcconfig
reports an error if it detects it is building a mod, and recommends use ofmcrun
instead. Inspired by report from @kallistisoft.- xs linker (
xsl
) now preloads modules prefixed withlockdown/
last when preloading. This allows modules to perform operations to prepare the environment immediately before lockdown, after all ordinary preloaded modules have run. - xs test tool (
xst
) makeslockdown()
andharden()
available when running test262 harness to support more Hardened JavaScript tests
Contact Us
If you have questions or suggestions about anything here, please reach out:
- Start a new Discussion on our GitHub repository
- Drop by our Gitter to chat
- Contact us on Twitter at @moddabletech
Moddable SDK 4.2.1
This is an interim release of the Moddable SDK to support specific projects.
We will publish a release at the start of November on our usual monthly schedule.
Release notes will be provided at that time.
Moddable SDK 4.2
This release contains improvements to the Moddable SDK made between September 9, 2023 and October 2, 2023.
Moddable SDK 4.2 is a substantial update. Highlights of this release include:
- ESP-IDF v5 is here! After a major effort with great community support, we've merged ESP-IDF v5 support to the main branch. (more)
- Developers working with ESP32 will need to update their ESP-IDF (update instruction links below).
- xsbug, our JavaScript debugger, has received a major update to speed your development. (more)
- New breakpoints - conditional, counter, trace, and function name - give you more control.
- A new interactive console lets you evaluate expressions, set values, and call functions -- making it much faster to gain insights into running code without having to change the source code, rebuild, and re-deploy.
- mcpack, our new embedded packager based to make embedded JavaScript development more accessible to developers working on the web platform. (more)
- Uses
package.json
to drive build, allowing easy use ofnpm
and other JavaScript ecosystem tools - Analyzes project code to automatically generate a Moddable
manifest.json
optimized for the project - Experimental! Please share your experiences to help evolve
mcpack
- Uses
News
- Save the date! 🎉Ecma TC53 is holding a workshop to discuss proposals and consider options for Embedded JavaScript standardization including new APIs, interoperability, packaging, and Hardened JavaScript. 🎉
- 📆December 6
- 📍Apple Park
- 🧑🏽💻Everyone with relevant expertise welcome
- GitHub Copilot – Members of the community have shared their experiences and opinions about using Github Copilot for embedded JavaScript. Check out the discussion to see how it might help your development.
October Community Update
The monthly Moddable Community Call is now a monthly Moddable Community Update! We'll share more about this soon. Sign up to receive an email notification when new community updates are published.
Release Details
- Devices
- ESP32
- ESP-IDF v5 support is here!
- You must upgrade your ESP-IDF, as builds with ESP-IDF v4 stop with an error message.
- Update instructions are available for macOS, Windows, and Linux.
- The Moddable SDK currently targets ESP-IDF v5.1.1 for all ESP32 family microcontrollers
- There are no changes to the JavaScript APIs on ESP32, so no script changes should be required(!!).
- This release supports the following models in the ESP32 family: ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6, and ESP32-H2.
- The Moddable SDK has been updated to use the latest APIs in ESP-IDF v5 (deprecated APIs are nearly all removed)
- Improvements in the RMT APIs allow the Neopixels module to support multiple strands (on separate GPIO pins)
- New device breadboard build platform targets with displays (mostly ILI9341 and one GC9A01). Great for breadboard prototyping.
esp32/qtpyc3_ili9341
esp32/qtpyc2_ili9341
esp32/qtpys3_ili9341
esp32/xiao_esp32c3_ili9341
esp32/xiao_esp32s3_ili9341
esp32/esp32h2_ili9341
esp32/esp32c6_gc9a01
- ESP-IDF v5 support is here!
- nRF52
$(UF2_VOLUME_NAME)
now handled correctly on on Windows (reported by @NextWorldLab) #1207- Include
pwm
in Windows build - Improved build messages when building for targets that aren't Moddable Four
- Build improvements to support nRF52 builds of Node-RED MCU using the MCU plug-in (contributed by @NextWorldLab)
- Raspberry Pi Pico
- New device breadboard build platform targets. Great for prototyping.
pico/ili9341_i2s
(includes speaker output)pico/qtpy_ili9341
- New device breadboard build platform targets. Great for prototyping.
- ESP8266
- ESP32
- Tools
- xsbug has received a major update
- Enhancements to breakpoints for faster debugging
- Conditional breakpoints - break only when a JavaScript expression evaluates to rue (e.g
this.dx > 3
) - Counter breakpoints - break after a counter reaches a specified threshold (e.g. on the 10th time, every 60th time, the first 3 times)
- Function name breakpoints - break on all calls to a specified function name across all source files (e.g.
onReadable
) - Trace breakpoints - instead of breaking, these trace the evaluation of a specified JavaScript expression to the debug console (e.g. `x = ${x}`)
- Breakpoints may now be disabled
- Conditional breakpoints - break only when a JavaScript expression evaluates to rue (e.g
- Interactive debug console (REPL)
- Expressions can be evaluated in-scope when stopped in the debugger
- View properties
- Set values
- Call functions
- See the xsbug documentation for more information
- Enhancements to breakpoints for faster debugging
- mcpack is our new embedded packaging tool for embedded devices. It makes standard, modern embedded JavaScript development more accessible to JavaScript developers working with npm and Node.js.
mcpack
is a front-end to existing Moddable build tools likemcconfig
andmcrun
mcpack
starts frompackage.json
and analyzes your project's dependencies to automatically generate a Moddable SDKmanifest.json
mcpack
detects the use of Moddable SDK built-in modules and automatically adds them to the generated manifest.mcpack
detects the use of well-known globals --setTimeout
,fetch
,URL
,Worker
, etc -- and automatically includes the necessary modules in the generated manifest and initializes the global variables.mcpack
detects the use of top-level await (TLA) and automatically generates the needed manifest settings to enable TLAmcpack
introduces the "moddable:" namespace for built-in modules. The prefix is optional, so built-in modules may be accessed as "timer" or "moddable:timer".mcpack
uses the runtime key "moddable" (registered with WinterCG) to allow package.json to include runs that apply only to Moddable SDK builds.mcpack
allows Moddable SDK manifest fragments to be embedded in package.json or to be referenced externally, allowing full access to all capabilities of manifest.json.- There is a suite of example projects available that demonstrate how to use
mcpack
. Check out the readme to learn how to get started withmcpack
. mcpack
is experimental. We expect it to evolve based on community feedback. Please give it a try!mcpack
is not yet fully documented. If you have questions or suggestions, please ask them in our Discussions forum on GitHub.
- New flags to control debugger launch behavior with
mcconfig
andmcrun
.-d
for default debugger (launch xsbug),-dn
to not launch debugger,-dl
to launch xsbug-log, and-dx
to launch xsbug.-l
is still supported for xsbug-log, but will eventually be removed. New flags are available on macOS and Linux; Windows is coming soon. mcrun
improvements to help installing to ESP32 USB-native devices- Simulator (
mcsim
)- Would sometimes launch the project twice, confusing debuggers. Fixed to only launch target project once.
- Release build fix (
breakOnStartFlag
only available in debug builds)
- Rename
DISPLAY
andROTATION
build variables toCOMMODETTOBITMAPFORMAT
andPOCOROTATION
to eliminate conflicts on some Linux distributions - nRF52 builds can debug over serial too (in addition to existing USB support)
- ESP32 installation improvements to add prompts for button presses when necessary (devices without auto-programming capability)
- Raspberry Pi Pico
xsbug-log
now supported for Raspberry Pi Pico Linux buildsmcconfig
now able to build PIO source files included in a manifest. This simplifies integration of PIO support and minimizes binary size. (inspired by @linfan in discussion #1220)- Build neopixel and i2s_audio pio modules only if included in project
- pio and supporting source files compiled directly from external directories (i.e.
pico-extras
)
- xsbug has received a major update
- Modules
- Manifests
- To more thoroughly support automatic manifest includes by
mcpack
, many existing module manifests were updated and a number of new module manifests were added. The goal is to ensure that every module can be built by simply including its manifest (rather than directly including the modules in a project manifest). This is now true, with just a few exceptions.- In making the changes several errors were corrected, resulting in smaller binaries in some cases.
- While the changes were made with care, it is possible that some uses were overlooked. If you run into problems building existing projects, please report an issue.
- BLE client and server manifests now have
error
case for unsupported platforms to generate earlier failure with clearer message
- To more thoroughly support automatic manifest includes by
- ECMA-419
- Poco refactored for better compatibility. The
commodetto/PocoCore
module is now the foundation and thecommodetto/Poco
module contains the drawing primitives. This revises a change in Moddable SDK 4.0 made to reduce...
- Manifests