MOGWAI NANO 0.5 is available on the GitHub repository — the densest release since launch.
What’s new
The engine can finally run things in parallel. A task 'name' do { ... } launches a block of code on its own native thread, with its own fully isolated engine instance — its own stack, its own variables, everything. No shared state with the parent program at all: all communication goes exclusively through the existing event mechanism (TASK_DID_START, TASK_DID_END, TASK_DID_PUBLISH…). Measured cost: roughly 10KB per task, which is why this is practical only on boards with PSRAM — on a plain ESP32, two or three tasks alone would eat up most of the available memory. When a program ends, every task still running is first asked to stop cooperatively, with a 10-second grace period before a last-resort forced kill — so nothing is ever left running silently in the background.
SPI has landed — and not just in theory. spi.open/spi.write/spi.transfer, following the same named-channel pattern as I2C, PWM, and ADC. Rather than stopping at a simple round-trip test, validation came from a full MFRC522 RFID reader driver, written entirely in MOGWAI NANO — module initialization, the chip’s internal CRC coprocessor, card presence detection, UID and SAK retrieval — with no additional C# added to the firmware. A real badge, on a real module, read successfully.
The Studio now has a second face. MOGWAI NANO Studio GUI, a graphical companion built with Avalonia, officially joins the public repository alongside the existing console Studio. Built-in editor, a REPL-style command line with history, separate live views for the device’s console and debug output, file management with recent files, light/dark themes — both Studios speak the same network protocol, so pick whichever fits your workflow.

And the language keeps maturing. TRAP/GUARD bring real structured error handling, SWITCH avoids cascading if/else if chains, and eval can now interpolate full RPN expressions inside a string. Also new: stopwatch.*, DURING, purge, exists, ->str, and mogwai.exit for cleanly exiting a program without raising an error.
Under the hood
A genuine root-cause bug, tracked down over several hours: after a long test session with tasks starting and stopping continuously, the device’s free memory kept drifting down — a classic leak symptom, except nothing showed up in the usual managed reference graph. The cause, once found: every engine instance spins up its own internal network-listening thread, including the ones created for a task — which never actually needs it, since a task is already driven by its own dedicated thread. That unused thread ran forever, keeping the whole instance alive in memory no matter how thoroughly everything else was cleaned up on the managed side. The kind of bug no ordinary reference analysis would ever catch, since the root cause wasn’t a stray object reference at all — it was a live system thread.
What’s next
A proper user guide for the GUI Studio is in the works, to go beyond this README and give the new interface a real walkthrough.
Everything is in the CHANGELOG for the full detail.
Thanks to everyone following the project, and as always, Laurent Ellerbach for his invaluable help. 🎉