[{"data":1,"prerenderedAt":525},["ShallowReactive",2],{"navigation_docs":3,"-benchmarks-cross-format":129,"-benchmarks-cross-format-surround":520},[4,45,62,88,108],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30,35,40],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration","i-lucide-settings",{"title":26,"path":27,"stem":28,"icon":29},"Supported Formats","\u002Fgetting-started\u002Fsupported-formats","1.getting-started\u002F5.supported-formats","i-lucide-file-code",{"title":31,"path":32,"stem":33,"icon":34},"Agent Skill","\u002Fgetting-started\u002Fagent-skill","1.getting-started\u002F6.agent-skill","i-lucide-cpu",{"title":36,"path":37,"stem":38,"icon":39},"Changelog","\u002Fgetting-started\u002Fchangelog","1.getting-started\u002F7.changelog","i-lucide-scroll-text",{"title":41,"path":42,"stem":43,"icon":44},"Migrating from v4 to v5","\u002Fgetting-started\u002Fmigration","1.getting-started\u002F8.migration","i-lucide-arrow-right-left",{"title":46,"path":47,"stem":48,"children":49,"icon":6},"CI & Hooks","\u002Fci-and-hooks","2.ci-and-hooks\u002F1.index",[50,52,57],{"title":46,"path":47,"stem":48,"icon":51},"i-lucide-git-pull-request",{"title":53,"path":54,"stem":55,"icon":56},"Use jscpd in CI","\u002Fci-and-hooks\u002Fci","2.ci-and-hooks\u002F2.ci","i-lucide-github",{"title":58,"path":59,"stem":60,"icon":61},"Use jscpd in Pre-Commit Hook","\u002Fci-and-hooks\u002Fpre-commit","2.ci-and-hooks\u002F3.pre-commit","i-lucide-git-commit",{"title":63,"path":64,"stem":65,"children":66,"icon":68},"Reporters","\u002Freporters","3.reporters\u002F1.index",[67,69,73,78,83],{"title":63,"path":64,"stem":65,"icon":68},"i-lucide-file-chart-column",{"title":70,"path":71,"stem":72,"icon":29},"HTML Reporter","\u002Freporters\u002Fhtml","3.reporters\u002F2.html",{"title":74,"path":75,"stem":76,"icon":77},"JSON Reporter","\u002Freporters\u002Fjson","3.reporters\u002F3.json","i-lucide-braces",{"title":79,"path":80,"stem":81,"icon":82},"Badge Reporter","\u002Freporters\u002Fbadge","3.reporters\u002F4.badge","i-lucide-award",{"title":84,"path":85,"stem":86,"icon":87},"SARIF Reporter","\u002Freporters\u002Fsarif","3.reporters\u002F5.sarif","i-lucide-shield-check",{"title":89,"icon":6,"path":90,"stem":91,"children":92,"page":6},"Benchmarks","\u002Fbenchmarks","4.benchmarks",[93,98,103],{"title":94,"path":95,"stem":96,"icon":97},"Detection Speed","\u002Fbenchmarks\u002Fdetection-speed","4.benchmarks\u002F1.detection-speed","i-lucide-zap",{"title":99,"path":100,"stem":101,"icon":102},"Multi-Format Detection","\u002Fbenchmarks\u002Fcross-format","4.benchmarks\u002F2.cross-format","i-lucide-layers",{"title":104,"path":105,"stem":106,"icon":107},"AI Token Efficiency","\u002Fbenchmarks\u002Fai-token-efficiency","4.benchmarks\u002F3.ai-token-efficiency","i-lucide-sparkles",{"title":109,"path":110,"stem":111,"children":112,"icon":114},"API","\u002Fapi","5.api\u002F1.index",[113,115,120,125],{"title":109,"path":110,"stem":111,"icon":114},"i-lucide-code",{"title":116,"path":117,"stem":118,"icon":119},"Rust Crates (v5)","\u002Fapi\u002Fcore","5.api\u002F2.core","i-lucide-box",{"title":121,"path":122,"stem":123,"icon":124},"Server API","\u002Fapi\u002Fserver","5.api\u002F3.server","i-lucide-server",{"title":126,"path":127,"stem":128,"icon":119},"MCP Server","\u002Fapi\u002Fmcp-server","5.api\u002F4.mcp-server",{"id":130,"title":99,"body":131,"description":511,"extension":512,"links":513,"meta":514,"navigation":515,"path":100,"seo":516,"stem":101,"__hash__":519},"docs\u002F4.benchmarks\u002F2.cross-format.md",{"type":132,"value":133,"toc":502},"minimark",[134,163,168],[135,136,137,138,142,143,142,146,149,150,153,154,158,159,162],"p",{},"Component file formats (",[139,140,141],"code",{},".vue",", ",[139,144,145],{},".svelte",[139,147,148],{},".astro",") and rich documents (",[139,151,152],{},".md",") embed multiple languages in a single file — template, script, and style blocks in components; YAML frontmatter and fenced code blocks in markdown. A CPD tool's ability to parse these structures determines whether it can detect duplicates ",[155,156,157],"strong",{},"within"," each embedded language and ",[155,160,161],{},"across"," different file formats sharing the same code.",[164,165,167],"h2",{"id":166},"format-support-overview","Format Support Overview",[169,170,171,175,178,299,303,313,411,415,451,455,491],"benchmark-cross-format",{},[164,172,174],{"id":173},"cross-format-detection-svelte-astro","Cross-Format Detection (Svelte ↔ Astro)",[135,176,177],{},"The Svelte and Astro fixture components share ~60 lines of identical CSS and matching template structure. Only section-aware tools can attribute these matches to specific languages (CSS vs. markup vs. script).",[179,180,181,200],"table",{},[182,183,184],"thead",{},[185,186,187,191,194,197],"tr",{},[188,189,190],"th",{},"Tool",[188,192,193],{},"Cross-Format Clones",[188,195,196],{},"Lines",[188,198,199],{},"Detail",[201,202,203,218,232,246,260,274,287],"tbody",{},[185,204,205,209,212,215],{},[206,207,208],"td",{},"jscpd-rs",[206,210,211],{},"4",[206,213,214],{},"235",[206,216,217],{},"CSS (46 lines) + markup (7, 46, 136 lines)",[185,219,220,223,226,229],{},[206,221,222],{},"jscpd@4",[206,224,225],{},"3",[206,227,228],{},"189",[206,230,231],{},"CSS (46 lines) + markup (7, 136 lines) + JS (28 lines)",[185,233,234,237,240,243],{},[206,235,236],{},"jscpd@5",[206,238,239],{},"2",[206,241,242],{},"53",[206,244,245],{},"CSS (46 lines) + markup (7 lines)",[185,247,248,251,254,257],{},[206,249,250],{},"Duplo",[206,252,253],{},"8",[206,255,256],{},"92",[206,258,259],{},"Raw text matches, no language attribution",[185,261,262,265,268,271],{},[206,263,264],{},"Simian",[206,266,267],{},"1+",[206,269,270],{},"—",[206,272,273],{},"Aggregate text blocks, no language attribution",[185,275,276,279,282,284],{},[206,277,278],{},"PMD CPD",[206,280,281],{},"0",[206,283,281],{},[206,285,286],{},"Cannot detect cross-format duplicates",[185,288,289,292,294,296],{},[206,290,291],{},"Fallow",[206,293,281],{},[206,295,281],{},[206,297,298],{},"JS\u002FTS only",[164,300,302],{"id":301},"markdown-embedded-code-detection","Markdown Embedded-Code Detection",[135,304,305,308,309,312],{},[139,306,307],{},"file3.md"," and ",[139,310,311],{},"file4.md"," contain identical TypeScript and Python code blocks inside fenced code regions, plus matching YAML frontmatter. Section-aware tools detect these as separate language clones; flat-text tools match only the surrounding prose.",[179,314,315,329],{},[182,316,317],{},[185,318,319,321,324,327],{},[188,320,190],{},[188,322,323],{},"Detected Embedded Languages",[188,325,326],{},"Clones",[188,328,196],{},[201,330,331,344,355,367,380,391,401],{},[185,332,333,335,338,341],{},[206,334,236],{},[206,336,337],{},"TypeScript, Python, YAML, Markdown",[206,339,340],{},"7",[206,342,343],{},"356",[185,345,346,348,350,352],{},[206,347,222],{},[206,349,337],{},[206,351,340],{},[206,353,354],{},"343",[185,356,357,359,362,364],{},[206,358,208],{},[206,360,361],{},"TypeScript, Python, YAML, Markdown, Coffeescript",[206,363,253],{},[206,365,366],{},"350",[185,368,369,371,374,377],{},[206,370,250],{},[206,372,373],{},"(flat text only)",[206,375,376],{},"5",[206,378,379],{},"195",[185,381,382,384,386,388],{},[206,383,264],{},[206,385,373],{},[206,387,211],{},[206,389,390],{},"219",[185,392,393,395,397,399],{},[206,394,278],{},[206,396,270],{},[206,398,281],{},[206,400,281],{},[185,402,403,405,407,409],{},[206,404,291],{},[206,406,270],{},[206,408,281],{},[206,410,281],{},[164,412,414],{"id":413},"key-findings","Key Findings",[416,417,418,435,441,446],"ul",{},[419,420,421,424,425,142,427,142,429,431,432,434],"li",{},[155,422,423],{},"All jscpd variants"," parse ",[139,426,141],{},[139,428,145],{},[139,430,148],{},", and ",[139,433,152],{}," into separate language sections, detecting cross-format clones with language attribution. jscpd@5 is the most conservative, finding 2 cross-format clones (53 lines); jscpd@4 finds 3 (189 lines); jscpd-rs finds 4 (235 lines).",[419,436,437,440],{},[155,438,439],{},"Simian and Duplo"," find text overlaps between file types but report them as undifferentiated matches — there is no way to tell whether the duplication is in CSS, JavaScript, or template markup.",[419,442,443,445],{},[155,444,278],{}," cannot detect cross-format duplicates at all. It processes each language independently and has no concept of component file structure.",[419,447,448,450],{},[155,449,291],{}," only analyzes JS\u002FTS, so it misses all CSS, template, and Markdown duplicates across formats.",[164,452,454],{"id":453},"methodology","Methodology",[416,456,457,467,473,479,485],{},[419,458,459,462,463,466],{},[155,460,461],{},"Target:"," ",[139,464,465],{},"fixtures\u002F"," directory — 547 files, 21,645 lines across 150+ language formats",[419,468,469,472],{},[155,470,471],{},"Within-format clones:"," Duplicates detected within the same file type (e.g., Svelte→Svelte)",[419,474,475,478],{},[155,476,477],{},"Cross-format clones:"," Duplicates detected across different file types (e.g., Svelte↔Astro)",[419,480,481,484],{},[155,482,483],{},"Embedded-code detection:"," Duplicates found inside embedded language blocks within multi-language files",[419,486,487,490],{},[155,488,489],{},"Hardware:"," Apple Silicon (Darwin arm64)",[135,492,493,494,501],{},"Full methodology details are in the ",[495,496,500],"a",{"href":497,"rel":498},"https:\u002F\u002Fgithub.com\u002Fkucherenko\u002Fjscpd\u002Fblob\u002Fmaster\u002Fbenchmark\u002FBENCHMARK.md",[499],"nofollow","jscpd repository",".",{"title":503,"searchDepth":504,"depth":504,"links":505},"",2,[506,507,508,509,510],{"id":166,"depth":504,"text":167},{"id":173,"depth":504,"text":174},{"id":301,"depth":504,"text":302},{"id":413,"depth":504,"text":414},{"id":453,"depth":504,"text":454},"How jscpd detects duplicates across Svelte, Astro, Vue, and Markdown formats — vs other tools.","md",null,{},{"icon":102},{"title":517,"description":518},"Multi-Format Detection Benchmarks — jscpd","jscpd is the only CPD tool that detects duplicates by embedded language across Svelte, Astro, Vue, and Markdown files.","qP_FaiJIXL10o2FgpSKnCmKEW-m_CZXbZw8JVlIqwlk",[521,523],{"title":94,"path":95,"stem":96,"description":522,"icon":97,"children":-1},"Benchmark comparison of jscpd@5 vs 6 other CPD tools — speed and detection accuracy.",{"title":104,"path":105,"stem":106,"description":524,"icon":107,"children":-1},"How jscpd's AI reporter saves tokens compared to other CPD tools — 8× reduction for LLM workflows.",1782123774311]