Skip to content

No account. No upload. Open advisory data.

Dependency scanning you can actually verify.

Every finding names the database it came from and links to the original advisory. Every suggested upgrade has been checked to exist, and checked not to be vulnerable itself.

package-lock.json · pnpm-lock.yaml · poetry.lock · uv.lock · go.mod · Gemfile.lock · composer.lock · Cargo.lock · packages.lock.json · gradle.lockfile

Why bother

Most scanners fail in the same three ways.

They cry wolf

Dan Abramov walked every npm audit warning in a fresh Create React App and found all of them were false positives in context. The maintainers recorded that, to their knowledge, not one warning in react-scripts was ever a real vulnerability for CRA users.

They invent severity

NIST stopped analysing every CVE in April 2026, so “no NVD score” is now the normal state rather than a clean bill of health. Scanners that print one merged number hide which source said what — and whether anyone said anything at all.

They say “just upgrade”

The version an advisory names as fixed is frequently not a version you can safely install. It may still be vulnerable to a sibling advisory, or deprecated, or never published.

How it works

Three steps, and you can audit all of them.

  1. 01

    Your file is parsed here

    The lockfile is read in your browser. It is never uploaded — that is an architectural guarantee, not a policy page, because a lockfile is a map of your internal package namespace.

  2. 02

    Only names go out

    We send package names and versions, show you exactly which ones before sending, and withhold anything resolving from a private registry.

  3. 03

    Four sources, cross-checked

    OSV.dev for advisories, deps.dev as an independent second opinion, npm’s own advisory data, and CISA’s exploited-in-the-wild catalogue.

What is different

Built so you can check our work.

Every finding is attributed

Each card names its upstream database, its licence, and links to the original record. Severities are shown per source, never merged — NVD is documented to re-score CVEs over the maintainer’s own assessment, and that disagreement is information.

The minimal fix, health-checked

Candidates are walked in ascending order, so the first survivor is the smallest safe upgrade by construction. Deprecated, yanked, unpublished and still-vulnerable versions are all rejected before we suggest anything.

Malware is a different answer

Not a worse severity. A malicious package gets its own panel telling you to remove it and rotate credentials, because “upgrade to 4.2.1” is the wrong instruction entirely.

Unverifiable claims stay out of the count

Unreviewed, withdrawn and disputed advisories are shown but excluded from the headline, and so is any match resting on a version comparison we cannot independently verify.

You see what is sent, before it is sent

A panel lists every name leaving the browser and lets you withhold any of them. Dependency-confusion attacks begin with learning an internal package name.

A lockfile is not a manifest

A package.json declares ranges and no transitive dependencies at all, which is where nearly every finding lives. Results say which you gave us and never dress one up as the other.

A worked example

Every advisory says lodash 4.17.15 is fixed in 4.17.21. It isn’t.

  • lodash 4.17.21still vulnerableGHSA-f23m-r3pf-42rh
  • lodash 4.17.23still vulnerableGHSA-r5fr-rjxr-66jc
  • lodash 4.18.0deprecated“Bad release” — the publisher
  • lodash 4.18.1suggestedclean, current, published

A scanner that reads the advisory’s fixed field tells you 4.17.21 and leaves you exposed. Walking the candidates and health-checking each one lands on 4.18.1 — which you can verify against the registry yourself in about ten seconds.

Coverage

What works today, and how well.

Whole-project scanning

All eight ecosystems, 28 file formats — every npm-family and Python lockfile, plus go.mod, Gemfile.lock, composer.lock, Cargo.lock, packages.lock.json and Maven’s dependency tree.

  • package-lock.json
  • pnpm-lock.yaml
  • uv.lock
  • go.mod
  • composer.lock
  • packages.lock.json

A Maven pom.xml usually records no versions at all — they are inherited from a parent POM — so Java needs the output of mvn dependency:tree, and the app says so by name rather than guessing.

Single-package lookup

All eight ecosystems, today — a lookup needs a registry client, not a lockfile parser.

  • npm
  • PyPI
  • Maven
  • Go
  • RubyGems
  • Packagist
  • crates.io
  • NuGet

