[{"data":1,"prerenderedAt":520},["ShallowReactive",2],{"navigation_docs":3,"-project-benchmarks-detection-speed":239,"-project-benchmarks-detection-speed-surround":515},[4,29,94,114,184],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Start",false,"\u002Fstart","1.start",[10,14,19,24],{"title":11,"path":7,"stem":12,"icon":13},"What jscpd finds","1.start\u002Findex","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fstart\u002Finstallation","1.start\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quickstart","\u002Fstart\u002Fquickstart","1.start\u002F3.quickstart","i-lucide-rocket",{"title":25,"path":26,"stem":27,"icon":28},"Configuration basics","\u002Fstart\u002Fconfiguration","1.start\u002F4.configuration","i-lucide-settings-2",{"title":30,"icon":6,"path":31,"stem":32,"children":33,"page":6},"Guides","\u002Fguides","2.guides",[34,39,44,49,54,59,64,69,74,79,84,89],{"title":35,"path":36,"stem":37,"icon":38},"Use jscpd in CI","\u002Fguides\u002Fci","2.guides\u002F01.ci","i-lucide-github",{"title":40,"path":41,"stem":42,"icon":43},"Pre-commit hooks","\u002Fguides\u002Fpre-commit","2.guides\u002F02.pre-commit","i-lucide-git-commit",{"title":45,"path":46,"stem":47,"icon":48},"Fail only on new duplication","\u002Fguides\u002Fbaseline","2.guides\u002F03.baseline","i-lucide-git-compare",{"title":50,"path":51,"stem":52,"icon":53},"Monorepos","\u002Fguides\u002Fmonorepos","2.guides\u002F04.monorepos","i-lucide-folder-tree",{"title":55,"path":56,"stem":57,"icon":58},"Cross-format detection","\u002Fguides\u002Fcross-format","2.guides\u002F05.cross-format","i-lucide-layers",{"title":60,"path":61,"stem":62,"icon":63},"Agents","\u002Fguides\u002Fagents","2.guides\u002F06.agents","i-lucide-cpu",{"title":65,"path":66,"stem":67,"icon":68},"Editors","\u002Fguides\u002Feditors","2.guides\u002F07.editors","i-lucide-code",{"title":70,"path":71,"stem":72,"icon":73},"Duplication over git history","\u002Fguides\u002Fhistory","2.guides\u002F08.history","i-lucide-chart-no-axes-combined",{"title":75,"path":76,"stem":77,"icon":78},"Dashboard and health score","\u002Fguides\u002Fdashboard","2.guides\u002F09.dashboard","i-lucide-layout-dashboard",{"title":80,"path":81,"stem":82,"icon":83},"Dead code","\u002Fguides\u002Fdead-code","2.guides\u002F10.dead-code","i-lucide-ghost",{"title":85,"path":86,"stem":87,"icon":88},"Comparing two codebases","\u002Fguides\u002Fcompare","2.guides\u002F11.compare","i-lucide-git-compare-arrows",{"title":90,"path":91,"stem":92,"icon":93},"Semantic clones","\u002Fguides\u002Fsemantic-clones","2.guides\u002F12.semantic-clones","i-lucide-brain-circuit",{"title":95,"icon":6,"path":96,"stem":97,"children":98,"page":6},"Concepts","\u002Fconcepts","3.concepts",[99,104,109],{"title":100,"path":101,"stem":102,"icon":103},"Types of code clones","\u002Fconcepts\u002Fclone-types","3.concepts\u002F1.clone-types","i-lucide-copy",{"title":105,"path":106,"stem":107,"icon":108},"How detection works","\u002Fconcepts\u002Fhow-detection-works","3.concepts\u002F2.how-detection-works","i-lucide-scan-search",{"title":110,"path":111,"stem":112,"icon":113},"The health score","\u002Fconcepts\u002Fhealth-score","3.concepts\u002F3.health-score","i-lucide-heart-pulse",{"title":115,"icon":6,"path":116,"stem":117,"children":118,"page":6},"Reference","\u002Freference","4.reference",[119,124,129,134,171,176,180],{"title":120,"path":121,"stem":122,"icon":123},"CLI options","\u002Freference\u002Fcli","4.reference\u002F1.cli","i-lucide-terminal",{"title":125,"path":126,"stem":127,"icon":128},"The config file","\u002Freference\u002Fconfig-file","4.reference\u002F2.config-file","i-lucide-settings",{"title":130,"path":131,"stem":132,"icon":133},"Exit codes","\u002Freference\u002Fexit-codes","4.reference\u002F3.exit-codes","i-lucide-log-out",{"title":135,"icon":6,"path":136,"stem":137,"children":138},"Reporters","\u002Freference\u002Freporters","4.reference\u002F4.reporters\u002Findex",[139,141,146,151,156,161,166],{"title":135,"path":136,"stem":137,"icon":140},"i-lucide-file-chart-column",{"title":142,"path":143,"stem":144,"icon":145},"HTML reporter","\u002Freference\u002Freporters\u002Fhtml","4.reference\u002F4.reporters\u002F2.html","i-lucide-file-code",{"title":147,"path":148,"stem":149,"icon":150},"JSON reporter","\u002Freference\u002Freporters\u002Fjson","4.reference\u002F4.reporters\u002F3.json","i-lucide-braces",{"title":152,"path":153,"stem":154,"icon":155},"Badge reporter","\u002Freference\u002Freporters\u002Fbadge","4.reference\u002F4.reporters\u002F4.badge","i-lucide-award",{"title":157,"path":158,"stem":159,"icon":160},"SARIF reporter","\u002Freference\u002Freporters\u002Fsarif","4.reference\u002F4.reporters\u002F5.sarif","i-lucide-shield-check",{"title":162,"path":163,"stem":164,"icon":165},"CodeClimate reporter","\u002Freference\u002Freporters\u002Fcodeclimate","4.reference\u002F4.reporters\u002F6.codeclimate","i-lucide-flag-triangle-right",{"title":167,"path":168,"stem":169,"icon":170},"OpenMetrics reporter","\u002Freference\u002Freporters\u002Fopenmetrics","4.reference\u002F4.reporters\u002F7.openmetrics","i-lucide-activity",{"title":172,"path":173,"stem":174,"icon":175},"Supported formats","\u002Freference\u002Fsupported-formats","4.reference\u002F5.supported-formats","i-lucide-languages",{"title":177,"path":178,"stem":179,"icon":38},"GitHub Action","\u002Freference\u002Fgithub-action","4.reference\u002F6.github-action",{"title":181,"path":182,"stem":183,"icon":68},"Rust crates","\u002Freference\u002Frust-crates","4.reference\u002F7.rust-crates",{"title":185,"icon":6,"path":186,"stem":187,"children":188,"page":6},"Project","\u002Fproject","5.project",[189,194,199,204,229,234],{"title":190,"path":191,"stem":192,"icon":193},"Changelog","\u002Fproject\u002Fchangelog","5.project\u002F1.changelog","i-lucide-scroll-text",{"title":195,"path":196,"stem":197,"icon":198},"Migrating from v4 to v5","\u002Fproject\u002Fmigration","5.project\u002F2.migration","i-lucide-arrow-right-left",{"title":200,"path":201,"stem":202,"icon":203},"jscpd v4 (TypeScript)","\u002Fproject\u002Fv4","5.project\u002F3.v4","i-simple-icons-typescript",{"title":205,"icon":6,"path":206,"stem":207,"children":208},"Benchmarks","\u002Fproject\u002Fbenchmarks","5.project\u002F4.benchmarks\u002Findex",[209,211,216,220,225],{"title":205,"path":206,"stem":207,"icon":210},"i-lucide-gauge",{"title":212,"path":213,"stem":214,"icon":215},"Detection Speed","\u002Fproject\u002Fbenchmarks\u002Fdetection-speed","5.project\u002F4.benchmarks\u002F2.detection-speed","i-lucide-zap",{"title":217,"path":218,"stem":219,"icon":58},"Multi-Format Detection","\u002Fproject\u002Fbenchmarks\u002Fcross-format","5.project\u002F4.benchmarks\u002F3.cross-format",{"title":221,"path":222,"stem":223,"icon":224},"AI Token Efficiency","\u002Fproject\u002Fbenchmarks\u002Fai-token-efficiency","5.project\u002F4.benchmarks\u002F4.ai-token-efficiency","i-lucide-sparkles",{"title":226,"path":227,"stem":228,"icon":93},"Embedding Models","\u002Fproject\u002Fbenchmarks\u002Fembedding-models","5.project\u002F4.benchmarks\u002F5.embedding-models",{"title":230,"path":231,"stem":232,"icon":233},"Research","\u002Fproject\u002Fresearch","5.project\u002F5.research","i-lucide-graduation-cap",{"title":235,"path":236,"stem":237,"icon":238},"Articles","\u002Fproject\u002Farticles","5.project\u002F6.articles","i-lucide-newspaper",{"id":240,"title":212,"body":241,"description":506,"extension":507,"links":508,"meta":509,"navigation":510,"path":213,"seo":511,"stem":214,"__hash__":514},"docs\u002F5.project\u002F4.benchmarks\u002F2.detection-speed.md",{"type":242,"value":243,"toc":499},"minimark",[244,248],[245,246,212],"h2",{"id":247},"detection-speed",[249,250,251,255,258,262,393,396,423,427,488],"benchmark-speed",{},[252,253,254],"p",{},"The chart uses a logarithmic scale: each major gridline represents a 10× increase in time. This makes the 428× range between jscpd@5 (84ms) and PMD CPD (35,980ms) visually comparable while preserving differences between the faster tools.",[252,256,257],{},"jscpd@5's Rust engine makes it the only tool completing in under 100ms. The next fastest tool, jscpd-rs, takes 32% longer.",[245,259,261],{"id":260},"detection-accuracy","Detection Accuracy",[263,264,265,287],"table",{},[266,267,268],"thead",{},[269,270,271,275,278,281,284],"tr",{},[272,273,274],"th",{},"Tool",[272,276,277],{},"Time",[272,279,280],{},"Files",[272,282,283],{},"Clones",[272,285,286],{},"Dup Lines",[288,289,290,308,325,342,359,376],"tbody",{},[269,291,292,296,299,302,305],{},[293,294,295],"td",{},"jscpd@5",[293,297,298],{},"84ms",[293,300,301],{},"347",[293,303,304],{},"212",[293,306,307],{},"9,133",[269,309,310,313,316,319,322],{},[293,311,312],{},"jscpd-rs",[293,314,315],{},"111ms",[293,317,318],{},"360",[293,320,321],{},"222",[293,323,324],{},"10,317",[269,326,327,330,333,336,339],{},[293,328,329],{},"Duplo",[293,331,332],{},"162ms",[293,334,335],{},"319",[293,337,338],{},"518",[293,340,341],{},"13,049",[269,343,344,347,350,353,356],{},[293,345,346],{},"Fallow dupes",[293,348,349],{},"164ms",[293,351,352],{},"34",[293,354,355],{},"10",[293,357,358],{},"3,137",[269,360,361,364,367,370,373],{},[293,362,363],{},"Simian",[293,365,366],{},"964ms",[293,368,369],{},"547",[293,371,372],{},"424",[293,374,375],{},"15,351",[269,377,378,381,384,387,390],{},[293,379,380],{},"PMD CPD",[293,382,383],{},"35.980s",[293,385,386],{},"71",[293,388,389],{},"56",[293,391,392],{},"2,267",[252,394,395],{},"Detection accuracy varies significantly:",[397,398,399,407,413,418],"ul",{},[400,401,402,406],"li",{},[403,404,405],"strong",{},"jscpd@5 and jscpd-rs"," report similar clone counts (212 vs 222); both are token-based and attribute every clone to a language.",[400,408,409,412],{},[403,410,411],{},"Duplo and Simian"," report the most duplicates but include significant false positives: both are purely text-based without tokenization.",[400,414,415,417],{},[403,416,380],{}," finds the fewest clones (56) despite running for 36 seconds: it supports 34 languages only and cannot process most fixture formats.",[400,419,420,422],{},[403,421,346],{}," only analyzes TypeScript\u002FJavaScript files (34 of 547), making it unsuitable for polyglot codebases.",[245,424,426],{"id":425},"methodology","Methodology",[397,428,429,440,446,456,462,468,474],{},[400,430,431,434,435,439],{},[403,432,433],{},"Target:"," ",[436,437,438],"code",{},"fixtures\u002F"," directory, 547 files, 21,645 lines across 150+ formats",[400,441,442,445],{},[403,443,444],{},"Threshold:"," Default detection threshold (~5 lines \u002F ~50 tokens) for all tools",[400,447,448,451,452,455],{},[403,449,450],{},"Timing:"," External wall-clock measurement (",[436,453,454],{},"date +%s%N","), reported in milliseconds",[400,457,458,461],{},[403,459,460],{},"PMD CPD:"," Run for all 34 supported languages; results summed",[400,463,464,467],{},[403,465,466],{},"Fallow:"," Run from inside the target directory (no path argument support)",[400,469,470,473],{},[403,471,472],{},"Hardware:"," Apple Silicon (Darwin arm64)",[400,475,476,479,480,483,484,487],{},[403,477,478],{},"Measured:"," June 2026, with jscpd@5 built from the repository's ",[436,481,482],{},"rust\u002F"," directory (",[436,485,486],{},"cargo build --release",")",[252,489,490,491,498],{},"Full methodology details and reproducible commands are in the ",[492,493,497],"a",{"href":494,"rel":495},"https:\u002F\u002Fgithub.com\u002Fkucherenko\u002Fjscpd\u002Fblob\u002Fmaster\u002Fbenchmark\u002FBENCHMARK.md",[496],"nofollow","jscpd repository",".",{"title":500,"searchDepth":501,"depth":501,"links":502},"",2,[503,504,505],{"id":247,"depth":501,"text":212},{"id":260,"depth":501,"text":261},{"id":425,"depth":501,"text":426},"Benchmark comparison of jscpd@5 against five other copy\u002Fpaste detectors, speed and detection accuracy.","md",null,{},{"icon":215},{"title":512,"description":513},"Detection Speed Benchmarks — jscpd","jscpd@5 completes in 84ms, 428× faster than PMD CPD. Full benchmark comparison of 6 CPD tools.","tr6gr5FGtiluDuPchZNkdTQAj-hq2yoXyukN7iBxbe4",[516,518],{"title":205,"path":206,"stem":207,"description":517,"icon":210,"children":-1},"How jscpd v5 compares to other copy\u002Fpaste detectors in speed, format coverage and token efficiency.",{"title":217,"path":218,"stem":219,"description":519,"icon":58,"children":-1},"How jscpd detects duplicates across Svelte, Astro, Vue, and Markdown formats — vs other tools.",1791302987776]