mrkeyoor.com_
Sat 07 Nov 06:54 UTC
Dev Toolsevaluationupdated 26 Oct 2026

osv-scanner review

OSV-Scanner is a command-line scanner that connects dependency inventories with known vulnerabilities in the OSV database. It uses OSV-Scalibr to extract supported manifests, lockfiles and installed artifacts. Source scanning, container scanning and experimental guided remediation have different coverage limits.

+86stars / 7d
Verdict

OSV-Scanner is worth evaluating for dependency vulnerability checks when your actual inputs match its documented extractors. In our October 10, 2026 run at commit 85c61ee, the recorded setup, build and go test steps exited successfully. That supports source-workflow feasibility in this sandbox, but does not establish an installed CLI, scan accuracy or complete test coverage. Before adopting it as a release gate, validate representative lockfiles, installed artifacts and expected advisory matches. Choose between it and broader scanners by required inputs and checks, rather than treating this run as evidence that it replaces Trivy.

We ran it

Lab card: what happened when we ran osv-scannerScreenshot of osv-scanner (google.github.io/osv-scanner)
Install✓ · 93s475 packages
Build✓ · 100s
Tests✓ · 79s74 passed · 0 failed of 74 (go test)
Repo1130 files~73,845 lines of source · 52.7 MB · 19 CI workflows

Answers from our run

Does osv-scanner build from source?

Dependencies installed in 93 seconds (475 packages), and the build succeeded in 100 seconds. We cloned commit 85c61ee into a clean Debian container with 3 CPUs and no project-specific setup.

Do osv-scanner's tests pass?

Yes. The project's own test command finished in 79 seconds and reported 74 passed, 0 failed (go test).

Who should not use osv-scanner?

Readers seeking evidence that the scanner detects arbitrary application flaws: this review evaluates dependency vulnerability scanning.

What are the alternatives to osv-scanner?

Trivy, Grype. OSV-Scanner is worth evaluating for dependency vulnerability checks when your actual inputs match its documented extractors.

Setup3/5The README recommends prebuilt binaries, and the recorded source-workflow steps exited zero. No separate installed-binary check or release-binary installation measurement is supplied.
Docs4/5The supplied documentation distinguishes artifacts from manifests, explains offline networking and limitations, and warns about remediation execution. Its detailed artifact matrix is more complete than the README summary.
Community2/5The two supplied issue threads show maintainer responses and fix statements. This is limited evidence of support activity, not a measured adoption level or representative response-time sample.
Maturity3/5Recorded repository command steps succeeded, and supplied issue threads document fixes. Scan accuracy, installed CLI behavior, compatibility and regression reproduction remain unmeasured here.

Discussed on

  1. hnVulnerability scanner written in Go that uses osv.dev data162 points
  2. hnGoogle releases open-source vulnerability scanning tool28 points

Who it’s for

Developers checking supported dependency files across multiple ecosystems.
CI owners who want an OSV-based dependency scanner with prebuilt binaries.
Container teams whose installed artifacts appear in the documented support matrix.
Teams able to maintain local advisory databases for offline scanning.

Who it’s NOT for

Readers seeking evidence that the scanner detects arbitrary application flaws: this review evaluates dependency vulnerability scanning.
Teams assuming a successful command means every dependency or container artifact was covered.
Operators expecting offline mode to update its database automatically or support commit-level scanning.
Users running experimental guided remediation on untrusted projects without reviewing its package-manager execution risks.
Teams requiring a measured comparison with Trivy: our recorded run contains no comparative scanning workload.

Setup reality

In our recorded run on October 10, 2026, at commit 85c61ee (full SHA 85c61eee3bcccbf489da94c1c5f55c96f5b41e3d), the setup step exited successfully after 93.303 seconds. The dependency metric recorded 475 entries; it is not a count of scanned packages. The setup tail records downloading Go 1.27.0, which does not establish that an OSV-Scanner binary was installed.

