Everything belonging to the v4 TypeScript engine moves to the master-v4
branch: apps/, packages/, build-utils/, changesets, pnpm workspace, turbo,
the Node.js CI workflow and the ts-* release jobs. What remains is the
Rust workspace under rust/, the npm wrapper and platform packages, the
GitHub Action, Docker image, flake, skills, benchmark and fixtures/.
- rust.yml gains a smoke job that runs the release binary against
fixtures/ (json, sarif, html) and asserts clones and reporters
- release.yml keeps only the Rust jobs; pnpm removed from every workflow;
audit.yml keeps cargo audit + cargo deny; dependabot drops the root npm entry
- root package.json becomes a thin private package depending on the exact
jscpd@5 version so the pre-commit hook keeps installing the binary;
sync-version.mjs keeps it in step
- .pre-commit-hooks.yaml used v4-only flags that the v5 CLI rejects; fixed
- FORMATS.md is now generated from the Rust tokenizer (224 formats)
- README, docs, CONTRIBUTING, SECURITY, package and crate descriptions,
benchmark and skills rewritten for v5 on its own terms: no v5-vs-v4 speed
multipliers anywhere, a single "Looking for v4?" pointer to master-v4
Replace detailed within-format clone tables with a format support
overview showing language count, section-aware parsing for vue/svelte/
astro/markdown, and cross-format capability. Keep cross-format and
markdown detection tables as supporting evidence.
Add jscpd@5 console reporter (110 tokens/clone) as a reference point
between the AI reporter (13 tokens/clone) and JSON (591 tokens/clone).
Update rankings table to include all formats.
Compares output sizes and tokens/clone across all tools. jscpd AI
reporter achieves 13 tokens/clone (44× reduction vs JSON), making it
practical for LLM prompt contexts.
Compares how tools handle embedded code blocks in markdown (YAML,
TypeScript, Python) vs flat-text matching. Also adds markdown column
to within-format clones table.
Compares how each tool handles multi-file component formats — detecting
duplicates both within the same format and across formats (e.g. shared
CSS between .svelte and .astro). Also updates timing numbers from
latest run.