Metadata tells a story, too.
Catch lifecycle scripts, dependency changes, and new main, bin, or exports entry points alongside source findings.
OPEN SOURCE. OFFLINE FIRST.
The version number changed. What else did?
Compare npm upgrades, uncover new capabilities, and get the evidence before you merge.
Python 3.11No API keysNever executes package code
python3 -m depdiff npm demo-package 1.0.0 2.0.0 --fixtures-dir fixturesThe saved report could not be loaded. The CLI still works offline.
+ Newly introduced capability
exec('echo setup');
Explore precomputed reports from harmless, local fixtures. No package is executed. A recommendation is evidence for review, not proof of maliciousness.
01 BEYOND THE VERSION NUMBER
A dependency can gain new powers without gaining a known CVE. depdiff makes those changes visible, one capability at a time.
Scan JavaScript and lifecycle metadata for sensitive capabilities. See what was added, removed, or already there.
Read the detection rulesRead-only regex analysis, not runtime tracing.
Child-process APIs can invoke shell commands and affect the host beyond the JavaScript runtime.
child_process.exec(command);Catch lifecycle scripts, dependency changes, and new main, bin, or exports entry points alongside source findings.
Review and extend external detection rules. Set patterns, categories, severities, and reasons without changing the engine.
Get deterministic scores and explainable reasons. Existing capability categories aren’t repeatedly scored as new risk.
02 READ. COMPARE. EXPLAIN.
No black box. No package execution. Just a small, inspectable pipeline that turns two local versions into a review you can act on.
Point to local npm fixtures. Validate names, versions, paths, and size limits before reading their contents.
package.json + JavaScriptScan with YAML rules. Compare metadata and classify capabilities as added, removed, or unchanged.
old → new → what changedGet source locations, snippets, severity, and reasons. Share a terminal, JSON, or Markdown report.
ok / review / block-recommendedtwo versions → static analysis → capability diff → your decision ALL LOCAL03 A SECOND LOOK, WHERE IT COUNTS
Built for the people who have to decide what ships. Use depdiff alongside your existing vulnerability scanners and update bots.
Before merging a dependency-update PR, compare the two local versions. Attach the Markdown report so the next reviewer sees the same evidence.
Investigate newly visible process, environment, network, or install-script capabilities, even when there isn’t a published advisory.
Work offline with your own fixtures and detection rules. No account, remote service, API key, or source-code upload required.
04 TRY IT ON YOUR MACHINE
Clone the repository and compare the included harmless fixtures. Python 3.11.2, zero third-party dependencies, and no installation needed.
Read the full documentationgit clone https://github.com/ashin-15/DepDiff.git
cd DepDiffpython3 -m depdiff npm demo-package 1.0.0 2.0.0 \
--fixtures-dir fixturespython3 -m depdiff npm demo-package 1.0.0 2.0.0 \
--fixtures-dir fixtures --format markdown \
--output reports/review.mdGOOD TO KNOW
No. Those tools help with known advisories and dependency updates. depdiff complements them with a version-to-version view of statically visible capabilities and metadata.
No. The interactive showcase displays saved reports generated by the real CLI against synthetic fixtures. To analyze your own local versions, use the Python CLI.
Not in the current MVP. You provide local package directories under the documented fixture layout. Registry retrieval, lockfile-wide analysis, and hosted scanning are not implemented.
No. It means the configured static analysis found no new capability signal under its policy. Regex analysis can miss runtime-only behavior and obfuscation, or match comments and strings. Every verdict is a recommendation for human review.
Better dependency decisions start with better evidence.
Explore depdiff on GitHub