NOVA is a secure embedded domain-specific language (DSL) and compiler for ESP32-class systems.
It converts .myext programs into Arduino-compatible C++ while enforcing board-aware semantic safety before firmware is built.
- Security-first embedded authoring with explicit
unsafeboundaries. - Board-aware semantic validation to catch hardware misuse early.
- Fast iteration loop from language source to flashable firmware.
- Native standard library modules for networking and cryptography.
- Native FreeRTOS task generation via
task,@core(...),@rate(...), andspawn. - Deterministic lowering of task entrypoints with pinned-core execution support.
wifi.myextprovides typed station onboarding throughWiFiConfigandconnectWiFi(...).http.myextprovidesconfigureWebServer(...)andstartWebServer()task flow.- Codegen auto-injects required global headers when web symbols are detected.
crypto.myextprovideshashSha256(payload: string).- SHA-256 is implemented through ESP-IDF
mbedtlsdigest APIs. - On ESP32-S3, the
mbedtlspath can leverage hardware crypto acceleration when available. - Codegen auto-injects
#include <mbedtls/md.h>from AST and unsafe-block inference.
- Official VS Code extension included in
nova-vscode/. - Syntax grammar and language configuration are bundled for editor support.
lexer.py: tokenization and lexical diagnostics.parser.py: recursive descent parser and AST construction.ast_nodes.py: typed syntax model used by all compiler phases.semantic.py: type and board-profile validation.codegen.py: target-specific Arduino C++ emitters.cli.py: end-user commands (check,transpile,build,monitor).compiler.py: programmatic facade over the compile pipeline.wifi.myext,http.myext,crypto.myext: standard library modules.
- Create and activate a virtual environment.
- Install dependencies from
requirements.txt. - Run a semantic check:
python cli.py check blink.myext --target esp32 --board esp32s3_n16r8
- Build and upload:
python cli.py build blink.myext --target esp32 --board esp32s3_n16r8 --fqbn esp32:esp32:esp32s3 --upload --port COM6
python cli.py check <input.myext> [--target ...] [--board ...]python cli.py transpile <input.myext> [--out ...] [--target ...] [--board ...]python cli.py build <input.myext> --fqbn <fqbn> [--upload --port <port>] [--target ...] [--board ...]python cli.py monitor --port <port> [--baud 115200]
NOVA keeps architecture-specific escape hatches explicit. Raw C++ can only enter through unsafe { ... } blocks, while regular DSL flows remain type-checked and hardware-profile validated.
MIT License. See LICENSE.