Date: 2026-06-08
Runs per configuration: 10 (fixtures, svelte), 3 (CopilotKit)
Machine: macOS (Apple Silicon)
| Tool | Version | Runtime |
|---|
| jscpd v4 | 4.2.5 | Node.js |
| jscpd v5 (cpd) | 5.0.4 | Native binary (Rust) |
| Target | Files | Size | Description |
|---|
| fixtures | 548 | 1.5 MB | Multi-language test fixtures (126+ formats) |
| svelte | 8,963 | 38 MB | Svelte framework source code |
| CopilotKit | 17,092 | 159 MB | Large real-world TypeScript/React project |
| Metric | jscpd v4 | jscpd v5 | Speedup |
|---|
| Mean real time | 1.030s | 0.030s | 34.3x |
| Std dev | 0.042s | 0.000s | |
| Min | 1.000s | 0.030s | |
| Max | 1.130s | 0.030s | |
| Mean user time | 1.174s | 0.085s | |
| Mean sys time | 0.074s | 0.050s | |
| Metric | jscpd v4 | jscpd v5 | Speedup |
|---|
| Mean real time | 15.803s | 0.428s | 36.9x |
| Std dev | 1.010s | 0.021s | |
| Min | 14.740s | 0.390s | |
| Max | 17.790s | 0.450s | |
| Mean user time | 16.075s | 0.553s | |
| Mean sys time | 0.738s | 1.110s | |
| Metric | jscpd v4 | jscpd v5 | Speedup |
|---|
| Mean real time | 82.890s | 3.440s | 24.1x |
| Std dev | 4.086s | 0.699s | |
| Min | 79.560s | 2.900s | |
| Max | 87.450s | 4.230s | |
| Mean user time | 100.020s | 7.323s | |
| Mean sys time | 18.263s | 3.100s | |
| Metric | jscpd v4 | jscpd v5 |
|---|
| Files analyzed | 364 | 347 |
| Clones found | 211 | 212 |
| Duplicated lines | 9,969 (47.08%) | 9,133 (37.12%) |
| Duplicated tokens | 73,416 (47.64%) | 56,491 (43.30%) |
| Metric | jscpd v4 | jscpd v5 |
|---|
| Files analyzed | 11,672 | 4,322 |
| Clones found | 903 | 1,055 |
| Duplicated lines | 18,246 (7.34%) | 21,821 (8.78%) |
| Metric | jscpd v4 | jscpd v5 |
|---|
| Files analyzed | 13,944 | 12,386 |
| Clones found | 12,272 | 22,487 |
| Run | Real (s) | User (s) | Sys (s) |
|---|
| 1 | 1.13 | 1.17 | 0.10 |
| 2 | 1.00 | 1.15 | 0.07 |
| 3 | 1.01 | 1.16 | 0.07 |
| 4 | 1.01 | 1.17 | 0.07 |
| 5 | 1.00 | 1.16 | 0.07 |
| 6 | 1.01 | 1.17 | 0.07 |
| 7 | 1.01 | 1.17 | 0.07 |
| 8 | 1.02 | 1.19 | 0.07 |
| 9 | 1.03 | 1.20 | 0.07 |
| 10 | 1.08 | 1.20 | 0.08 |
| Run | Real (s) | User (s) | Sys (s) |
|---|
| 1 | 0.03 | 0.08 | 0.05 |
| 2 | 0.03 | 0.09 | 0.05 |
| 3 | 0.03 | 0.08 | 0.05 |
| 4 | 0.03 | 0.08 | 0.05 |
| 5 | 0.03 | 0.08 | 0.05 |
| 6 | 0.03 | 0.09 | 0.06 |
| 7 | 0.03 | 0.09 | 0.04 |
| 8 | 0.03 | 0.09 | 0.05 |
| 9 | 0.03 | 0.08 | 0.05 |
| 10 | 0.03 | 0.09 | 0.05 |
| Run | Real (s) | User (s) | Sys (s) |
|---|
| 1 | 15.98 | 16.06 | 0.70 |
| 2 | 15.06 | 15.55 | 0.59 |
| 3 | 14.74 | 15.35 | 0.56 |
| 4 | 17.37 | 16.03 | 1.04 |
| 5 | 17.79 | 17.54 | 1.38 |
| 6 | 15.86 | 16.00 | 0.72 |
| 7 | 15.11 | 15.67 | 0.63 |
| 8 | 15.28 | 15.89 | 0.60 |
| 9 | 15.47 | 15.99 | 0.59 |
| 10 | 15.37 | 16.67 | 0.57 |
| Run | Real (s) | User (s) | Sys (s) |
|---|
| 1 | 0.39 | 0.55 | 0.96 |
| 2 | 0.43 | 0.55 | 1.23 |
| 3 | 0.40 | 0.55 | 0.95 |
| 4 | 0.41 | 0.54 | 1.18 |
| 5 | 0.45 | 0.56 | 1.11 |
| 6 | 0.45 | 0.56 | 1.20 |
| 7 | 0.44 | 0.56 | 1.19 |
| 8 | 0.44 | 0.55 | 1.17 |
| 9 | 0.43 | 0.56 | 0.97 |
| 10 | 0.44 | 0.55 | 1.14 |
| Run | Real (s) | User (s) | Sys (s) |
|---|
| 1 | 87.45 | 99.76 | 20.15 |
| 2 | 79.56 | 97.08 | 16.02 |
| 3 | 81.66 | 103.22 | 18.62 |
| Run | Real (s) | User (s) | Sys (s) |
|---|
| 1 | 2.90 | 7.41 | 3.13 |
| 2 | 4.23 | 7.16 | 3.18 |
| 3 | 3.19 | 7.40 | 2.99 |
After correcting the benchmark methodology, v5 is consistently 24–37x faster than v4:
| Target | v4 (TypeScript) | v5 (Rust) | Speedup |
|---|
| fixtures (548 files, 1.5 MB) | 1.03s | 0.03s | 34.3x |
| svelte (9K files, 38 MB) | 15.80s | 0.43s | 36.9x |
| CopilotKit (17K files, 159 MB) | 82.89s | 3.44s | 24.1x |
-
Startup overhead: v5's native binary has near-zero startup cost. v4's Node.js runtime adds ~1s even for tiny fixtures.
-
Scaling: v5 scales well from small to large codebases. CopilotKit (159 MB) takes only 3.4s. v4 takes 83s on the same target.
-
CPU utilization: v5's higher user time relative to real time (e.g., CopilotKit: 7.3s user vs 3.4s real) shows effective multi-threading. v4 is single-threaded (user ≈ real).
-
Consistency: v5 has tighter variance across all runs. On CopilotKit, v5's std dev is 0.7s (20% of mean) vs v4's 4.1s (5% of mean, but absolute variation is much larger).
-
File scanning differences: v4 with --no-gitignore analyzes more files than v5 on svelte (11,672 vs 4,322) because v5's gitignore handling differs. This means v5 is even more efficient per-file analyzed than the raw speedup numbers suggest.
-
Detection accuracy: v5 finds more clones on large codebases (1,055 vs 903 on svelte, 22,487 vs 12,272 on CopilotKit), likely due to different token counting and the maxSize default behavior.