Skip to main content
Fallow provides a one-command migration path from knip. Your existing configuration is automatically translated. Beyond what knip covers, fallow also detects code duplication, complexity hotspots, maintainability scores, and architecture boundary violations.

Migration workflow

1

Preview the migration

Run fallow migrate --dry-run to see the generated config without writing anything:
fallow migrate --dry-run
Fallow searches for: knip.json, knip.jsonc, .knip.json, .knip.jsonc, knip.ts, knip.config.ts, and the knip field in package.json. TypeScript config files (knip.ts, knip.config.ts) are detected but cannot be parsed. Convert to knip.json first.
$ fallow migrate --dry-run
Detected knip config: knip.json

Migrating settings:
  entry entry: ["src/index.ts", "src/cli.ts"]
  ignore ignorePatterns: ["**/*.generated.ts"]
  ignoreDeps ignoreDependencies: ["@types/node"]

 Cannot migrate:
  ignoreBinaries not applicable in fallow

Would write: .fallowrc.json
Run without --dry-run to write the config.
2

Generate the config

Once you’re happy with the preview, run the migration:
fallow migrate            # Write .fallowrc.json
fallow migrate --toml     # Or output as fallow.toml
3

Review the config

Open the generated config and verify the translated entry points, ignore patterns, and plugin mappings. Warnings are shown for any fields that couldn’t be migrated automatically.
4

Run your first analysis

Run dead code analysis and compare results against knip. Then explore the other analyses that knip does not cover:
fallow dead-code    # Unused code + circular deps + boundaries
fallow dupes        # Code duplication
fallow health       # Complexity hotspots + maintainability scores
fallow              # All of the above in one pass

What gets migrated

knipfallow
entryentry
project— (fallow auto-discovers project files)
ignoreignorePatterns
ignoreDependenciesignoreDependencies
ignoreExportsUsedInFileignoreExportsUsedInFile (boolean and { type, interface } object form both supported)
ignoreBinaries— (not applicable)
Plugin configsClosest fallow plugin equivalent

Warnings and caveats

fallow migrate is loud about anything it cannot translate so the migration is not silently lossy. Unknown rule names. If your knip rules, exclude, or include entries reference a key that fallow does not know (typo, future knip rule, or an issue type the migrator has not yet catalogued), the migration emits a warning like:
Warning (1 skipped field):
  [knip] `rules.unsued-files`: unknown knip issue type `unsued-files`; not migrated
  (suggestion: check for a typo or report the missing mapping at https://docs.fallow.tools/migration/from-knip)
If the key is in the documented unmappable list (binaries, optionalPeerDependencies, and similar issue types knip emits but fallow does not), the warning reads issue type \X` has no fallow equivalent` and has no suggestion. Glob-engine drift. Knip and fallow use different glob engines, so entry and ignorePatterns are copied verbatim but may match a slightly different file set than they did under knip. When the migrated config carries either field, the migrate command prints:
Note: knip and fallow use different glob engines; verify migrated entry / ignorePatterns
      with `fallow check` before relying on CI. See https://docs.fallow.tools/migration/from-knip
Common patterns (brace expansion {ts,tsx}, double-star **, src/**) match identically across both engines. Known drift today: fallow’s ignorePatterns does not honor leading ! as negation; entries are matched literally. Run fallow check on a representative subset before relying on the migrated globs in CI.

Comparison

Fallow is a Rust-native standalone binary. No Node.js runtime, no JIT warmup, no garbage collection pauses.
Metricfallowknip
Speed vs knip v53—36x fasterBaseline
Speed vs knip v62—14x fasterBaseline
Memory usage3—11x lessBaseline
Runtime dependencyNone (standalone binary)Node.js
CI setupDownload binaryInstall Node + npm dependencies

Key differences

No runtime dependency

Fallow is a standalone binary. No Node.js runtime, no dependency conflicts, faster CI setup.

See also

Custom plugins

Build plugins for frameworks fallow doesn’t cover yet.

fallow migrate

Full CLI reference for the migrate command.