Skip to main content

EnvyOS 0.2.0

· 5 min read
Ben Allfree
MeshEnvy Founder

EnvyOS 0.2.0 is out today. This is the release I wanted before we turn adverts back on in the field.

Since Introducing EnvyOS, we have had repeaters on Nevada ridgelines running v0.1.x with LoRa OTA working. That part has been great. What has not been great is a lockup that showed up when you changed a repeater name over remote admin and then hit Send Advert. The node would freeze hard. USB serial went quiet. We disabled adverts on deployed units as a workaround while we chased it.

We found the bug on the bench last week. Remote admin CLI was running inside the packet receive handler, deep in the call stack. By the time the firmware tried to sign a new advert, there were about 32 bytes of stack left on a 4 KB task. That is not enough room for ed25519. Same commands over USB worked fine because USB CLI runs at the top of the loop with a shallow stack.

The fix defers remote CLI to the main loop, same depth USB already uses. Bench verified: remote save name plus advert succeeds, serial stays alive, the advert goes out on RF. Upstream PR is in flight on meshcore-dev (#3196).

Watchdog and EnvyBoot 0.2.0

Fixing the lockup was the urgent part. The other big piece in 0.2.0 is a hardware watchdog on nRF52 repeaters.

Repeaters sit on towers and fence posts for months with no USB cable attached. If something wedges the firmware, I want the node to recover on its own instead of waiting for a climb. EnvyOS 0.2.0 adds a 30-second hardware watchdog on repeater builds (companions are excluded). You can tune it through prefs and the watchdog CLI.

The catch is that the watchdog needs cooperation from the bootloader during OTA apply. EnvyBoot 0.2.0 feeds the watchdog while a .mota patch is being written and while DFU is running. Without that, a long over-the-air update could trip the watchdog mid-apply and brick the session.

That means two things for anyone running the fleet today.

Good news: firmware 0.2.0 still ships as a normal LoRa delta for nodes already on EnvyOS. You do not need a tower visit just to get the lockup fix or the MeshCore 1.17 base.

Honest bummer: the watchdog itself does not arrive over .mota. Repeaters in the field, even ones already equipped for OTA, will not get watchdog protection until someone flashes EnvyBoot 0.2.0. Recovery packages and UF2 images are in the release assets. Plan a bootloader pass when you are already on site with a laptop, or batch it with the next scheduled maintenance window.

Small updates, small deltas

One detail I keep coming back to as we iterate: we now build a delta from every prior release for every target.

When we cut 0.2.0, the build emitted delta_from_v0.1.0.mota, delta_from_v0.1.1.mota, and delta_from_v0.1.2.mota alongside the full images. A node can jump from whatever it is running without pulling a full ~400 KB snapshot over LoRa.

The part that still surprises me: this release rebases onto MeshCore companion-v1.17.0. That is a real upstream bump, not a one-line tweak. Even so, the delta from the original v0.1.0 fleet image is still under 100 KiB for our slim repeater targets. Most of the bytes we ship over the mesh stay diffs, not whole firmware copies. That is the difference between an update that finishes overnight on a busy backbone and one that never completes.

Self-serve OTA got smarter too. Nodes can advertise their own running firmware from flash with a chunked merkle build and an EndF RAM cache, so merkle construction does not stall the radio loop. Remote admin no longer competes with that work on the RX path.

What else is in the box

  • SenseCAP P1-Pro NOR mini-superseeder. Slim repeater role with 2 MB QSPI storage for caching delta .mota files, same idea as the SD superseeder on RAK4631 but on the solar P1-Pro hardware we are starting to deploy.
  • Build identity in ver. Device output now includes the envycore git SHA and UTC build date, e.g. v0.2.0-abc1234 (Build: 14 Aug 2026 … UTC). Easier to match what is on the air to what is in the release bundle.
  • EnvyBoot branding cleanup. Artifact names, recovery zips with embedded README, OTAFIX 2.3 freshen. get bootloader.ver reads the EnvyBoot semver.

Full notes live in the EnvyOS changelog and EnvyBoot changelog.

What I am doing next

Re-enable adverts on field repeaters once 0.2.0 is flashed and we have a few days of clean remote-admin exercise on the bench tags. Bootloader updates for watchdog coverage will ride along with site visits where we already have USB access.

If you run EnvyOS repeaters in our coverage area, grab the release from GitHub. Delta from whatever you are on. Flash EnvyBoot when you can. And if remote admin plus advert ever freezes a node again, tell me. That one cost us a month of quiet beacons.