Skip to main content

New FOTA Experience

nRF Cloud now uses Memfault's OTA engine to deliver firmware over-the-air (FOTA) updates. For application (app) updates, your devices keep working just as they do today — no firmware or SDK changes needed. All that changes is how you prepare and deploy an update.

This guide covers application FOTA. For modem firmware, jump to Modem and other firmware types.

What stays the same

For application FOTA, nothing changes on the device side:

  • No firmware rebuild and no SDK upgrade.
  • The same device protocols (CoAP, REST, and MQTT) and the same device authentication.
  • Your devices download and apply updates the same way they do today.

New capabilities

The new experience adds fleet-scale release management capabilities, including:

  • Staged rollouts — Release to a fraction of a cohort first, monitor, then expand to the full fleet. See Staged Rollout of a Release.
  • Approval workflows — Gate a Release activation behind an explicit approval before it reaches production devices. See Requiring Approvals for Release Activations.
  • Audit logs — See who changed what and when across your project, including release and deployment actions. See Audit Log.
  • SBOM management — Upload and manage a Software Bill of Materials per software version for vulnerability tracking and compliance. See SBOM.
  • Fleet-wide OTA update adoption — Track how new firmware versions propagate across your fleet over time with the Software Versions Chart, and see the exact next update each device will receive in the version matrix.

What changes for you

You now work with the following OTA model instead of legacy nRF Cloud bundles and jobs:

Legacy nRF CloudNew nRF Cloud experience
Firmware bundleRelease with OTA Payloads
FOTA jobDeployment for activating a release
Device group / tagCohort can be used for targeting groups of devices
Per-device job execution statusPer-cohort version matrix

See Over-the-Air Updates (OTA) for the full OTA model.

Deploying your first release

Collect Version Information

When you create a Release in the new nRF Cloud experience, three fields have to match your device — otherwise it won't be offered the update:

  1. Software Type — set it to app. Only the app software type gets application FOTA.
  2. Hardware Version — match your device's board exactly. Use the board name your firmware is built for (CONFIG_BOARD, for example thingy91x), which is the same value the device reports as its board.
  3. Software VersionVERSION_MAJOR.VERSION_MINOR.PATCHLEVEL from your project's VERSION file (add -EXTRAVERSION if you are using that argument as well)

Create a Release

Navigate to OTA Release -> Create Release and create your release.

For example, with the following info in your VERSION file

VERSION_MAJOR = 1
VERSION_MINOR = 5
PATCHLEVEL = 6
VERSION_TWEAK = 0
EXTRAVERSION = dev

This is what should be populated in the UI:

Create Release form with Software Type, Hardware Version, and Software Version

Add OTA payload to the Release

Next, upload the firmware binary (.bin) by clicking the "Add OTA Payload to Release":

Release detail page with the Add OTA Payload to Release button

Ensure the "Hardware Version" selected matched what you have set for CONFIG_BOARD and that you are selecting the correct .bin to update to.

tip

The binary is located in your application's build/ directory, typically at a location like build/app/zephyr/zephyr.signed.bin

CONFIG_BOARD setting can also be found in the build folder as well, typically build/app/zephyr/.config:

...
CONFIG_BOARD="thingy91x"
...

After submitting the right info, click "Add" to upload the binary:

Add OTA Payload dialog with Hardware Version selected and firmware binary chosen

Activate the Release

To deploy the release to your fleet, click the "Activate" button.

Release with the Activate button highlighted

Select the type of release you want. For testing an OTA on a single device, choose "Normal". For deploying to a large fleet, select "Staged Rollout" and select the percent of devices you would like to target.

note

All devices onboard into the "default" cohort and each device belongs to exactly one cohort at a time (unlike legacy nRF Cloud groups). To create custom cohorts and manage which devices are in each cohort, see Cohorts.

Activate Release dialog with Normal and Staged Rollout options

Celebrate 🎉

Your update has been successfully deployed. The next time a device checks in with nRF Cloud's FOTA service, it will receive the update.

Release progress and adoption can be tracked from the Cohort details page:

Cohort details page showing the software version distribution across devices

How to Automate

To upload releases as part of your CI process the Memfault CLI can be used, e.g

memfault --org-token YOUR_ORG_TOKEN \
--org YOUR_ORG --project YOUR_PROJECT \
upload-ota-payload \
--hardware-version nrf9160dk_nrf9160 \
--software-type app \
--software-version 1.2.3 \
build/app/zephyr/zephyr.signed.bin

Advanced OTA configuration

This guide covers the essentials of getting an application update to your fleet. The underlying OTA engine supports much more — staged rollouts, approval workflows, multiple cohorts, delta releases, downgrade control, release overrides, and the full version matrix.

For more context around all OTA capabilities, see Over-the-Air Updates (OTA).

Frequently asked questions

What about modem and other firmware types?

Only application (app) firmware uses the path above. Modem firmware updates through a separate project in the new nRF Cloud experience using the Memfault SDK. See Modem Firmware Update (FOTA). Devices with several updatable components can also bundle them with multi-component OTA.

Troubleshooting

SymptomLikely cause
Update never offered to the deviceHardware Version doesn't match the device's board (CONFIG_BOARD) — the most common cause
Release created but no devices updateRelease hasn't been activated — activate it on the device's cohort ("OTA Releases" → Activate)
Some devices update but others don'tDevices are in a different cohort than the one the Release was activated on; check each device's cohort
Device reports the wrong version after downloadingVerify the software_version reported by the device matches what was uploaded; check the Processing Log

Questions or Feedback?

Reach out to us on the DevZone community forum.