Artifacts view¶
Every firmware build uploaded to the project. A summary card sits on the project page in Advanced mode, and the full Firmware artifacts page lists all of them, filterable by version or release notes, chip family, security mode, and whether they are archived.
What the list shows¶
Per artifact:
build_number, project-scoped, monotonic, never reusedversion_label, the human-readable string from the manifestframeworkandchip_family- the signing key id, when the build was uploaded as
signed
Uploads are append-only: an artifact cannot be edited or deleted, from either the dashboard or the API. To take a build out of circulation, archive it (see below).
Artifact detail¶
Opening a build shows the manifest exactly as it was uploaded, which is the compatibility contract the decision engine matches against and is otherwise invisible. Alongside it: the checksum, size and upload source, every deployment that has included the build, and how many devices report running it. Between this page and a device's own page you can settle why a particular device was or was not offered a particular build.
Archiving a build¶
Archiving is what you want when a build turns out to be bad. An archived artifact is never offered to a device and cannot be chosen for a new deployment, while the record of which devices ran it is untouched.
It is refused while any draft, active or paused deployment still
references the build: cancel or complete those first. That keeps a
deployment's own state the single answer to what it can reach, rather than
splitting it across two places.
Archiving is reversible, and both directions are recorded in the audit log.
Upload form¶
The manifest is entered as ordinary form fields, not pasted JSON: pick the binary, then fill in framework, version label and chip family, plus the optional compatibility fields (board id, hardware revision range, partition profile, NVS schema version) and the security mode. The form validates before accepting the upload, so a bad combination fails with an inline error rather than a rejected API call.
CI uses the JSON manifest directly instead. See the manifest schema.
Upload the app image, not a merged/factory image
Upload the application binary: for the Arduino toolchain that is
sketch.ino.bin. Do not upload the sibling build outputs the
toolchain also produces:
sketch.ino.merged.bin(bootloader + partition table + app, ~4 MB)sketch.ino.bootloader.bin,sketch.ino.partitions.binsketch.ino.elf,sketch.ino.map
An OTA update rewrites only the app partition, so a merged/factory
image (which includes the bootloader and partition table and is far
larger than one app partition) can never fit and the device rejects
it with update_begin_failed. SimpleOTA shows an advisory warning
when an upload's filename looks like one of these, but still accepts
it, so double-check you selected the right file.
Upload limits¶
Uploads are capped per calendar month, UTC, resetting at 00:00 on the
1st: 10 on Free, 100 on Maker, 500 on Pro. Hitting the cap blocks the
upload form and returns 400 from the API. See Plans and
limits.