Version 2.0.0 validation

Validation date: 2026-10-20. Build/runtime versions are pinned in platformio.ini. This records measured results, separately from intended support.

Builds

PlatformIO environment Result App bytes
xiao_s3 PASS 1,967,408
xiao_c3 PASS 2,100,528
xiao_c6 PASS 2,260,720
xiao_c5 PASS 2,313,552
esp32 PASS 2,053,424
esp32_s2 PASS 1,735,264

All six applications fit the 3 MB factory partition. The S2 build excludes NimBLE because that chip has no Bluetooth controller.

Physical hardware

Two XIAO ESP32-S3 boards with 8 MB flash and 8 MB PSRAM were programmed and verified by esptool. One had the plugged-in Seeed matrix and the other a soldered matrix. The owner confirmed that both matrices light up. Firmware does not require PSRAM allocation.

Both devices passed the live HTTP integration test:

Both boards also remained responsive at white/255 brightness with the default 500 mA estimated LED budget, then returned to their original settings.

The offline UI was also loaded directly from an S3 in Edge. All four tabs worked without JavaScript errors. The screenshot in screenshots/live-s3.png is from the physical device.

One device dropped queued radio observations during HTTP stress and image transfer; the other did not during its integration run. The drop counter is visible in System. Bounded receive storage protects responsiveness but does not promise lossless RF capture.

Runtime soak

Both boards completed a 20-minute serial capture, with 40 health records each, no panic or brownout messages and no unexpected uptime reset. Free heap remained approximately 138–139 KB after HTTP activity.

Unit First / last uptime First / last free heap Final queue drops
S3 A 30 / 1,200 s 138,032 / 138,020 bytes 443 (web-transfer stress)
S3 B 60 / 1,230 s 139,008 / 139,008 bytes 0

See validation-results.json for the aggregate results. Raw radio observations and original device backups remain private.

Automated checks

python tools/test_native.py checks isolated disconnects, retries, a single burst, sustained bursts, BSSID isolation, protected/truncated frames, clock wrap, selected BLE signatures and 100,000 fuzz inputs.

node tests/ui_test.cjs checks desktop and mobile layouts, settings submission, alert configuration, untrusted RF-name escaping, and JavaScript errors.

python tests/release_test.py compares every packaged bootloader, partition table and application byte against its build, validates chip-family manifests, flash limits and SHA-256 checksums. C5 uses its 0x2000 bootloader location. All six public downloads were fetched and matched against those checksums.

node tests/flasher_test.cjs URL checks the live installer module, all six manifest/download selections, desktop/mobile layout and JavaScript errors. The live Valleytech hub link, project page, embedded installer, four public guides and source ZIP also passed browser checks. Browser serial installation was not automated; physical programming used esptool with verified writes.

Limits

C3, C6, C5, wired ESP32 and S2 require physical validation on those boards. S2 has no BLE. C5 monitoring currently uses 2.4 GHz only. No buzzer was attached for acoustic testing. No live deauthentication attack was generated and no known Axon camera, Flipper or Pineapple was available for controlled field validation; parser fixtures and ambient reception are not substitutes for that.

A successful soak does not guarantee indefinite uptime in every RF environment. Power quality, USB cables, wiring, LED current and board variants still matter.