$ fallow
── Dead Code ──────────────────────────────────────
● Unused files (16)
src/server/jobs/worker.ts
src/server/jobs/cron.ts
src/features/savings/hooks/usePotGroups.ts
… and 13 more
● Unused exports (20)
src/components/Card/index.ts
:1 CardFooter
src/providers/trpc-provider/index.tsx
:12 TRPCProvider
● Unused dependencies (1)
@trpc/react-query
── Duplication ────────────────────────────────────
● Clone groups (8) 2.1% duplication
src/features/tax/utils.ts:14-38
↔ src/features/savings/utils.ts:22-46 (25 lines, 92 tokens)
… and 7 more groups
── Complexity ─────────────────────────────────────
● High complexity (5)
src/server/router.ts:42 handleRequest cyclomatic: 28, cognitive: 34
src/features/tax/calculator.ts:15 computeTax cyclomatic: 22, cognitive: 19
… and 3 more
✗ Found 50 issues across 3 analyses in 0.21s
Why fallow?
Linters enforce style. Formatters enforce consistency. Fallow enforces relevance. AI writes code. Nobody deletes it. Every file added by an agent, every export left after a refactor, every boundary your architecture agreed to enforce — it accumulates. Linters work file by file. TypeScript works type by type. Neither builds the full , so neither can see what nothing depends on. Fallow does. One pass covers unused code, circular dependencies, architecture boundary violations, duplicated logic, and complexity hotspots. Rust-native, deterministic, zero configuration. Most projects finish in under a second. Run it today.Three tracks, one tool
Agents
Any agent that can run a shell command can use fallow.
fallow --format json gives structured results for all analyses. MCP server available for typed tool calling. Agents generate the code, fallow tells them what’s unused, circular, duplicated, or overly complex.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. Dead code, circular deps, duplication: 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 3,000+ file monorepos in ~300ms. Scales to 20,000+ file projects without memory issues. Linear memory usage, no garbage collection pauses. Fast enough for watch mode, agent loops, and tight CI.
Zero config
90 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
- vs knip (dead code)
- vs jscpd (duplication)
- vs madge/dpdm (circular deps)
Benchmarked on 6 real-world open-source projects from 174 to 20,416 files. 5-41x faster than knip v5, 2-18x faster than knip v6. On the largest monorepos, knip errors out and fallow is the only tool that completes. ‡ knip errors out without producing valid results.
What it finds
Dead code
15 issue types: unused files, exports, types, dependencies, enum members, class members (with inheritance and decorator awareness), circular dependencies, boundary violations, and more.
Circular dependencies
Detects dependency cycles in the module graph that cause initialization bugs, bundler issues, and make refactoring dangerous.
Code duplication
4 detection modes from exact matches to semantic clones with renamed variables. Clone families with refactoring suggestions.
Complexity hotspots
Finds the most complex functions, per-file maintainability scores, git-churn hotspots, and ranked refactoring targets.
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.CSS and SCSS accuracy
AST-based extraction for SCSS partials, @use/@forward, Tailwind directives, and CSS Module class tracking. No regex, no false positives on CSS imports.
Structured output
JSON, SARIF, and markdown output for programmatic use. Agents parse JSON directly. CI uploads SARIF to GitHub Code Scanning. Markdown for PR comments. Compact format for grep and scripting.
Get started
- Agents (CLI + MCP)
- Humans (CLI + VS Code)
- CI
Agents can run fallow directly from the command line. No MCP required:For structured tool calling via MCP, add to your agent’s config:Your agent can now call
analyze, check_changed, find_dupes, check_health, fix_preview, fix_apply, and project_info as structured tools. Full agent integration guideInstallation
npm, cargo, or binary download.
Quick Start
Full walkthrough in 2 minutes.
Configuration
Customize for your project.