depquiet
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
- Create a YAML file in
templates/dismiss/ - Add the CVE, affected package, and dismiss conditions
- 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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.