fwsbom
SBOMs for bare-metal and RTOS firmware: the projects other SBOM tools miss.
Syft, Trivy and most SBOM generators look for package-manager lockfiles. A typical
STM32 / NXP / Nordic / ESP firmware project has none. Its third-party code is vendored
straight into the tree (FreeRTOS, Mbed TLS, lwIP, FatFs, HAL drivers), and
--gc-sections decides what actually ships. The result is SBOMs that are empty or wrong.
fwsbom reads the version numbers out of the vendored sources themselves. It then
checks your linker map file to report only what really made it into the image.
$ fwsbom . --map build/app.map --linked-only --name gateway --version 2.4.1 \
--supplier "Acme Devices" -o sbom.cdx.json
COMPONENT VERSION LINKED EVIDENCE
CMSIS-Core 5.6 ? Drivers/CMSIS/Core/Include/cmsis_version.h
FreeRTOS-Kernel 10.6.2 yes Middlewares/FreeRTOS-Kernel/include/task.h
lwIP 2.1.3 yes Middlewares/lwip/src/include/lwip/init.h
Mbed TLS 3.6.2 yes Middlewares/mbedtls/include/mbedtls/build_info.h
STM32F4xx HAL Driver 1.8.3 yes Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c
5 component(s)
The output is CycloneDX 1.5 JSON. Each component carries a purl, and a CPE where NVD has one, so the SBOM can be fed straight into Dependency-Track, OSV-Scanner or Grype for vulnerability monitoring:
$ fwsbom . -o sbom.cdx.json && grype sbom:sbom.cdx.json
CPEs are checked against the NVD product dictionary. Products filed under several vendors
(e.g. Mbed TLS: arm and trustedfirmware) get all of their CPEs, so matches are not lost to vendor naming.
Install
pip install fwsbom
Requires Python 3.8+ and has no dependencies.
Windows: if fwsbom is "not recognized" after installing (common with the Microsoft Store Python,
whose scripts folder isn't on PATH), run it as python -m fwsbom .... It's the same tool.
Install Grype with winget install Anchore.Grype, then open a new terminal.
Detected components
RTOS: FreeRTOS-Kernel · Eclipse ThreadX (Azure RTOS)
Networking / IoT: lwIP · FreeRTOS-Plus-TCP · NetX Duo · coreMQTT · Mbed TLS (2.x/3.x/4.x) · wolfSSL
Boot: MCUboot
USB: TinyUSB · STM32 USB Device / Host libraries
Storage / data: FatFs · littlefs · cJSON · nanopb
Vendor: CMSIS-Core · STM32Cube HAL drivers (all families) · STM32Cube firmware package version from
the CubeMX .ioc file (e.g. STM32Cube FW_L4 1.18.1)
The LINKED column means:
yes: at least one of the component's sources ended up in the imageno: compiled or vendored, but nothing reached the image (dropped with--linked-only)?: the component is header-only, or no map file was given
Missing a library you use? Open an issue. Adding a detector takes about 5 lines.
Why this matters now: EU Cyber Resilience Act
- Since 11 Sep 2026, manufacturers of products with digital elements sold in the EU must report actively exploited vulnerabilities to ENISA within 24 hours. Without a component inventory you cannot tell whether a new CVE affects you in time.
- From 11 Dec 2027, a machine-readable SBOM is part of the mandatory technical documentation.
- Penalties reach €15M or 2.5% of global turnover.
Need help getting CRA-ready?
fwsbom is free and Apache-2.0. Chen Embedded Software LLC also offers:
- CRA Firmware Readiness Kit: policy templates, vulnerability-handling process, ENISA report templates and a CI pipeline that regenerates and monitors your SBOM.
- Firmware CRA assessment (waitlist): a fixed-price review of your firmware, secure boot, update mechanism and SBOM, with a prioritised gap report.
Contact: chenembeddedsoftware@gmail.com (or open an issue for bugs and feature requests)
License
Apache-2.0 © 2026 Chen Embedded Software LLC
Metadata
Release files for fwsbom 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| fwsbom-0.3.1.tar.gz | 17.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fwsbom-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.0 kB
Release files / fwsbom-0.3.1.tar.gz
| Download URL | fwsbom-0.3.1.tar.gz |
|---|---|
| Size | 17.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
360defc44bccb65f761911936586cfa2ed0b151022aabce89cb53804ec4dd901
|
|
BLAKE2b-256 checksum How to use checksums |
cfaf65dc7cc6f6253f9100a73a4d2de0d17d3d29cd6a243ad5d4be3769136807
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.
Transparency logRelease files / fwsbom-0.3.1-py3-none-any.whl
| Download URL | fwsbom-0.3.1-py3-none-any.whl |
|---|---|
| Size | 16.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0e26af221eaa372662297999846201fbf4f1cdb86ab12bf76b39601cb22b7868
|
|
BLAKE2b-256 checksum How to use checksums |
c7f7c7acbe026ae831af2a8b6f0839acf972934e56f636dd3544628602f5ef61
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.
Transparency logSecurity for fwsbom 0.3.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for fwsbom-0.3.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 28, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.