SimpleOTA's client libraries are at 1.0.0 for Arduino and ESP-IDF, and on both, every update runs as a trial.
If the new firmware crashes, hangs, browns out, loses power or isn't confirmed in time, the board goes back to the build it was running and tells the dashboard why.
Both libraries now build from one shared core with the same C API, so defaults and behaviour match.
On Arduino that makes 1.0.0 a breaking change.
Devices on 0.6.0 or earlier can still update to it over the air though.
New SimpleOTA client releases are out.
If a new ESP32 image crashes, hangs or never confirms it's healthy, the device rolls back to the last good firmware and reports why.
The first rollback also pauses the rollout, so that build stops reaching the rest of your fleet.
You can also turn off auto-confirm and confirm a build after your own health check.
Rolled-back devices show up in the dashboard with the reason, such as panic, watchdog or confirm timeout, and whoever started the rollout gets an email when it pauses.
https://t.co/iwkSHs0Xfh
Which ESP32 OTA setup fits your project?
We compared 12 options, from ArduinoOTA and ElegantOTA to AWS IoT, Azure, Golioth, Memfault and Mender, and linked every claim to the vendor's own docs.
Six questions get you there.
https://t.co/JxgaCmQI5u
How ESP32 OTA writes, boots and confirms a new image, why rollback depends on that last step, and when a fleet needs more than a DIY update loop.
https://t.co/guEUetaQ30
If you are shipping ESP32 firmware to a fleet, start with a small audience, keep the canary cohort stable, and widen only after confirmations and ordinary product behavior look right.
This walkthrough covers choosing groups and channels, starting at 10%, then ramping the same deployment to 25% and 100%.
https://t.co/cetfAAX8im
This solves the case where you are standing in front of the unit and the laptop driver story is a mess. The other half is the unit already on a customer network when you are not flying there.
USB or programmer path for factory and recovery. Pull OTA (device checks in, short-lived URL, signed image, auto-rollback) for everything after the enclosure is closed. Most fleets need both.
Agree. Download succeeding is the easy line. The contract that matters is that the new image stays on probation until it has done real work, then you mark it valid. If confirm never arrives, boot the previous slot with no server in the loop.
App-level confirm after a timeout beats "MQTT connected" alone. A few units rolling back overnight with nobody driving out is the design working.
That moment when the device is in another country and you can still ship a fix is why OTA has to work before the first customer unit leaves.
Golioth is a strong fit if you also want RPC and telemetry. If the pain is only pushing a signed image to a small fleet and rolling it back when the new build does not check in, you can keep the firmware stack much thinner: an Arduino or IDF client, a canary percent, and a trial boot.
Good first lesson. The part that usually gets skipped is the fragile window after reboot: the new image has to earn validity (radio up, app actually running) before you mark the slot good. If that confirm never comes, boot the previous slot with no server in the loop.
IDF covers download and write. The fleet problems show up later: who is in the canary set, what happens when 5% goes bad, and whether rollback is automatic. Worth designing that before the enclosure is sealed.
@JLCPCB Any of these paired with SimpleOTA is a winning recipe. Whether you’re a beginner, avid maker, or a commercial venture, our platform provides simple, straightforward over-the-air updates for your ESP32’s.
ESP32 Arduino cores ship precompiled bootloaders. Secure Boot is not available there, so a signed update has to be verified in application code, not by the bootloader.
SimpleOTA signed artifacts use Ed25519. You hold the private key; the service stores only the public key. The device pins that key and checks the signature over the exact downloaded bytes before the image is marked bootable. A mismatch returns a signature failure and the running firmware stays put.
#ESP32 https://t.co/xNpkuEOd3X