So your compliance team wants SBOMs now. Let me guess - they just heard about supply chain attacks after ignoring security for years. If you need to generate these things, Syft is probably your best bet.
The whole SBOM push came from the SolarWinds mess and that Log4j nightmare that had everyone scrambling to inventory their dependencies. Now instead of writing code, we catalog what we're using. Progress, I guess. At least Syft does this without making you parse XML by hand or wade through NIST docs.
Why This Tool Doesn't Suck (Much)
Container Scanning That Doesn't Break: Syft handles 30+ package ecosystems - APK, DEB, RPM, Python wheels, NPM, Maven JARs, Go modules, and whatever new package manager appeared this week. It doesn't choke on weird symlinks like other scanners do.
Actually Scans Container Layers: Unlike tools that just parse manifests, Syft digs through all container layers to find embedded packages. Use --scope all-layers
if you want everything, but prepare for huge SBOM files.
Multiple Output Formats: Outputs CycloneDX, SPDX, or Syft's JSON format. I use Syft JSON for automation - it keeps the most metadata and doesn't randomly drop fields like SPDX sometimes does.
Fast Enough for CI/CD: Takes 2-5 minutes for most containers, which isn't terrible. Still slow enough that you'll check Slack while waiting. Set your pipeline timeout to 15+ minutes or you'll get random failures.
Works with Grype: Grype actually consumes Syft SBOMs without issues. Two tools from the same vendor that work together - rare but nice. The workflow is documented pretty well and doesn't require wrestling with auth tokens.