Skip to content

Cookie preferences

We use cookies for our own analytics and to see how our campaigns perform. We never sell your data. Necessary cookies keep the site working and cannot be switched off. See our Cookie Policy for details.

Security, load balancing and remembering your cookie choice.

Show us which pages people read and how they find the site, so we can improve it (Google Analytics).

Show us which of our ad campaigns bring visitors to the site (Google Ads).

© 2026 The ThingsBoard Authors
Try for free

ThingsBoard Cloud

Choose your data region

Your data stays in the region you choose, for residency and compliance. No credit card required.

Rather run it yourself? Install on your own servers

OTA Updates

ThingsBoard OTA (Over-the-Air) updates let you push firmware and software packages to devices remotely. You upload a package once, assign it to a device profile or individual device, and ThingsBoard notifies all affected devices and tracks each one’s update progress.

ThingsBoard supports two package types — Firmware (FOTA) and Software (SOTA). The distinction matters mainly for LwM2M devices, which handle the two types through different protocol objects. For MQTT, HTTP, and CoAP devices the update flow is identical regardless of type.

Navigate to Advanced features ⇾ OTA updates and click + Add package.
Required fields:

Field Description
Title Package name. Title + version must be unique per tenant.
Version Package version string.
Device Profile Limits this package to compatible devices only.
Type Firmware or Software.
Checksum Optional. Defaults to SHA-256 if omitted.

By default, ThingsBoard sends 100 device notifications per 60 seconds, controlled by TB_QUEUE_CORE_OTA_PACK_SIZE and TB_QUEUE_CORE_OTA_PACK_INTERVAL_MS. Total rollout time is (device count / pack size) × pack interval. With the default settings, a rollout to 1,000 devices takes about (1,000 / 100) × 60 s, or 10 minutes.

A per-device assignment overrides the profile assignment for that device only.

States up to INITIATED are set by ThingsBoard. All subsequent states are reported by the device firmware.

State Set by Meaning
QUEUED ThingsBoard Notification waiting to be pushed
INITIATED ThingsBoard Shared attributes updated; device notified
DOWNLOADING Device Download started
DOWNLOADED Device Download complete
VERIFIED Device Checksum passed
UPDATING Device Applying update (device may reboot)
UPDATED Device Update successful
FAILED Device Download, checksum, or apply error

ThingsBoard includes built-in Firmware and Software dashboards (auto-created for new tenants; importable from GitHub for existing ones). They show the update status of every device, historical records, and failure details.

Devices receive the update notification via shared attribute subscription and download the package over their transport. See the transport-specific guides for attribute topics, chunk download endpoints, and example client implementations:

  • MQTT OTA client
  • HTTP OTA client
  • CoAP OTA client
  • LwM2M OTA
  • Upload size — a single package upload is limited to 16 MB by default. System administrators can change this limit using the HTTP_MAX_PAYLOAD_SIZE_LIMIT_CONFIGURATION environment variable — a semicolon-separated list of URL pattern=limit in bytes entries. For example, /api/otaPackage/**=209715200 allows OTA uploads up to 200 MB.
  • Storage ceiling — a single package stored in the database cannot exceed 2 GB, regardless of the upload limit. This ceiling is not configurable.
  • Per-tenant total — the combined size of all OTA packages per tenant is controlled by the Maximum sum of data size of all OTA packages limit in the tenant profile (0 means unlimited, which is the default).