A lightweight CLI focused on security & visibility of dependencies, inspecting Node.js projects for install/prepare hooks and binaries. Find out what dependencies are running scripts during install, why they are present, and what binaries they expose.
Supply chain attacks often leverage preinstall, install, postinstall, or prepare scripts to execute malicious code. It's difficult to quickly answer:
- Which direct/transitive dependencies run hooks in my project?
- Why exactly is this dependency in my tree?
- Has anything new with hooks been introduced since last week?
dephook solves this by giving you highly targeted, actionable insight into your dependency tree hooks without noise.
You can run it directly without installing using npx:
npx dephookOr install it as a dev dependency in your project:
npm install -D dephookTo install globally:
npm install -g dephookRun the tool without arguments to analyze your project (supports npm and pnpm).
dephook scanTo see debug logs and follow the internal process, run:
dephook scan --debugExample output (Terminal):
🔍 dephook results
[🌊 TRANSITIVE] 📦 esbuild@0.20.2 [⚙️ BIN]
🪝 Hooks: postinstall
⚙️ Bins: esbuild
🔗 Reason: my-app -> vite -> esbuild
📊 Summary
🚨 Packages with install/prepare hooks: 1
- 🎯 Direct: 0
- 🌊 Transitive: 1
- ⚙️ With bins: 1
Output deterministic JSON that you can pipe or save as an artifact:
dephook scan --json > .dephook.jsonExample output (JSON):
{
"projectName": "my-app",
"projectPath": "/path/to/my-app",
"packageManagerDetected": "npm",
"scannedAt": "2026-03-04T12:00:00.000Z",
"summary": {
"totalPackagesWithHooks": 1,
"totalDirect": 0,
"totalTransitive": 1,
"totalWithBin": 1,
"totalPrepare": 0
},
"items": [
{
"name": "esbuild",
"version": "0.20.2",
"scripts": { "postinstall": "node install.js" },
"bins": ["esbuild"],
"direct": false,
"reasonChain": ["my-app", "vite", "esbuild"],
"sourcePath": "/path/to/my-app/node_modules/esbuild",
"packageManager": "npm",
"flags": {
"hasPrepare": false,
"hasBin": true,
"multipleHooks": false
}
}
],
"warnings": []
}Great for generating tables/lists for PRs or Security Audits:
dephook scan --md > DEPENDENCY_HOOKS.mdExample output (Markdown):
# 🛡️ dephook Results
> 🕒 **Scanned At:** 2026-03-04T12:00:00.000Z
> 📁 **Project:** my-app
> 📦 **PackageManager:** npm
## 📊 Summary
- 🚨 **Total Packages with Hooks**: 1
- 🎯 **Direct Dependencies**: 0
- 🌊 **Transitive Dependencies**: 1
- ⚙️ **Expose Bins**: 1
- 🛠️ **Prepare Hooks**: 0
## Packages
### 📦 esbuild@0.20.2 🌊 (Transitive)
- 🪝 **Hooks:** `postinstall`
- ⚙️ **Bins:** `esbuild`
- 🔗 **Reason Chain:** `my-app -> vite -> esbuild`
- Configuration file support (
.dephook.json). - Automated diffs comparing lockfiles (
dephook diff). - SARIF export for GitHub Code Scanning compatibility.
- Yarn classic and berry support.
- Full Workspace analysis.