The recorded build step exited successfully after 99.938 seconds, with vet-exit:0 in its tail. The go test step exited successfully after 78.753 seconds. Its parser summary records 74 successful package results, zero failed package results and 16 packages with no test files. These are recorded package-summary counts, not 74 individual tests or verified exhaustive unique coverage. No complete-log reconciliation or new execution was performed.

The sandbox configuration recorded 3 CPUs, 8 GB of RAM and image golang:1.24-bookworm. That image label does not establish the runtime toolchain version. Repository metrics were 1,130 files, about 73,845 source lines and 52.7 MB, with 19 CI workflow files and no detected Dockerfile or top-level tests directory. The harness recorded 275 seconds overall.

The README recommends a prebuilt binary and offers go install as a source-build alternative. This run supplies no separate installed-binary check, release-binary timing, representative vulnerability scan, remediation trial or advisory-coverage measurement.

Start with the dependency evidence you need to scan

OSV-Scanner can fit a dependency-checking workflow, but its usefulness depends on what you give it. A source manifest, a resolved lockfile and an installed container artifact can describe different dependency versions.

The project's README describes OSV-Scanner as an officially supported frontend to the OSV database and a CLI interface to OSV-Scalibr. Those are documented capabilities, not findings from our sandbox. Our recorded run covers setup, a build step and repository tests; it contains no representative vulnerability-scanning workload.

What our recorded run establishes

On October 10, 2026, we recorded commit 85c61ee, full SHA 85c61eee3bcccbf489da94c1c5f55c96f5b41e3d. The setup step exited zero in 93.303 seconds and recorded a dependency count of 475. Its visible tail says it downloaded Go 1.27.0. Calling that a successful OSV-Scanner installation would go beyond the evidence: there is no separate installed-binary check.

The build step exited zero in 99.938 seconds; its tail records vet-exit:0. The go test step exited zero in 78.753 seconds. The stored parser summary reports 74 successful package results, zero failed package results and 16 packages with no test files. These figures do not count individual test cases. The supplied count-scope record also says exhaustive unique coverage was not verified, and the retained tail repeats package results in a summary section. We therefore report the parser's counts without presenting them as a reconciled test inventory.

The configured sandbox had 3 CPUs and 8 GB of RAM, using image golang:1.24-bookworm. The image name does not establish the toolchain that executed every step. Repository metrics recorded 1,130 files, about 73,845 source lines and 52.7 MB. Detection found 19 CI workflow files, no Dockerfile and no top-level tests directory. The Go test output itself includes packages with tests, so the directory signal does not mean tests are absent. Overall recorded harness time was 275 seconds.

No new execution was performed for this review. The record provides no measured detection accuracy, advisory total, audited-package count, scan coverage, remediation outcome or comparison with another scanner.

Match the extractor to the deployed dependency

The README advertises 11+ language ecosystems and 19+ lockfile types. Use the detailed supported-artifacts documentation to check your exact input rather than treating those headline counts as coverage guarantees.

That documentation recommends a resolved lockfile for the dependency versions selected for an environment. If none is available, it recommends a fully pinned manifest generated from the environment. Manifest extraction is best effort: a manifest may contain ranges, and an extracted version may differ from the installed version.

The detailed container matrix includes Alpine packages, Debian and Ubuntu packages, Ubuntu chiseled packages, Go binaries, Rust binaries built with cargo-auditable, Java uber jars, Node modules and Python wheels. This is more specific than the README's shorter Go, Java, Node and Python table. Rust support here depends on the documented binary format; it is not a promise to inspect every Rust binary.

The source documentation also identifies limits worth checking before adoption. Maven pom.xml transitive resolution is disabled in offline mode, and its computed dependency graph does not support test dependencies. C/C++ commit-level advisory coverage is incomplete. A successful scan should therefore be reviewed alongside its extracted inventory and the documented limits for that input.

Offline mode changes both networking and coverage

