dead-code-detector

v2026.09.24

Find and remove dead code in TypeScript/JavaScript projects. Detects unused exports (functions, types, constants never imported elsewhere), unused npm dependencies (packages in package.json never imported), and unreachable code patterns (code after returns, always-false conditions, stale TODOs). Use when: "find dead code", "check for unused exports", "clean up unused code", "find unused dependencies", "audit codebase for dead code", "what code can I delete", or before major refactors.

GitHub
Install command
npx skhub add montagao/dead-code-detector
Markdown
SKILL.md

Dead Code Detector

Detect and eliminate dead code in TypeScript/JavaScript codebases.

Quick Start

Run the automated scanner:

node ~/.claude/skills/dead-code-detector/scripts/find-dead-code.js .

Output: Console report + dead-code-report.json with all findings.

What Gets Detected

1. Unused Exports

Exported symbols never imported elsewhere in the codebase.

// src/utils/helpers.ts
export function formatDate() { ... }  // Used
export function oldFormatter() { ... }  // DEAD - never imported

False positive handling: Automatically skips:

  • Entry points (index.ts, page.tsx, convex/ functions)
  • Common type suffixes (Props, Config, Schema)
  • Default exports (may be dynamically imported)

2. Unused Dependencies

Packages in package.json never imported anywhere.

{
  "dependencies": {
    "lodash": "^4.17.21",  // DEAD - replaced by native methods
    "react": "^18.0.0"     // Used
  }
}

False positive handling: Automatically skips:

  • Dev tools: typescript, eslint, prettier, vitest, jest
  • Type packages: @types/*
  • Build tools: webpack, vite, rollup, postcss, tailwindcss

3. Unreachable Code Patterns

// Code after return
function foo() {
  return 1;
  console.log("dead");  // FLAGGED
}

// Always-false conditions
if (false) { ... }  // FLAGGED

// Stale TODOs
// TODO (2021): Fix this  // FLAGGED as stale

Manual Investigation Workflow

For findings that need verification:

Check if export is truly unused

rg "symbolName" --type ts
rg "from.*filename" --type ts  # Check imports of file

Check for dynamic imports

rg "import\(['\"].*moduleName" --type ts
rg "require\(['\"].*moduleName" --type js

Check if dependency is used in config

rg "packageName" *.config.* package.json

Framework Considerations

Framework-specific exports that look unused but aren't:

FrameworkSafe to Keep
Next.jsgenerateStaticParams, generateMetadata, exports from page.tsx/layout.tsx
RemotionCompositions in Root.tsx, calculateMetadata
ConvexAll convex/ function exports (deployed via API)
ExpressRoute handlers, middleware (registered, not imported)

Cleanup Workflow

  1. Run scanner on project root
  2. Review findings - verify each is truly dead
  3. Remove code - delete unused exports and functions
  4. Remove dependencies - npm uninstall <package>
  5. Run tests - ensure nothing broke
  6. Commit - "chore: remove dead code"

Reference

For detailed patterns and edge cases, see references/patterns.md.

Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

Not specified

Source path

dead-code-detector

Default branch

main

Latest commit

7d9548c

Tree SHA

0fe4c04