jscpd Performance Comparison: v4 (TypeScript) vs v5 (Rust)

June 13, 2026 · View on GitHub

Date: 2026-06-08
Runs per configuration: 10 (fixtures, svelte), 3 (CopilotKit)
Machine: macOS (Apple Silicon)

Versions

ToolVersionRuntime
jscpd v44.2.5Node.js
jscpd v5 (cpd)5.0.4Native binary (Rust)

Benchmark Targets

TargetFilesSizeDescription
fixtures5481.5 MBMulti-language test fixtures (126+ formats)
svelte8,96338 MBSvelte framework source code
CopilotKit17,092159 MBLarge real-world TypeScript/React project

Execution Time Results

fixtures (548 files, 1.5 MB)

Metricjscpd v4jscpd v5Speedup
Mean real time1.030s0.030s34.3x
Std dev0.042s0.000s
Min1.000s0.030s
Max1.130s0.030s
Mean user time1.174s0.085s
Mean sys time0.074s0.050s

svelte (8,963 files, 38 MB)

Metricjscpd v4jscpd v5Speedup
Mean real time15.803s0.428s36.9x
Std dev1.010s0.021s
Min14.740s0.390s
Max17.790s0.450s
Mean user time16.075s0.553s
Mean sys time0.738s1.110s

CopilotKit (17,092 files, 159 MB)

Metricjscpd v4jscpd v5Speedup
Mean real time82.890s3.440s24.1x
Std dev4.086s0.699s
Min79.560s2.900s
Max87.450s4.230s
Mean user time100.020s7.323s
Mean sys time18.263s3.100s

Detection Results Comparison

fixtures

Metricjscpd v4jscpd v5
Files analyzed364347
Clones found211212
Duplicated lines9,969 (47.08%)9,133 (37.12%)
Duplicated tokens73,416 (47.64%)56,491 (43.30%)

svelte

Metricjscpd v4jscpd v5
Files analyzed11,6724,322
Clones found9031,055
Duplicated lines18,246 (7.34%)21,821 (8.78%)

CopilotKit

Metricjscpd v4jscpd v5
Files analyzed13,94412,386
Clones found12,27222,487

Raw Timing Data

jscpd v4 — fixtures

RunReal (s)User (s)Sys (s)
11.131.170.10
21.001.150.07
31.011.160.07
41.011.170.07
51.001.160.07
61.011.170.07
71.011.170.07
81.021.190.07
91.031.200.07
101.081.200.08

jscpd v5 — fixtures

RunReal (s)User (s)Sys (s)
10.030.080.05
20.030.090.05
30.030.080.05
40.030.080.05
50.030.080.05
60.030.090.06
70.030.090.04
80.030.090.05
90.030.080.05
100.030.090.05

jscpd v4 — svelte

RunReal (s)User (s)Sys (s)
115.9816.060.70
215.0615.550.59
314.7415.350.56
417.3716.031.04
517.7917.541.38
615.8616.000.72
715.1115.670.63
815.2815.890.60
915.4715.990.59
1015.3716.670.57

jscpd v5 — svelte

RunReal (s)User (s)Sys (s)
10.390.550.96
20.430.551.23
30.400.550.95
40.410.541.18
50.450.561.11
60.450.561.20
70.440.561.19
80.440.551.17
90.430.560.97
100.440.551.14

jscpd v4 — CopilotKit

RunReal (s)User (s)Sys (s)
187.4599.7620.15
279.5697.0816.02
381.66103.2218.62

jscpd v5 — CopilotKit

RunReal (s)User (s)Sys (s)
12.907.413.13
24.237.163.18
33.197.402.99

Analysis

v5 is dramatically faster across all targets

After correcting the benchmark methodology, v5 is consistently 24–37x faster than v4:

Targetv4 (TypeScript)v5 (Rust)Speedup
fixtures (548 files, 1.5 MB)1.03s0.03s34.3x
svelte (9K files, 38 MB)15.80s0.43s36.9x
CopilotKit (17K files, 159 MB)82.89s3.44s24.1x

Key observations

  1. Startup overhead: v5's native binary has near-zero startup cost. v4's Node.js runtime adds ~1s even for tiny fixtures.

  2. Scaling: v5 scales well from small to large codebases. CopilotKit (159 MB) takes only 3.4s. v4 takes 83s on the same target.

  3. 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).

  4. 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).

  5. 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.

  6. 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.