Skip to content

SBOMs and Dependencies

Every scan produces an SBOM as a side-effect of dependency extraction. HarborGuard merges per-image SBOMs into a single org-wide dependency inventory, where each unique package surfaces with the images it appears in, all observed versions, license metadata, and any vulnerabilities tied to it.

Ecosystems

The inventory tracks packages across every ecosystem your scanners detect:

EcosystemTypical source
debDebian/Ubuntu apt packages
apkAlpine apk packages
rpmRHEL / Fedora / Amazon Linux
npmNode.js
pipPython
gemRuby
goGo modules
cargoRust
mavenJava

Filter the dependencies view by ecosystem with ?type=npm, by image with ?imageId=..., or by package name substring with ?q=....

Export formats

FormatEndpointNotes
CSVGET /api/dependencies/exportOne row per package; columns include name, type, all observed versions, license, PURL, image count, and vulnerability counts.
CycloneDX JSONPer-scan SBOM artifactGenerated alongside each scan and attached to the scan record.
SPDX JSONPer-scan SBOM artifactSame per-scan attachment, alternative format.

To pull the org-wide CSV:

curl -H "Authorization: Bearer $HG_API_KEY" \
  "https://harborguard.co/api/dependencies/export" \
  -o sbom-dependencies.csv

CycloneDX and SPDX bundles for individual scans are linked from the scan detail page and from the sboms section of any compliance report that includes it.

License tracking

For every package the inventory records the SPDX license identifier reported by the scanner (when available). The dependency table can be sorted and filtered by license to spot, for example, every GPL-3.0 package across your fleet, or anything where the license string is empty (typical for first-party / private packages).

License data also feeds the licenseCounts metric used by the SOC 2 CC9.2 (vendor / third-party) control and by custom report sections.

What gets merged

Two packages are considered the same dependency when:

  1. The package name matches exactly, and
  2. The ecosystem (type) matches exactly.

Versions are stored as a set on the merged record, so a single dependency row may show multiple images with multiple versions. The versions column in the CSV export concatenates them with ; separators.

Vulnerabilities are tied to the package + version pair, not just the package name — the dependency view's vulnCount reflects only versions you actually have deployed.

See also

On this page