Migration workflow
Preview the migration
Run Fallow searches for
fallow migrate --dry-run to see the generated config without writing anything:.jscpd.json and the jscpd field in package.json.Review the config
Open the generated config and verify the translated thresholds, token counts, and ignore patterns.
What gets migrated
| jscpd | fallow |
|---|---|
threshold | duplicates.threshold |
minTokens | duplicates.minTokens |
minLines | duplicates.minLines |
ignore | ignorePatterns |
format | — (fallow auto-detects languages) |
Comparison
| fallow | jscpd | |
|---|---|---|
| Raw duplication speed | Part of the broader audit flow | jscpd v5 is faster on the current README benchmark fixtures |
| Detection modes | 4 (strict, mild, weak, semantic) | 3 (strict, mild, weak) |
| Algorithm | Suffix array with LCP | Rust rewrite in v5 |
| Unused code + circular deps | Built-in (fallow dead-code) | Not included |
| Complexity + maintainability | Built-in (fallow health) | Not included |
| Clone families | Yes, with refactoring suggestions | No |
| Cross-language | TS to JS type stripping | Format-based |
| Baseline tracking | Yes | No |
| Runtime dependency | Native binary | Native binary in v5 |
Detection mode mapping
jscpd v5 supportsstrict, mild, and weak modes. The closest fallow equivalent for exact token matching is strict.
Fallow defaults to mild mode, which normalizes syntax variations and may flag more clones than jscpd did. To match jscpd’s behavior more closely, use strict mode:
One tool for the full picture
Fallow covers unused code, duplication, complexity hotspots, circular dependencies, and architecture boundaries in a single binary. It can replace separate jscpd, knip, and madge workflows when you want one combined audit.
See also
Duplication analysis
Deep dive into fallow’s duplication detection engine.
fallow dupes
Full CLI reference for the dupes command.