knip-dead-code

SKILL.md

Knip Dead Code Detection

Knip is a comprehensive tool for finding unused code, dependencies, and exports in JavaScript and TypeScript projects. It helps maintain clean codebases and catch dead code before it accumulates.

When to Use This Skill

Use this skill when... Use another approach when...
Finding unused dependencies Removing unused CSS (use PurgeCSS)
Detecting unused exports in libraries Finding runtime dead code paths
Cleaning up codebases after refactors Optimizing bundle size (use bundler tree-shaking)
Enforcing dependency hygiene in CI Detecting duplicate dependencies (use npm-dedupe)

Core Expertise

What is Knip?

  • Unused detection: Files, dependencies, exports, types, enum members
  • Plugin system: Supports 80+ frameworks and tools
  • Fast: Analyzes large codebases in seconds
  • Actionable: Clear reports with file locations
  • CI-ready: Exit codes for failing builds

Installation

# Project-local (recommended)
bun add --dev knip

# Verify installation
bunx knip --version

Basic Usage

# Run Knip (scans entire project)
bunx knip

# Show only unused dependencies
bunx knip --dependencies

# Show only unused exports
bunx knip --exports

# Show only unused files
bunx knip --files

# Production mode (only check production dependencies)
bunx knip --production

# Exclude specific issue types
bunx knip --exclude-exports-used-in-file

# Output JSON (for CI)
bunx knip --reporter json

# Debug mode (show configuration)
bunx knip --debug

Configuration

Auto-detection (Zero Config)

Knip automatically detects:

  • Entry points (package.json main, exports, bin)
  • Frameworks (Next.js, Vite, Remix, etc.)
  • Test runners (Vitest, Jest, Playwright)
  • Build tools (ESLint, TypeScript, PostCSS)

No configuration needed for standard projects.

knip.json (Explicit Configuration)

{
  "$schema": "https://unpkg.com/knip@latest/schema.json",
  "entry": ["src/index.ts", "src/cli.ts"],
  "project": ["src/**/*.ts"],
  "ignore": ["**/*.test.ts", "scripts/**"],
  "ignoreDependencies": ["@types/*"],
  "ignoreBinaries": ["npm-check-updates"]
}

knip.ts (TypeScript Configuration)

// knip.ts
import type { KnipConfig } from 'knip';

const config: KnipConfig = {
  entry: ['src/index.ts', 'src/cli.ts'],
  project: ['src/**/*.ts', 'scripts/**/*.ts'],
  ignore: ['**/*.test.ts', '**/*.spec.ts', 'tmp/**'],
  ignoreDependencies: [
    '@types/*', // Type definitions
    'typescript', // Always needed
  ],
  ignoreExportsUsedInFile: true,
  ignoreWorkspaces: ['packages/legacy/**'],
};

export default config;

Common Patterns

Check Only Unused Dependencies

# Fastest check - only dependencies
bunx knip --dependencies

# Exit with error if any unused dependencies
bunx knip --dependencies --max-issues 0

Use in CI to enforce strict dependency hygiene.

Check Only Exports (Library Development)

# Check for unused exports
bunx knip --exports

# Allow exports used in same file
bunx knip --exports --exclude-exports-used-in-file

Use for libraries to ensure clean public API.

Production vs Development Dependencies

# Check production code only
bunx knip --production

# Check everything (including dev dependencies)
bunx knip

Interpreting Results

Example Output

No unused files
No unused dependencies
2 unused exports

src/utils.ts:
  - calculateTax (line 42)
  - formatDate (line 58)

src/types.ts:
  - UserRole (line 12)

Issue Types

Type Description Action
Unused file File not imported anywhere Delete or add to entry points
Unused dependency Package in package.json not used Remove from dependencies
Unused export Exported but never imported Remove export or make private
Unused type Type/interface exported but unused Remove or make internal
Unused enum member Enum member never referenced Remove member
Duplicate export Same export from multiple files Consolidate exports

Agentic Optimizations

Context Command
Quick scan bunx knip
Dependencies only bunx knip --dependencies
Exports only bunx knip --exports
CI strict mode bunx knip --max-issues 0
Production check bunx knip --production
JSON output bunx knip --reporter json
Debug config bunx knip --debug
Changed files bunx knip --changed --base main

Quick Reference

Flag Description
--dependencies Check only unused dependencies
--exports Check only unused exports
--files Check only unused files
--production Production dependencies only
--max-issues N Fail if more than N issues
--reporter json JSON output for CI
--reporter compact Compact output
--debug Show configuration details
--changed Check only changed files
--changed --base main Changed files since main
--workspace NAME Check specific workspace
--exclude-exports-used-in-file Ignore same-file exports

For detailed examples, advanced patterns, and best practices, see REFERENCE.md.

References

Weekly Installs
28
GitHub Stars
13
First Seen
Feb 27, 2026
Installed on
cline26
github-copilot26
codex26
kimi-cli26
gemini-cli26
cursor26