You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Compile produced C, link with a thin runtime implementation using the native platform toolchain
Benefits
Language/toolchain decoupling
Resilience against attacks (RCE, Control-flow hijacking)
Sandboxing / SFI (Software Fault Isolation)
Enables wasm transformations, like instrumentation or gas metering
Software-based memory virtualization
Moderate runtime overhead (mostly depends on the source language/runtime)
Small performance hit (~10-30% slowdown compared to native modules)
Moderate binary size increase
Highly portable
Example
$ make APP=rust
Finished release [optimized] target(s) in 0.00s
$ pio run -e esp32 -t upload
$ pio device monitor
Initializing WebAssembly...
π¦ Rust is running!
$ make APP=assemblyscript
> npm run asbuild:optimized
$ pio run -e esp32 -t upload
$ pio device monitor
Initializing WebAssembly...
π AssemblyScript is running!
$ make APP=tinygo
$ pio run -e esp32 -t upload
$ pio device monitor
Initializing WebAssembly...
π€ TinyGo is running!
# AssemblyScript v0.27 (needs Node.js)
make APP=assemblyscript
# Rust 1.80.1
rustup target add wasm32-unknown-unknown
make APP=rust
# C/C++ (needs Clang)
make APP=cpp
# C99 Coremark (needs Clang)
make APP=coremark
# TinyGo v0.33.0 + Go v1.23.0
make APP=tinygo
# Zig v0.13.0
make APP=zig
# Virgil (Aeneas III-7.1632)
make APP=virgil
# WAT
make APP=wat
Resulting WASM file comparison:
AS
C/C++
Coremark
Rust
TinyGo
Virgil
WAT
Zig
3951
864
10800
12264
1227
315
223
1057
Building and running with PlatformIO
# For ESP32:
pio run -e esp32 -t upload
# For ESP8266:
pio run -e esp8266 -t upload
# For Raspberry Pi Pico:
pio run -e rpi-pico -t upload
# Open serial monitor
pio device monitor --quiet
Building and running with Particle
Requires particle-cli.
Should work on all Particle devices i.e. Spark Core, Photon, Electron, Argon, Boron, P2 / Photon2:
particle flash MyDevice ./src/*# Open serial monitor
particle serial monitor --follow
License
This project is released under The MIT License (MIT)
About
Run statically-compiled WebAssembly apps on any embedded platform