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 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. Grep-based reachability misses dynamic imports, so it only filters when there are zero 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
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 9 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
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
GitHub Dependabot Reachability AST analysis (Oct 2026) JS/TS only, Enterprise Cloud only, preview
Snyk / Mend SaaS, paid $100K+/year for reachability
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.3.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.3.0
File Size Uploaded Provenance Actions
depquiet-0.3.0.tar.gz 63.1 kB With provenance Details for depquiet-0.3.0.tar.gz

Built distribution (wheel)

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

Total release size: 95.4 kB

Release files / depquiet-0.3.0.tar.gz

Download URL depquiet-0.3.0.tar.gz
Size 63.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b84e82d3063726c1ad2f4623fdbe359a6514c86e8b22a2a43ee194154dde2708
BLAKE2b-256 checksum
How to use checksums
584574caaae5b7825dcaceb55b2a473bd870a9d8ae36ac99ca68b88c61dbd409
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.3.0-py3-none-any.whl

Download URL depquiet-0.3.0-py3-none-any.whl
Size 32.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8457a17f6d610e3751aabd2b756a3c960518ebf91c5f5efd17519e63fc026290
BLAKE2b-256 checksum
How to use checksums
f91ff69407a1dbb543eefa29d47f28746d33ea901019e9d1c41eacd82885d448
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.3.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.3.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.3.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