Skip to main content

depquiet

CI PyPI version Python versions License: MIT codecov

Cut through vulnerability alert noise. Surface the signal.

depquiet triages your npm audit / pip-audit / trivy / grype / Dependabot / Snyk alerts and tells you which CVEs actually matter — in seconds, not hours.

$ depquiet

depquiet scan — npm (847 packages)

✅ FILTERED: 89 alerts (92%)
   ├─ 34 unreachable — vulnerable function never imported
   ├─ 28 devDependency only — never reaches production
   ├─ 19 EPSS < 10% — no known exploits in the wild
   └─  8 community template — confirmed false positive

⚠️  REVIEW: 5 alerts
   CVE-2024-48930       lodash                    moderate   EPSS 3%
   CVE-2024-21538       semver                    moderate   EPSS 1%
   ...

🔴 ACTION REQUIRED: 3 alerts
   • CVE-2024-4068  braces  EPSS 67%  FIX: update to 3.0.3
     → src/config/parser.ts
     → src/utils/glob.ts
     Uncontrolled resource consumption in braces

Total: 97 alerts — 3 actionable | 5 review | 89 filtered
You just saved ~178 minutes of triage time.

The problem

Developers spend 3.5 hours per week triaging vulnerability alerts that are mostly noise:

  • 60-80% of CVEs are unreachable — the vulnerable function is never called
  • npm audit is "broken by design" — 80% false positive rate (Dan Abramov)
  • Dependabot is a "noise machine" — Filippo Valsorda recommends disabling it entirely

The result? Alert fatigue. Teams either waste hours triaging noise, or ignore alerts entirely and miss the real threats.

How it works

depquiet applies four deterministic filters to separate signal from noise:

Filter What it catches Impact
Reachability Package/function never imported in your source code 40-60% reduction
Dev dependencies Vulnerabilities in devDependencies that never reach production 10-20% reduction
EPSS scoring CVEs with near-zero probability of real-world exploitation 5-15% reduction
Community templates Known false positives confirmed by the community (nuclei-style YAML) Growing over time

Zero false negatives by design

depquiet is conservative: it would rather let a false positive through than dismiss a real vulnerability. Python reachability uses AST parsing (immune to false positives from comments, docstrings, and strings); JS/TS uses string matching. Both only filter when there are zero real references to the package in your source code.

Install

pip install depquiet

Usage

# Auto-detect package manager and scan
depquiet

# Scan a specific directory
depquiet --path ./my-app

# Pipe in existing audit output
npm audit --json | depquiet --stdin
pip-audit --format json | depquiet --stdin
trivy fs --format json . | depquiet --stdin
grype dir:. -o json | depquiet --stdin
snyk test --json | depquiet --stdin
gh api /repos/OWNER/REPO/dependabot/alerts --paginate | depquiet --stdin

# Fully offline (skip EPSS API)
depquiet --offline

# SARIF output for GitHub Code Scanning
depquiet --sarif results.sarif

# JSON output for scripting
depquiet --json

# Custom EPSS threshold
depquiet --epss-threshold 0.05

# Use a custom config file
depquiet --config ./ci-config.yaml

CI Integration

Exit codes

  • 0 — No ACTION items (safe to pass)
  • 1 — ACTION items found (fail the build)

GitHub Actions (Marketplace)

- name: Triage vulnerabilities
  uses: samuelrojas-dev/depquiet@v0
  with:
    sarif: results.sarif
    epss-threshold: "0.1"

The action installs depquiet, runs it, uploads SARIF to GitHub Code Scanning, and fails the build if ACTION items are found.

GitHub Actions (manual)

- name: Triage vulnerabilities
  run: |
    pip install depquiet
    depquiet --sarif results.sarif

- name: Upload SARIF
  uses: github/codeql-action/upload-sarif@v3
  with:
    sarif_file: results.sarif

Community templates

depquiet ships with 21 built-in templates and uses nuclei-style YAML to encode community knowledge about known false positives:

