Install and run locally
Get the EMWaver app on your phone, connect your board, and start running scripts.
1. Install the app
iOS and Android are the primary EMWaver platforms. iOS is available through the App Store. Android is available through the Google Play internal test and as a direct APK download. macOS, Windows, and Linux downloads are available for desktop use.
Mobile apps
Desktop downloads
For firmware flashing, multi-device bench testing, and long automation runs.
Preview build for testing local EMWaver workflows on Windows 11.
Native Linux build for Ubuntu 24.04+.
2. Get a supported board
You can build one from our open-source hardware repos or use a compatible off-the-shelf board:
- ESP32-family dev board (ESP32, ESP32-S2, or ESP32-S3) — supported directly by EMWaver, so you can get started without building anything from the lineup.
- EMWaver Shield (ESP32-S3) — a shield-style carrier for an ESP32-S3 dev module, with IR TX/RX, radio-module support, and expanded headers. Also compatible with other ESP32-family boards that share the same pinout. Build files on GitHub.
- EMWaver lineup — optional custom EMWaver devices and modules are listed in the hardware docs and on the Build page.
3. Flash the EMWaver firmware
A supported board must be running the fixed EMWaver firmware for its target before the apps can control hardware. Use the bundled firmware image for your board class — ESP32, ESP32-S2, ESP32-S3, or STM32F042. Do not build custom firmware as part of the normal setup flow.
- Pre-flashed board: skip this step and connect directly.
- Blank or stock board: use the EMWaver app's firmware setup/update flow where available.
- Desktop setup: use macOS for one-time firmware setup when a phone cannot flash the board directly.
The firmware is platform-managed and fixed for supported targets. Users should not need ESP-IDF, STM32CubeIDE, Arduino, or a manual compile/upload loop for normal EMWaver use.
4. Connect
- Plug the flashed board into your phone (USB-C) or desktop (USB).
- Open the EMWaver app — the device should appear automatically.
The board communicates over USB MIDI SysEx. No drivers needed — it enumerates as a standard USB MIDI device.
5. Run local scripts
Open the Scripts view in the app, pick a built-in script or create your own .js file, and press Run. Scripts can include JSX-style UI syntax for native module panels.
6. Optional Agent key
The optional Agent can use an API key to inspect hardware through primitive tools, probe modules, and help write or debug scripts. The local script runtime works without Agent access. See the scripting guide for script details.



