mrkeyoor.com_
Wed 23 Sept 00:36 UTC
Dev Toolsevaluationupdated 26 Aug 2026

grype review

Grype is a command-line vulnerability scanner for container images, local filesystems, and software bills of materials. It matches operating-system and language packages against vulnerability data, then adds EPSS, KEV, risk scoring, and OpenVEX context to help teams sort findings.

+16stars / 7d
Verdict

Our Grype run built in 134 seconds, but 4 of 98 test packages failed in integration, so adoption should include a pinned test image and checks for scanner drift. Use it for a fast, scriptable first pass across images, filesystems, and SBOMs, especially beside Syft. Do not let a clean report overrule package knowledge or a second scanner when the result controls a release.

We ran it

Lab card: what happened when we ran grypeScreenshot of grype (github.com/anchore/grype)
Install✓ · 91s823 packages
Build✓ · 134s
Tests✗ · 205s94 passed · 4 failed of 98 (go test)
Repo23241 files~148,817 lines of source · 17.4 MB · 5 CI workflows · Dockerfile · tests dir

Answers from our run

Does grype build from source?

Dependencies installed in 91 seconds (823 packages), and the build succeeded in 134 seconds. We cloned commit ab6707d into a clean Debian container with 3 CPUs and no project-specific setup.

Do grype's tests pass?

Not all of them: 94 of 98 passed and 4 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use grype?

Teams that need one scanner to be the final authority on every package: open issues 3674 and 3670 document an incorrect Grafana constraint and a missed vendored OpenSSL binary.

What are the alternatives to grype?

Trivy, OSV-Scanner, OWASP Dependency-Check. Our Grype run built in 134 seconds, but 4 of 98 test packages failed in integration, so adoption should include a pinned test image and checks for scanner drift.

Setup4/591-second install and 134-second build; integration tests failed
Docs4/5Clear targets and install paths, with some config fields missing
Community5/512,788 stars and active issue and pull request discussion
Maturity4/5Frequent releases, but correctness reports need operator attention

Who it’s for

Security and platform teams scanning container images before deployment.
Developers who want a local CLI for checking a directory or an existing SBOM.
CI owners who need machine-readable vulnerability results and risk signals.
Organizations already using Syft and wanting a paired scanner for its SBOMs.

Who it’s NOT for

Teams that need one scanner to be the final authority on every package: open issues 3674 and 3670 document an incorrect Grafana constraint and a missed vendored OpenSSL binary.
Auditors who require identical merged metadata on repeated runs: issue 3630 reports that --by-cve can retain different advisory details from the same input and database.
Users expecting every configuration field to be documented: issue 3663 says include-aliases and other ignore-rule fields are absent from the configuration reference.
Buyers who want a hosted dashboard and policy workflow in this repository: the README presents Grype as a scanner CLI and points to Anchore for commercial support.

Setup reality

Our sandbox installed 823 Go packages in 91 seconds and built commit ab6707d in 134 seconds. Tests then failed after 205 seconds: 94 passed and 4 failed out of 98. The log tail places the failure in test/integration and shows expected matcher names missing from a list.

The quick install is a shell script that writes the binary to /usr/local/bin; Homebrew, Docker, Chocolatey, and MacPorts routes are also documented. Scans need vulnerability database data, plus access to the target image, directory, or SBOM. Registry credentials may be needed for private images.

Container, filesystem, and SBOM inputs behave differently, so CI users must pin the target form and output policy. OpenVEX can filter or add context, while EPSS, KEV, and risk scores help order work. None of those signals removes the need to inspect surprising matches or misses.

It scans images, directories, and SBOMs from one CLI

Grype takes three common security inputs: a container image, a local filesystem, or an existing software bill of materials. Its package coverage spans major Linux distributions and language ecosystems including Java, JavaScript, Python, Go, Rust, Ruby, PHP, and .NET. It also understands Docker, OCI, and Singularity image formats. That makes it useful when a team wants one vulnerability check at several points between source checkout and deployment.

The output is more than a CVE list. Grype can include EPSS probability, CISA's Known Exploited Vulnerabilities status, a risk score, and OpenVEX statements that explain why a finding does or does not apply. Those fields can make a queue easier to sort, but they remain inputs to a decision. They do not prove that every package was identified correctly or that every advisory match is applicable.

A 91-second install still led to integration failures

We cloned commit ab6707d into an unprivileged Debian container with 3 CPUs and 8 GB of RAM. The checkout contained 23,241 files, about 148,817 source lines, and occupied 17.4 MB. Installing its Go dependencies succeeded in 91 seconds and pulled 823 packages. The build also succeeded, taking 134 seconds.

The repository has 5 CI workflow files, a Dockerfile, and a tests directory. Those are good maintenance signals, yet our full test command did not finish cleanly. That distinction matters for contributors: obtaining a binary was straightforward, while reproducing the repository's expected behavior was not. A company consuming only a release binary sees less setup work, but anyone changing matchers or output should budget for the integration suite.