Template CVE What it catches
lodash prototype pollution CVE-2020-8203, CVE-2019-10744 Only merge/defaultsDeep affected
semver ReDoS CVE-2022-25883 Only untrusted input to semver.clean()
express open redirect CVE-2024-29041 Only unvalidated res.redirect()
axios SSRF CVE-2023-45857 Server-side only, cookies header
json5 prototype pollution CVE-2022-46175 Only parse() with reviver
webpack-dev-middleware CVE-2024-29180 devDependency only
ip SSRF CVE-2023-42282 isPrivate() bypass, private networks only
requests proxy-auth leak CVE-2023-32681 Only proxy + redirect
cryptography null dereference CVE-2024-0727 Only PKCS12 loading
minimist prototype pollution CVE-2021-44906, CVE-2020-7598 Only direct argv parsing
nth-check ReDoS CVE-2021-3803 Only attacker-controlled CSS selectors
postcss ReDoS CVE-2023-44270 Only attacker-controlled CSS input
glob-parent ReDoS CVE-2020-28469 Only attacker-controlled glob patterns
node-forge timing attack CVE-2022-24771 Network-level timing measurement needed
shell-quote injection CVE-2021-42740 Only untrusted input to shell-quote
qs prototype pollution CVE-2022-24999 Mitigated by Express 4.x defaults
word-wrap ReDoS CVE-2023-26115 Only very long strings without spaces
tough-cookie prototype pollution CVE-2023-26136 Only attacker-controlled cookie jar
js-yaml code execution CVE-2013-4660 Only yaml.load() with default schema
certifi root CA removal CVE-2023-37920 Only chains through distrusted CAs
id: prototype-pollution-lodash
reason: "Only defaultsDeep/merge are affected. Other lodash functions are safe."
cves:
  - CVE-2020-8203
  - CVE-2019-10744
not-imported: ["lodash.defaultsDeep", "lodash.merge"]

Contributing a template

  1. Create a YAML file in templates/dismiss/
  2. Add the CVE, affected package, and dismiss conditions
  3. Open a PR — the community reviews and merges

Templates are the growth engine: each contribution helps every depquiet user.

Configuration

Create .depquiet.yaml in your project root (or pass --config path/to/config.yaml):

# EPSS threshold (default: 0.1 = 10%)
epss_threshold: 0.05

# Extra template directories
template_dirs:
  - ./my-templates

# Packages to always flag (never filter)
always_flag:
  - lodash
  - express

# Skip EPSS API (fully offline)
offline: false

CLI flags override config values. template_dirs from both sources are merged.

Benchmarks

Tested against realistic audit output from popular project types (offline mode, all filters active):

Scenario Parser Alerts Filtered Rate
Express web app npm 15 13 87%
Django web app pip 9 8 89%
Node.js container trivy 8 8 100%
Python container grype 6 5 83%
Total 38 34 89%

89% noise reduction — from 38 alerts down to 4 that actually matter. All scans complete in under 10ms.

Run the benchmarks yourself: python -I benchmarks/run_benchmark.py

Compared to

Tool Approach Limitation
npm audit Flags everything 80% false positives
pip-audit Flags everything No triage, no context
Trivy Multi-scanner, flags everything Great detection, no triage
Grype Container scanner, flags everything Great detection, no triage
Dependabot GitHub-only, flags everything No triage, overwhelming noise
Snyk SaaS, paid $100K+/year for reachability
GitHub Dependabot Reachability AST analysis (Oct 2026) JS/TS only, Enterprise Cloud only, preview
Mend / Black Duck SaaS, paid Enterprise pricing, vendor lock-in
depquiet Deterministic triage, community templates Free, offline, works everywhere

License

MIT

Contributing

depquiet is designed to grow through community templates. Every template you contribute helps thousands of developers skip a false positive.

See CONTRIBUTING.md for guidelines.

Metadata

Release files for depquiet 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for depquiet 0.4.0
File Size Uploaded Provenance Actions
depquiet-0.4.0.tar.gz 69.8 kB With provenance Details for depquiet-0.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for depquiet 0.4.0
File Interpreter ABI Platform Actions
depquiet-0.4.0-py3-none-any.whl Python 3 none any Details for depquiet-0.4.0-py3-none-any.whl

Total release size: 104.9 kB

Release files / depquiet-0.4.0.tar.gz

Download URL depquiet-0.4.0.tar.gz
Size 69.8 kB
Tags Source
SHA-256 checksum
How to use checksums
0bcaf7740506221fd3c84ccc5429053dbe33ad1adfa96a94231b49ddfc1ccdb8
BLAKE2b-256 checksum
How to use checksums
e9904496e2da68722e8996c70aa1c76403b2271d3916d8b49a60b0a539067686
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Release files / depquiet-0.4.0-py3-none-any.whl

Download URL depquiet-0.4.0-py3-none-any.whl
Size 35.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3f393959cbec29b62e87dbca7569bc8548379fbe3d4172ea9274ece2d18c3914
BLAKE2b-256 checksum
How to use checksums
b49267333987231943387201533174d6088568b907f3a440bc01efa00e9aa09e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

Security for depquiet 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for depquiet-0.4.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page