Syft fallback
Last updated October 25, 2026View source (v0.30.0)
Bomly bundles Syft as the fallback detector. Syft lists packages by recognizing files on disk. It runs when no native detector applies, which is how Bomly covers operating-system package databases and ecosystems without a native graph resolver.
| Property | Value |
|---|---|
| Detector | syft-detector |
| Graph shape | Flat package list, no dependency edges |
| Package managers covered | 23 (below) |
| Install-first support | No |
| Remediation hints | None |
Package managers covered
These have no native Bomly detector, so Syft is the only chain entry.
| Ecosystem | Package manager | Evidence patterns |
|---|---|---|
alpm | alpm | var/lib/pacman/local/*/desc |
apk | apk | lib/apk/db/installed |
conda | conda | conda-meta/*.json |
dpkg | dpkg | lib/dpkg/status, lib/dpkg/status.d/*, lib/opkg/info/*.control, lib/opkg/status |
erlang | otp | *.app |
erlang | rebar | rebar.lock |
haskell | cabal | cabal.project.freeze |
haskell | stack | stack.yaml, stack.yaml.lock |
homebrew | homebrew | Cellar/*/*/.brew/*.rb, Library/Taps/*/*/Formula/*.rb |
lua | luarocks | *.rockspec |
nix | nix | nix/var/nix/db/db.sqlite, nix/store/*.drv |
ocaml | opam | *opam |
php | pear | php/.registry/**/*.reg |
portage | portage | var/db/pkg/*/*/CONTENTS |
prolog | swipl-pack | pack.pl |
python | pdm | pdm.lock, pyproject.toml |
python | setuppy | setup.py |
r | r-package | DESCRIPTION |
rpm | rpm | var/lib/rpmmanifest/container-manifest-2, var/lib/rpm/Packages, var/lib/rpm/Packages.db, var/lib/rpm/rpmdb.sqlite, usr/share/rpm/Packages, usr/share/rpm/Packages.db, usr/share/rpm/rpmdb.sqlite, usr/lib/sysimage/rpm/Packages, usr/lib/sysimage/rpm/Packages.db, usr/lib/sysimage/rpm/rpmdb.sqlite |
ruby | gemspec | *.gemspec |
snap | snap | snap/snapcraft.yaml, snap/manifest.yaml, doc/linux-modules-*/changelog.Debian.gz, usr/share/snappy/dpkg.yaml |
terraform | terraform | .terraform.lock.hcl |
wordpress | wordpress | wp-content/plugins/*/*.php |
Container operating systems
Syft also identifies the base operating system of a container image. That choice decides which package database Syft reads. The reader column is Syft's own name for the module that reads that database.
| OS family | Syft reader | Version source |
|---|---|---|
| alpine | apk-db-cataloger | /etc/os-release |
| amazon linux (amzn) | rpm-db-cataloger | /etc/os-release |
| busybox | busybox-cataloger | busybox binary metadata |
| centos | rpm-db-cataloger | /etc/os-release |
| debian | dpkg-db-cataloger | /etc/os-release |
| distroless | os-release-cataloger | /etc/os-release |
| photon | rpm-db-cataloger | /etc/os-release |
| red hat (rhel, ubi) | rpm-db-cataloger | /etc/os-release |
| rocky linux (rocky) | rpm-db-cataloger | /etc/os-release |
| sles (suse, opensuse, opensuse leap) | rpm-db-cataloger | /etc/os-release |
| ubuntu | dpkg-db-cataloger | /etc/os-release |
| wolfi | apk-db-cataloger | /etc/os-release |
What Syft gives you
Syft lists packages by recognizing files: operating-system package databases, installed-package manifests, and the lockfiles it knows. It reports what is present, not how those packages relate to each other.
That difference matters for the rest of the pipeline:
bomly explainneeds edges to walk a path from your project to a package. Syft packages have no edges, so there is no path to show.- Scope filters such as
--direct-onlyrely on the direct-versus-transitive distinction, which comes from the graph. Syft results carry no such distinction. - Vulnerability and license enrichment work as usual. Matchers key on package coordinates, which Syft does provide.
When Syft runs
Syft is the last entry in almost every detector chain. It runs when the native detector ahead of it cannot produce graph data. That happens when no lockfile is present, the build tool is missing from PATH, or the ecosystem has no native detector at all.
For container images it does most of the work. Bomly scans the layers, and native detectors only apply where a recognizable lockfile made it into the image.
Turning it off
Syft is a normal detector, so the standard selector grammar applies:
# Drop the Syft fallback: native detectors only
bomly scan --detectors -syft-detector
# Use only Syft
bomly scan --detectors syft-detector
Without Syft, a project it was covering resolves nothing, and the scan exits 3 with "no detector chain produced a graph". That is usually what you want in CI, where a flat package list could pass a gate that a real graph would fail.
See also
- Support matrix: every ecosystem and package manager, native and Syft-backed
- Scan targets: container images and the other input shapes Syft handles
- Detectors: chains, selection, and the native-versus-Syft comparison