What happened when we ran it

Our sandbox test run failed after 205 seconds. Go reported 94 passing packages and 4 failures out of 98. The final failure was github.com/anchore/grype/test/integration; the log tail showed a comparison where matcher names including JavaScript, OpenVEX, Pacman, Python, RPM, Ruby gem, and Rust appeared as removed expected entries. The supplied tail does not identify why the list differed, so attributing it to a missing service or a code defect would be guesswork.

The useful result is narrower and still important: commit ab6707d installed and compiled on the stated Go image, but its complete tests did not pass in our clean environment. Before changing matcher configuration or upgrading a production scanner, repeat the suite in the same image your CI uses and preserve the failing diff. Four failing packages can hide several assertions, so the package count should not be read as four individual broken cases.

Scanner findings need confirmation before they block a release

Open issue 3674 gives a concrete false-positive risk. The reporter says constraints for Grafana CVE-2026-42127 cover versions outside the affected minor series, causing a fixed Grafana artifact to be reported as vulnerable. Issue 3670 documents the opposite failure mode: a vendored OpenSSL binary owned by an unrelated RPM was detected during cataloging but suppressed by overlap handling, leaving a critical CVE unreported in the described image.

These are reports, not a measurement of Grype's overall accuracy. They do show why security teams should keep an exception process and a reproduction path. For a high-impact finding, inspect the package URL, detected version, advisory source, and fix range. For a surprising clean result, compare the SBOM with the actual files and consider a second scanner. A vulnerability tool is most useful when its evidence is reviewable, not when its exit code becomes unquestioned policy.

Repeated --by-cve output may not be byte-stable

Issue 3630 targets users who diff scanner results. Its reproduction feeds identical input and database data through --by-cve 20 times and reports that advisory metadata can vary when multiple records collapse into one CVE. The finding set stays stable, while fields such as namespace, data source, fix metadata, and URLs can come from different surviving records. That is a problem for cached reports and drift detection even if the visible CVE count does not change.

If reproducible JSON is a requirement, test that option with representative SBOMs before adopting it. Store the Grype version and database status beside every report, and compare normalized fields that your policy genuinely uses. The issue includes a detailed code-path analysis, but it remains open in the data we fetched. That makes the limitation citable and specific, without treating the proposed fix as shipped behavior.

Installation is easy; target access and database handling are the work

The README's fastest path pipes an installer into a privileged shell and places the binary in /usr/local/bin. It also links supported installation routes for Homebrew, Docker, Chocolatey, and MacPorts. Teams with stricter supply-chain rules should download and verify a pinned release through their normal artifact process instead of executing a remote installation script directly.

A useful scan also needs access to its target and current vulnerability data. Local directories and SBOM files are simple. Private registries introduce credentials and network policy, while container-daemon access can widen the CI job's privileges. Grype can consume a Syft SBOM directly, which is often the cleaner split: inventory the artifact once, retain that evidence, then scan the saved document under a pinned policy.

Active maintenance does not settle match quality

GitHub showed 12,788 stars, 411 combined issues and pull requests, and a last push on August 26, 2026. Release v0.117.0 was published on August 10, 2026. Its notes added vulnerable ranges to CycloneDX output, fixed a Rust CPE configuration behavior, updated 11 dependencies, and recorded 2 remediated dependency advisories. The Apache-2.0 license permits commercial use and modification.

That activity supports using Grype as maintained infrastructure rather than an abandoned experiment. It also creates regular database, matcher, and output changes that can affect policy. Pin the scanner version, record database metadata, exercise known-positive and known-negative samples, and review release notes before upgrades. Our 823-package install and failed integration run make the same point from the contributor side: the binary is easy to obtain, but dependable security decisions require a controlled process around it.

Alternatives

ProjectWhat it isPick it when
Trivy gh↗A security scanner covering vulnerabilities, misconfiguration, secrets, and licenses.pick this instead when one CLI must scan more than software vulnerabilities.
OSV-Scanner gh↗A scanner centered on lockfiles, SBOMs, and the OSV vulnerability database.pick this instead when source dependency and lockfile scanning is the main job.
OWASP Dependency-CheckAn established dependency scanner built around known vulnerable components.pick this instead when an OWASP tool and its build integrations fit an existing Java-heavy process.

What people are saying

  1. [github-trending] anchore/grype

Sources

  1. Grype README
  2. Grype repository facts
  3. Grype v0.117.0 release
  4. Issue 3670: missed vendored libraries
  5. Issue 3630: unstable by-CVE metadata
  6. Issue 3674: Grafana constraint report
  7. Issue 3663: missing configuration fields

More dev tools reviews

crabbox · asdf · discord.js · h4cker · bend · 100-exercises-to-learn-rust · the whole board →