Paste a name, a pkg: URL, or a registry link.

Questions

The things people ask first.

Does DepAudit upload my lockfile?

No. DepAudit parses the lockfile in your browser and never uploads the file. Only package names and versions are sent to the server, you are shown the exact list before it is sent, and anything resolving from a private registry is withheld automatically. This matters because a lockfile is a map of an organisation’s internal package namespace, and dependency-confusion attacks begin with learning an internal package name.

Which lockfiles can DepAudit scan?

DepAudit scans all eight ecosystems it covers — JavaScript, Python, Java, .NET, Go, Ruby, PHP and Rust — across 28 file formats. For JavaScript: package-lock.json, npm-shrinkwrap.json, pnpm-lock.yaml, yarn.lock (both Classic and Berry), bun.lock, and package.json for a best-effort check. For Python: poetry.lock, pdm.lock, uv.lock, Pipfile.lock and pylock.toml (PEP 751), plus requirements.txt and pyproject.toml. For Java: the output of `mvn dependency:tree`, and gradle.lockfile. For .NET: packages.lock.json. It also scans go.mod, Gemfile.lock, composer.lock and Cargo.lock. A Maven pom.xml is deliberately not scanned: it usually records no versions at all, because they are inherited from a parent POM, so only Maven itself can say what actually resolves.

Which advisory databases does DepAudit use?

DepAudit queries OSV.dev for advisory records, deps.dev as an independent second opinion on which advisories affect a given version, npm’s own advisory data as a cross-check, CISA’s Known Exploited Vulnerabilities catalogue for evidence of active exploitation, and FIRST’s EPSS for the forecast probability that a vulnerability is exploited in the next 30 days. Every finding names the database it came from, carries that source’s licence, and links to the original advisory record.

Why does DepAudit sometimes suggest a different version than the advisory does?

Because the version an advisory names as fixed is often not a version you can safely install. DepAudit walks candidate versions in ascending order and rejects any that are still vulnerable to another advisory, deprecated, yanked, or never published, so the first survivor is the smallest safe upgrade. For lodash 4.17.15 every advisory names 4.17.21 as the fix, but 4.17.21 is still affected by two further advisories and 4.18.0 is deprecated by its publisher, so the correct answer is 4.18.1.

What is the difference between scanning a package.json and a lockfile?

A package.json declares version ranges and contains no transitive dependencies at all, which is where nearly every finding lives. DepAudit will scan one, but it resolves each range to the version a fresh install would pick today and labels the result best-effort. A lockfile records exact resolved versions and the full dependency tree, so it produces an exact answer. DepAudit always states which of the two you gave it.

Does DepAudit need an account, a CLI, or access to my repository?

No. DepAudit runs entirely in a web page with no sign-up, no CLI to install and no repository permissions to grant. Nothing is stored: the scan is not saved, and the raw file never leaves the browser tab.

How is DepAudit different from npm audit?

DepAudit separates findings by whether they actually ship — runtime, build-time or unattributable — instead of reporting one undifferentiated count, and it orders them by evidence of real-world exploitation before severity, so a vulnerability CISA records as under active attack outranks a higher CVSS score nobody has ever exploited. Severities are shown per source rather than merged, unreviewed and disputed advisories are excluded from the headline count, and malware is treated as a separate incident-response state rather than a worse severity.

Is DepAudit free?

Yes. DepAudit is free to use with no account and no usage limits, and it is built on openly licensed advisory data: the GitHub Advisory Database under CC-BY 4.0 and the CISA KEV catalogue under CC0, among others.

Drop in a lockfile. Nothing gets uploaded.

No sign-up, no repository access, no CLI. Parsing happens in this tab, and you approve the package names before any of them leave it.

Scan a lockfile

Parsed in your browser.

Your lockfile is never uploaded. Only package names and versions are sent, and anything resolving from a private registry is withheld.

Advisory data from the GitHub Advisory Database, PyPA, Go vulndb, RustSec and others via OSV.dev, cross-checked against deps.dev. Exploitation signals from CISA KEV. Individual sources and licences are shown on each finding.

PrivacyTerms