Deploying Apps on ESP32 with Wendy
Regular native ESP-IDF projects are the recommended way to build ESP32 apps with Wendy. Wendy also supports Swift and other WASM guests when a portable sandboxed runtime is useful.
Deploying Apps on ESP32 with Wendy
Regular native ESP-IDF projects are the recommended way to build ESP32 apps with Wendy. Wendy also supports Swift and other WASM guests when a portable sandboxed runtime is useful.
Native ESP-IDF Apps (Recommended)
Use the standard ESP-IDF project structure, components, configuration, and APIs. A Wendy project needs only a wendy.json manifest alongside the files ESP-IDF already expects:
my-app/
├── CMakeLists.txt
├── sdkconfig.defaults
├── wendy.json
└── main/
├── CMakeLists.txt
└── main.c{
"$schema": "https://wendy.dev/schemas/wendy.json",
"appId": "com.example.my-esp32-app",
"version": "0.1.0",
"platform": "wendy-lite",
"entitlements": []
}The selected ESP32 must run a Wendy firmware variant with native app support. Install one with wendy install; for generic C5, C6, and S3 boards, choose the board variant labeled native app support.
Deploy with wendy run
From the ESP-IDF project directory:
wendy run --device <name>The CLI performs the native deployment flow:
- Detects the project from its standard ESP-IDF markers.
- Reads the chip target from the connected device.
- Ensures ESP-IDF 5.5.4 is available through
eim. - Runs
idf.py set-targetif the project is configured for another chip. - Runs
idf.py buildand finds the application binary named byproject(...). - Uploads the native binary, reboots the device, reconnects, and streams console output.
Install the ESP-IDF Installation Manager before the first build. On macOS:
brew install espressif/eim/eimIf ESP-IDF 5.5.4 is missing, wendy run installs that version through eim automatically.
Use ESP-IDF Directly
The project remains a normal ESP-IDF project. The conventional workflow continues to work:
idf.py set-target esp32c6
idf.py menuconfig
idf.py build
idf.py -p /dev/cu.usbmodemXXXX flash monitorUse ESP-IDF components, managed components, Kconfig options, and peripheral drivers without a Wendy-specific wrapper. This is especially important for displays, cameras, audio, and other hardware that needs full access to the native ESP-IDF APIs.
Updating a Device
wendy run can deploy over the native USB connection or over the network after Wi-Fi provisioning. A native app is device firmware, so the ESP32 reboots after every deployment and Wendy reconnects before attaching to its console.
You can always fall back to idf.py flash over USB when you want to manage the flash operation directly.
WASM Apps (Optional)
Wendy Lite firmware variants with WASM support can run Swift, Rust, C/C++, AssemblyScript, or WAT guests. This path trades direct access to all of ESP-IDF for a smaller portable application boundary and Wendy's host-imported hardware APIs.
For Swift projects, wendy run builds the package for wasm32-unknown-wasip1, uploads the .wasm application, and attaches to its console. The lower-level manual flow is:
- Build the application as
.wasm. - Convert it to a C header with
wasm2header.shwhen embedding it in a firmware build. - Rebuild and flash the Wendy Lite firmware.
See the host API, Swift SDK, and StdIO references for WASM-specific development details.
Provisioning and Discovery
ESP32 Wendy firmware supports native USB discovery and BLE-assisted Wi-Fi provisioning. Run:
wendy device setup
wendy discoverOnce the device joins Wi-Fi, it advertises over mDNS and accepts Wendy connections over the LAN. Cloud-enrolled devices can use the same remote selection workflow as other Wendy targets.
Wendy Lite
Wendy Lite is Wendy's runtime and deployment layer for ESP32 microcontrollers. It supports native ESP-IDF applications as the recommended project model and can also run portable WA
Host API Reference
All functions are imported from the "wendy" WASM module. The canonical declaration source is Sources/CWendyLite/include/wendy.h. This page documents every function by subsystem, in