Firmware artifacts¶
A firmware artifact is an immutable bundle of:
- The binary (
firmware.bin): stored in object storage. - The manifest: declares what hardware this binary fits.
- A SHA-256 of the binary: devices verify after download.
- A project-scoped build number: assigned at upload time, never reused, never gap-filled.
Artifacts are immutable. Re-upload = new artifact = new build
number. There is no "edit this artifact" operation.
Storage¶
Binaries live in object storage managed by SimpleOTA. Devices are only ever handed a pre-signed download URL with a short expiry (default 5 minutes); the binary bytes never flow through the SimpleOTA API servers.
Manifest¶
Required for Arduino, optional for ESP-IDF.
A minimal Arduino manifest:
{
"framework": "arduino",
"chip_family": "esp32",
"board_id": "esp32dev",
"partition_profile": "default_4mb",
"nvs_schema_version": 1,
"security_mode": "basic"
}
See Manifest schema for the full reference.
Where do artifacts come from?¶
- CI/CD: typical. Tag a release in your firmware repo, GitHub Actions / GitLab CI builds and uploads. See GitHub Actions.
- Dashboard upload: fine for one-offs and internal tools.
- Developer API direct: for custom build pipelines.
Cleaning up¶
The dashboard's artifact view shows which artifacts are referenced by active deployments. Old artifacts can be deleted; doing so deletes the binary in object storage but keeps the audit log of which devices received which build.