The README says online OSV.dev queries send package names, versions, ecosystems and file hashes. It describes deps.dev requests for supplementary package information and says no source code is transmitted. Native dependency resolution may contact package registries.

The offline documentation makes a useful distinction. With a previously downloaded database, --offline does not send project or dependency information, download updates or require a network connection. A missing local database causes an error. By contrast, --offline-vulnerabilities uses a local vulnerability database while allowing other features to make network requests.

Downloading or refreshing the database is a separate operation. Offline mode also lacks commit-level scanning. For a disconnected workflow, record database freshness and validate that the remaining supported inputs meet your needs; the offline switch alone does not preserve every online capability.

Guided remediation needs a separate decision

The README labels the fix command experimental. Its documented remediation files are npm package-lock.json, npm package.json and Maven pom.xml, with different strategies for each. Broad scan support does not imply equally broad automatic remediation.

The README warns that guided remediation can cause a package manager to execute scripts or follow external registries specified by an untrusted project. Review the project before running fixes, inspect any proposed dependency changes and run the project's own validation before accepting them. Our recorded run did not exercise remediation.

Treat reported regressions as dated cases

The v2.5.1 release notes list fixes for package namespaces in OSV.dev queries, the local database cache environment variable and local vulnerability matching. Our measured checkout is commit 85c61ee; it should not be relabeled as a test of the v2.5.1 release binary.

Issue 3017 reports incorrect Go standard-library findings when scanning an SPDX SBOM with v2.5.0 and v2.5.1. A maintainer said on August 27, 2026 that the issue was fixed upstream in e8af798 and would be included in the next release. The supplied issue extract shows it closed as completed on October 26, 2026, while retaining an await-release label. That establishes the report and upstream fix statement, but does not independently verify which release contains the fix or reproduce it in our run.

Issue 3018 reports outdated Python transitive resolution with the default data source. A maintainer said the deps.dev fix was merged on August 27, 2026, and the issue was closed as completed on September 1. Neither issue should be described as an open current regression. Their reproductions remain useful candidates for acceptance checks if your workflow uses those inputs.

Choose by the checks you need

Trivy documents vulnerability, secret and infrastructure-misconfiguration scanners across several targets. Grype documents vulnerability scanning for container images, filesystems and SBOMs. Those roles make them relevant alternatives, but our evidence contains no head-to-head workload establishing that one detects more findings or runs faster.

For OSV-Scanner, the next useful step is to select representative resolved dependency files or installed artifacts, confirm extraction coverage and check expected advisory matches. Test offline behavior separately if you need it. The successful repository command steps are a starting point for that evaluation.

How to read the scores

These are editorial assessments on a five-point scale, not measured product ratings: 1 means major unresolved obstacles or very little evidence; 2 means limited evidence; 3 means a documented basis for evaluation with material gaps; 4 means strong support within a defined scope; 5 requires broad, corroborated evidence. Community scores assess the evidence available here, not adoption or popularity. No overall score is calculated.

Alternatives

ProjectWhat it isPick it when
Trivy gh↗A security scanner with targets including container images, filesystems, remote Git repositories, virtual machine images and Kubernetes.Choose Trivy when you need documented scanners for secrets or infrastructure misconfigurations alongside known dependency vulnerabilities. We did not compare its results or speed with OSV-Scanner.
Grype gh↗A vulnerability scanner for container images, filesystems and SBOMs.Choose Grype when those image, filesystem or SBOM inputs match your workflow. Its README documents those targets; our run does not establish comparative detection quality.

What people are saying

  1. [github-trending] google/osv-scanner

Sources

  1. OSV-Scanner repository and README
  2. OSV-Scanner v2.5.1 release
  3. OSV-Scanner supported lockfiles
  4. OSV-Scanner offline mode
  5. Go standard-library regression report
  6. Python transitive resolution report

More dev tools reviews

git-cliff · blackbird · czkawka · controller-runtime · openchoreo · terraform-provider-azurerm · the whole board →