Quick start

This page gets you from zero to a useful result fast. Everyone starts the same way. Branch off at the end.

1. Run Fallow

From your project root:

npx fallow

That runs three analyses in one pass:

  • Dead code: unused files, exports, dependencies, cycles, boundaries, and more
  • Duplication: repeated logic across files
  • Health: complexity hotspots and refactor targets

Built-in plugins cover Next.js, Vite, Ember, Wuchale, Jest, Tailwind, PandaCSS, Contentlayer, tap, tsd, and more. No configuration needed for the first run.

2. Run the focused commands you'll use most

npx fallow dead-code          # Cleanup candidates
npx fallow dupes              # Repeated logic
npx fallow health             # Complexity and refactor targets
npx fallow review             # Advisory review brief over changed files (always exits 0)
npx fallow fix --dry-run      # Preview automatic cleanup
  • dead-code reports unused files, exports, types, dependencies, circular deps, and boundary violations. See the dead code guide.
  • dupes catches AST-based duplicates in the default mild mode. Add --mode semantic to also catch clones with renamed variables. See the duplication guide.
  • health reports complexity findings, per-file maintainability, hotspots, and ranked refactor targets. See the health explanation.
  • fix --dry-run previews automatic cleanup. When you're ready, drop --dry-run. See the auto-fix guide.

Cleaning up or refactoring TypeScript? Add --type-aware when aliases, re-exports, class contracts, packages, or exact consumers affect the decision. This is an optional, slower semantic pass. See Type-aware TypeScript analysis.

3. Pick your next step

Existing repo with backlog? Read Adopt Fallow in an existing repo for a structured cleanup path, then come back here to wire up CI or VS Code.

Optional: create a config

Fallow works without a config file. When you want to customize, run:

fallow init

This auto-detects your project structure and generates a tailored config. It also adds .fallow/ to your .gitignore.

{
  "$schema": "https://raw.githubusercontent.com/fallow-rs/fallow/main/schema.json",
  "entry": ["src/workers/*.ts", "scripts/*.ts"],
  "ignorePatterns": ["**/*.generated.ts"],
  "rules": {
    "unused-files": "error",
    "unused-exports": "warn",
    "unused-types": "off"
  }
}

Migrating from knip or jscpd? Run fallow migrate, or see the knip or jscpd guides.

Optional: runtime intelligence

Fallow's static layer is free and open source. If you want to know what actually executed in production, add the runtime layer:

npx fallow license activate --trial --email [email protected]
npx fallow coverage setup
npx fallow health --runtime-coverage ./coverage

Before you do that, read Static vs runtime intelligence for the mental model, then the runtime coverage guide for setup details.

Next steps