Skip to content

Beta status & caveats

CDC Badge OS is pre-1.0 beta firmware. The security model described in the rest of this section is real and source-verified, but the project is explicit that data on the badge is not authoritative and that some features are unfinished. Read this page before you trust the badge with anything you cannot re-create.

Every flash can wipe all stored data on the badge: FIDO2/U2F credentials, TOTP seeds, password-vault entries, GPG keys and the badge PIN. The project’s own guidance is blunt about it:

The project does not ship migration code. Because it is pre-1.0, every release is allowed to be data-breaking:

  • There are no version-detection or fallback paths that read an older on-device format.
  • New on-device formats are introduced freely and old ones are deleted in the same change.
  • When the on-device data layout changes incompatibly, the firmware wipes and re-initialises instead of converting.

This is enforced mechanically by a build-profile byte. The firmware stores a profile byte in NVS and compares it to the value compiled into the running build. On a mismatch (including first boot or a malformed value), the next boot performs a full factory wipe (NVS partition plus every TROPIC01 ECC and R-Memory slot) before the device comes up. The same mechanism backs the duress self-destruct.

Some features are present in the firmware but flagged as unfinished or untested on hardware. As of this writing the project marks:

FeatureStatus
GPG / CCIDWorking, but the on-device UI is WIP
BLE vCardWIP, untested on hardware
BLE SerialWIP, untested on hardware

Treat anything marked WIP as experimental: it may change, break, or behave differently than documented. The feature matrix in the project README is the current source of truth for status.

DEBUG_MODE is a compile-time flag that defaults to on (1). It primarily controls how much the firmware logs, and in particular whether sensitive material is logged:

  • Log verbosity. With DEBUG_MODE on, the default log level is DEBUG; off, it is WARN.
  • Sensitive-value logging. Debug builds log cryptographic intermediates in the FIDO2 PIN/ECDH path and dump binary buffers in hex. In a release build the hex-dump helper is compiled to swallow its input, specifically because hex dumps can leak key material.
  • Serial log gating. In a release build (with Secure Serial enabled), INFO/DEBUG log output is held back until a serial session authenticates; errors and warnings still flow so boot failures stay visible. Debug builds do not gate logs this way.
  • Diagnostics. Debug builds also emit extra diagnostics such as main-task stack low-water logging.

DEBUG_MODE is folded into the build-profile byte, so changing it is itself a breaking change that triggers a factory wipe on the next boot.

CaveatReality
MaturityPre-1.0 beta
Data durabilityCan be wiped by flash, breaking change, or duress
MigrationsNone; breaking changes wipe + reinit
Layout guardBuild-profile byte (software, not anti-rollback)
WIP featuresGPG UI, BLE vCard, BLE Serial
DEBUG_MODE defaultOn (1); must be off for production