Skip to main content
npx fallow check    # Dead code — zero config, sub-second
npx fallow dupes    # Duplication — find copy-paste clones
npx fallow fix      # Auto-remove unused exports & deps
$ fallow check
0.030sINFO fallow_analyze:run_plugins: active plugins plugins=“nextjs, vite, vitest, playwright, storybook, eslint, typescript, tailwind, drizzle, commitlint, sentry”
0.050sINFO fallow_analyze: incremental cache stats cache_hits=1008 cache_misses=0
Unused files (16)
src/server/jobs/worker.ts
src/server/jobs/cron.ts
src/features/savings/hooks/usePotGroups.ts
src/features/tax/hooks/useKiaSuggestion.ts
src/features/forecasting/hooks/useTargetProgress.ts
… and 11 more

Unused exports (20)
src/components/Card/index.ts
:1 CardFooter
src/providers/trpc-provider/index.tsx
:12 TRPCProvider
src/server/jobs/queue.ts
:61 enqueueJobDelayed
:206 sweepStuckProcessingJobs

Unused type exports (314)
… across 87 files

Unused dependencies (1)
@trpc/react-query

Duplicate exports (50)
… across 23 files

Found 401 issues in 0.16s

Why fallow?

Dead code and duplication slow builds, bloat bundles, and make codebases harder to navigate. AI-assisted development accelerates the problem. Agents generate code but don’t clean up after themselves. They can’t: static analysis requires building and traversing a module graph, which is fundamentally different from reading files in a context window. It builds the full import graph, traces re-export chains through barrel files, and reports everything that isn’t reachable. Deterministically, exhaustively, with zero configuration.

Three tracks, one tool

Agents

Any agent that can run a shell command can use fallow. fallow check --format json gives structured results. MCP server available for typed tool calling. Agents generate the code, fallow tells them what’s unused.

Humans

Real-time diagnostics in VS Code. Code Lens above every export. One-click fixes. The CLI for power users. Instant feedback as you code.

CI

The safety net. GitHub Actions with SARIF upload, baseline comparison for incremental adoption, PR-scoped analysis with --changed-since. Nothing lands in main without passing fallow.

Deterministic

Every result is traceable to a concrete import graph path. No probabilistic guessing, no missed files. If fallow says it’s unused, you can verify exactly why.

Sub-second

Rust-native with Oxc parser and rayon parallelism. Analyzes 5,000+ files in under 200ms, using 3-15x less memory than knip. Fast enough for watch mode, agent loops, and tight CI.

Zero config

84 built-in plugins auto-detect Next.js, Vite, Jest, Tailwind, and more. Works out of the box. No setup, no config files, just run it.

Speed comparison

ProjectFilesfallowknip v5knip v6vs v5vs v6
zod17423ms590ms308ms26.1x13.6x
fastify28622ms804ms236ms36.2x10.6x
preact24424ms799ms—†33.9x
synthetic (1,000 files)1,00045ms380ms196ms8.5x4.4x
synthetic (5,000 files)5,000201ms646ms340ms3.2x1.7x
Speedup narrows on larger projects as analysis time dominates over startup: 26-36x on real-world projects vs knip v5 (10-14x vs v6), 3-9x on 1,000+ file projects. Fallow stays sub-second even at 5,000 files. † knip v6 excluded for preact due to a v6 regression on this project.

What it finds

Dead code

11 issue types: unused files, exports, types, dependencies, devDependencies, enum members, class members, unresolved imports, unlisted deps, duplicate exports, circular dependencies.

Code duplication

4 detection modes from exact matches to semantic clones with renamed variables. Clone families with refactoring suggestions.

Auto-fix

Remove unused exports and dependencies automatically. Agents can run fallow fix --yes from CLI or call fix_apply via MCP. Humans preview with --dry-run.

Structured output

JSON and SARIF output for programmatic use. Agents parse JSON directly. CI uploads SARIF to GitHub Code Scanning. Compact format for grep and scripting.

Get started

Agents can run fallow directly from the command line. No MCP required:
npx fallow check --format json
npx fallow fix --dry-run --format json
For structured tool calling via MCP, add to your agent’s config:
{
  "mcpServers": {
    "fallow": {
      "command": "fallow-mcp"
    }
  }
}
Your agent can now call analyze, check_changed, find_dupes, fix_preview, fix_apply, and project_info as structured tools. Full agent integration guide

Installation

npm, cargo, or binary download.

Quick Start

Full walkthrough in 2 minutes.

Configuration

Customize for your project.