[{"data":1,"prerenderedAt":1976},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-migration":92,"-getting-started-migration-surround":1971},[4,45,71],{"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":51},"Reporters","\u002Freporters","2.reporters\u002F1.index",[50,52,56,61,66],{"title":46,"path":47,"stem":48,"icon":51},"i-lucide-file-chart-column",{"title":53,"path":54,"stem":55,"icon":29},"HTML Reporter","\u002Freporters\u002Fhtml","2.reporters\u002F2.html",{"title":57,"path":58,"stem":59,"icon":60},"JSON Reporter","\u002Freporters\u002Fjson","2.reporters\u002F3.json","i-lucide-braces",{"title":62,"path":63,"stem":64,"icon":65},"Badge Reporter","\u002Freporters\u002Fbadge","2.reporters\u002F4.badge","i-lucide-award",{"title":67,"path":68,"stem":69,"icon":70},"SARIF Reporter","\u002Freporters\u002Fsarif","2.reporters\u002F5.sarif","i-lucide-shield-check",{"title":72,"path":73,"stem":74,"children":75,"icon":77},"API","\u002Fapi","3.api\u002F1.index",[76,78,83,88],{"title":72,"path":73,"stem":74,"icon":77},"i-lucide-code",{"title":79,"path":80,"stem":81,"icon":82},"Rust Crates (v5)","\u002Fapi\u002Fcore","3.api\u002F2.core","i-lucide-box",{"title":84,"path":85,"stem":86,"icon":87},"Server API","\u002Fapi\u002Fserver","3.api\u002F3.server","i-lucide-server",{"title":89,"path":90,"stem":91,"icon":82},"MCP Server","\u002Fapi\u002Fmcp-server","3.api\u002F4.mcp-server",{"id":93,"title":41,"body":94,"description":1963,"extension":1964,"links":1965,"meta":1966,"navigation":1967,"path":42,"seo":1968,"stem":43,"__hash__":1970},"docs\u002F1.getting-started\u002F8.migration.md",{"type":95,"value":96,"toc":1937},"minimark",[97,106,111,220,225,315,321,325,344,382,385,389,394,455,459,513,517,571,575,603,607,611,618,733,738,787,794,805,809,821,825,828,887,891,894,898,1165,1178,1185,1188,1307,1311,1314,1427,1430,1433,1437,1489,1492,1532,1563,1567,1628,1679,1683,1688,1823,1833,1837,1933],[98,99,100,101,105],"p",{},"jscpd v5 is a ",[102,103,104],"strong",{},"complete Rust rewrite"," that replaces the TypeScript engine with a native binary. This guide covers what changed, what's compatible, and how to run both versions side by side.",[107,108,110],"h2",{"id":109},"why-v5","Why v5?",[112,113,114,129],"table",{},[115,116,117],"thead",{},[118,119,120,123,126],"tr",{},[121,122],"th",{},[121,124,125],{},"v4 (TypeScript)",[121,127,128],{},"v5 (Rust)",[130,131,132,146,159,172,185,203],"tbody",{},[118,133,134,140,143],{},[135,136,137],"td",{},[102,138,139],{},"Speed",[135,141,142],{},"Baseline",[135,144,145],{},"24-37x faster",[118,147,148,153,156],{},[135,149,150],{},[102,151,152],{},"Runtime",[135,154,155],{},"Requires Node.js",[135,157,158],{},"Self-contained binary",[118,160,161,166,169],{},[135,162,163],{},[102,164,165],{},"Install size",[135,167,168],{},"~15 MB (node_modules)",[135,170,171],{},"~5 MB (single binary)",[118,173,174,179,182],{},[135,175,176],{},[102,177,178],{},"JS\u002FTS tokenizer",[135,180,181],{},"PrismJS",[135,183,184],{},"OXC parser",[118,186,187,192,200],{},[135,188,189],{},[102,190,191],{},"Git blame",[135,193,194,195,199],{},"Shells out to ",[196,197,198],"code",{},"git"," CLI",[135,201,202],{},"In-process via gitoxide",[118,204,205,210,213],{},[135,206,207],{},[102,208,209],{},"Parallel detection",[135,211,212],{},"No",[135,214,215,216,219],{},"Yes (",[196,217,218],{},"--workers",")",[221,222,224],"h3",{"id":223},"detection-speed","Detection Speed",[112,226,227,247],{},[115,228,229],{},[118,230,231,234,237,240,242,244],{},[121,232,233],{},"Target",[121,235,236],{},"Files",[121,238,239],{},"Size",[121,241,125],{},[121,243,128],{},[121,245,246],{},"Speedup",[130,248,249,271,293],{},[118,250,251,254,257,260,263,266],{},[135,252,253],{},"fixtures",[135,255,256],{},"548",[135,258,259],{},"1.5 MB",[135,261,262],{},"1.03s",[135,264,265],{},"0.03s",[135,267,268],{},[102,269,270],{},"34.3x",[118,272,273,276,279,282,285,288],{},[135,274,275],{},"Svelte",[135,277,278],{},"8,963",[135,280,281],{},"38 MB",[135,283,284],{},"15.80s",[135,286,287],{},"0.43s",[135,289,290],{},[102,291,292],{},"36.9x",[118,294,295,298,301,304,307,310],{},[135,296,297],{},"CopilotKit",[135,299,300],{},"17,092",[135,302,303],{},"159 MB",[135,305,306],{},"82.89s",[135,308,309],{},"3.44s",[135,311,312],{},[102,313,314],{},"24.1x",[98,316,317],{},[318,319,320],"em",{},"Benchmarked on macOS (Apple Silicon), 10 runs for fixtures\u002FSvelte, 3 for CopilotKit.",[221,322,324],{"id":323},"git-blame-speed","Git Blame Speed",[98,326,327,328,331,332,335,336,343],{},"The ",[196,329,330],{},"--blame"," flag enriches clones with git author data. v4 shells out to ",[196,333,334],{},"git blame"," per file; v5 uses ",[337,338,342],"a",{"href":339,"rel":340},"https:\u002F\u002Fgithub.com\u002FGitoxideLabs\u002Fgitoxide",[341],"nofollow","gitoxide"," for in-process blame.",[112,345,346,364],{},[115,347,348],{},[118,349,350,352,357,362],{},[121,351,233],{},[121,353,354,355],{},"v4 ",[196,356,330],{},[121,358,359,360],{},"v5 ",[196,361,330],{},[121,363,246],{},[130,365,366],{},[118,367,368,371,374,377],{},[135,369,370],{},"fixtures (548 files)",[135,372,373],{},"3.57s",[135,375,376],{},"0.13s",[135,378,379],{},[102,380,381],{},"27.5x",[98,383,384],{},"v4's blame mode is 3.5x slower than its own non-blame mode (3.57s vs 1.03s). v5's blame adds only ~0.10s (0.13s vs 0.03s).",[221,386,388],{"id":387},"detailed-timing","Detailed Timing",[390,391,393],"h4",{"id":392},"fixtures-548-files-15-mb","fixtures (548 files, 1.5 MB)",[112,395,396,409],{},[115,397,398],{},[118,399,400,403,406],{},[121,401,402],{},"Metric",[121,404,405],{},"v4",[121,407,408],{},"v5",[130,410,411,422,433,444],{},[118,412,413,416,419],{},[135,414,415],{},"Mean real time",[135,417,418],{},"1.030s",[135,420,421],{},"0.030s",[118,423,424,427,430],{},[135,425,426],{},"Std dev",[135,428,429],{},"0.042s",[135,431,432],{},"0.000s",[118,434,435,438,441],{},[135,436,437],{},"Mean user time",[135,439,440],{},"1.174s",[135,442,443],{},"0.085s",[118,445,446,449,452],{},[135,447,448],{},"Mean sys time",[135,450,451],{},"0.074s",[135,453,454],{},"0.050s",[390,456,458],{"id":457},"svelte-8963-files-38-mb","Svelte (8,963 files, 38 MB)",[112,460,461,471],{},[115,462,463],{},[118,464,465,467,469],{},[121,466,402],{},[121,468,405],{},[121,470,408],{},[130,472,473,483,493,503],{},[118,474,475,477,480],{},[135,476,415],{},[135,478,479],{},"15.803s",[135,481,482],{},"0.428s",[118,484,485,487,490],{},[135,486,426],{},[135,488,489],{},"1.010s",[135,491,492],{},"0.021s",[118,494,495,497,500],{},[135,496,437],{},[135,498,499],{},"16.075s",[135,501,502],{},"0.553s",[118,504,505,507,510],{},[135,506,448],{},[135,508,509],{},"0.738s",[135,511,512],{},"1.110s",[390,514,516],{"id":515},"copilotkit-17092-files-159-mb","CopilotKit (17,092 files, 159 MB)",[112,518,519,529],{},[115,520,521],{},[118,522,523,525,527],{},[121,524,402],{},[121,526,405],{},[121,528,408],{},[130,530,531,541,551,561],{},[118,532,533,535,538],{},[135,534,415],{},[135,536,537],{},"82.890s",[135,539,540],{},"3.440s",[118,542,543,545,548],{},[135,544,426],{},[135,546,547],{},"4.086s",[135,549,550],{},"0.699s",[118,552,553,555,558],{},[135,554,437],{},[135,556,557],{},"100.020s",[135,559,560],{},"7.323s",[118,562,563,565,568],{},[135,564,448],{},[135,566,567],{},"18.263s",[135,569,570],{},"3.100s",[221,572,574],{"id":573},"key-observations","Key Observations",[576,577,578,585,591,597],"ol",{},[579,580,581,584],"li",{},[102,582,583],{},"Startup overhead",": v5's native binary has near-zero startup cost. v4's Node.js runtime adds ~1s even for tiny fixtures.",[579,586,587,590],{},[102,588,589],{},"Scaling",": CopilotKit (159 MB) takes only 3.4s with v5 vs 83s with v4.",[579,592,593,596],{},[102,594,595],{},"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).",[579,598,599,602],{},[102,600,601],{},"Consistency",": v5 has tighter variance across all runs.",[107,604,606],{"id":605},"breaking-changes","Breaking Changes",[221,608,610],{"id":609},"nodejs-api-removed","Node.js API Removed",[98,612,613,614,617],{},"The v4 programmatic API is ",[102,615,616],{},"not available in v5",":",[619,620,625],"pre",{"className":621,"code":622,"language":623,"meta":624,"style":624},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F ❌ v4 only — not available in v5\nimport { jscpd } from 'jscpd';\nconst clones = await jscpd(['', '', '.\u002Fsrc', '-r', 'json']);\n","typescript","",[196,626,627,636,670],{"__ignoreMap":624},[628,629,632],"span",{"class":630,"line":631},"line",1,[628,633,635],{"class":634},"sHwdD","\u002F\u002F ❌ v4 only — not available in v5\n",[628,637,639,643,647,651,654,657,660,664,667],{"class":630,"line":638},2,[628,640,642],{"class":641},"s7zQu","import",[628,644,646],{"class":645},"sMK4o"," {",[628,648,650],{"class":649},"sTEyZ"," jscpd",[628,652,653],{"class":645}," }",[628,655,656],{"class":641}," from",[628,658,659],{"class":645}," '",[628,661,663],{"class":662},"sfazB","jscpd",[628,665,666],{"class":645},"'",[628,668,669],{"class":645},";\n",[628,671,673,677,680,683,686,689,692,695,698,701,703,705,708,710,712,714,717,719,721,723,726,728,731],{"class":630,"line":672},3,[628,674,676],{"class":675},"spNyl","const",[628,678,679],{"class":649}," clones ",[628,681,682],{"class":645},"=",[628,684,685],{"class":641}," await",[628,687,650],{"class":688},"s2Zo4",[628,690,691],{"class":649},"([",[628,693,694],{"class":645},"''",[628,696,697],{"class":645},",",[628,699,700],{"class":645}," ''",[628,702,697],{"class":645},[628,704,659],{"class":645},[628,706,707],{"class":662},".\u002Fsrc",[628,709,666],{"class":645},[628,711,697],{"class":645},[628,713,659],{"class":645},[628,715,716],{"class":662},"-r",[628,718,666],{"class":645},[628,720,697],{"class":645},[628,722,659],{"class":645},[628,724,725],{"class":662},"json",[628,727,666],{"class":645},[628,729,730],{"class":649},"])",[628,732,669],{"class":645},[98,734,735],{},[102,736,737],{},"Alternatives:",[739,740,741,750,762,777],"ul",{},[579,742,743,746,747,749],{},[102,744,745],{},"CLI",": Use ",[196,748,663],{}," as a subprocess and parse JSON output",[579,751,752,746,755,761],{},[102,753,754],{},"Rust crate",[337,756,758],{"href":757},"\u002Fapi\u002Frust-crates",[196,759,760],{},"cpd-finder"," in Rust applications",[579,763,764,767,768,771,772,776],{},[102,765,766],{},"v4 package",": Install ",[196,769,770],{},"jscpd@4"," for the Node.js API (see ",[337,773,775],{"href":774},"#coexistence","coexistence"," below)",[579,778,779,782,783,786],{},[102,780,781],{},"Server",": Use the ",[337,784,785],{"href":85},"jscpd-server"," REST API",[221,788,790,793],{"id":789},"store-leveldb-removed",[196,791,792],{},"--store leveldb"," Removed",[98,795,796,797,800,801,804],{},"The external store backend (LevelDB\u002FRedis) is not supported in v5 — the Rust engine is fast enough that caching isn't needed. The ",[196,798,799],{},"--store"," and ",[196,802,803],{},"--store-path"," flags are accepted for compatibility but do nothing.",[221,806,808],{"id":807},"reporter-name-change","Reporter Name Change",[739,810,811],{},[579,812,813,814,817,818],{},"v4's ",[196,815,816],{},"full"," reporter → v5's ",[196,819,820],{},"consoleFull",[221,822,824],{"id":823},"output-filenames","Output Filenames",[98,826,827],{},"Some reporter output filenames changed:",[112,829,830,841],{},[115,831,832],{},[118,833,834,837,839],{},[121,835,836],{},"Reporter",[121,838,405],{},[121,840,408],{},[130,842,843,858,873],{},[118,844,845,848,853],{},[135,846,847],{},"HTML",[135,849,850],{},[196,851,852],{},"html\u002Findex.html",[135,854,855],{},[196,856,857],{},"jscpd-report.html",[118,859,860,863,868],{},[135,861,862],{},"JSON",[135,864,865],{},[196,866,867],{},"jscpd-report.json",[135,869,870,872],{},[196,871,867],{}," (unchanged)",[118,874,875,878,883],{},[135,876,877],{},"XML",[135,879,880],{},[196,881,882],{},"jscpd-report.xml",[135,884,885,872],{},[196,886,882],{},[221,888,890],{"id":889},"token-counts","Token Counts",[98,892,893],{},"Token counts may differ by 1-2% from v4 due to the OXC tokenizer handling JS\u002FTS\u002FJSX\u002FTSX differently than PrismJS.",[221,895,897],{"id":896},"cli-flag-changes","CLI Flag Changes",[112,899,900,911],{},[115,901,902],{},[118,903,904,906,908],{},[121,905,405],{},[121,907,408],{},[121,909,910],{},"Notes",[130,912,913,930,949,964,976,995,1017,1029,1039,1054,1066,1081,1095,1109,1123,1137,1151],{},[118,914,915,920,923],{},[135,916,917],{},[196,918,919],{},"--noSymlinks",[135,921,922],{},"(removed)",[135,924,925,926,929],{},"Symlinks are not followed by default; use ",[196,927,928],{},"--follow-symlinks"," to follow",[118,931,932,937,939],{},[135,933,934],{},[196,935,936],{},"--gitignore",[135,938,922],{},[135,940,941,944,945,948],{},[196,942,943],{},".gitignore"," is respected by default; use ",[196,946,947],{},"--no-gitignore"," to disable",[118,950,951,956,958],{},[135,952,953],{},[196,954,955],{},"-g",[135,957,922],{},[135,959,960,961,963],{},"Use ",[196,962,947],{}," to invert",[118,965,966,971,973],{},[135,967,968],{},[196,969,970],{},"-n",[135,972,922],{},[135,974,975],{},"Symlinks are not followed by default",[118,977,978,987,989],{},[135,979,980,983,984],{},[196,981,982],{},"-d"," \u002F ",[196,985,986],{},"--debug",[135,988,922],{},[135,990,960,991,994],{},[196,992,993],{},"--verbose"," instead",[118,996,997,1001,1008],{},[135,998,999],{},[196,1000,993],{},[135,1002,1003,983,1006],{},[196,1004,1005],{},"-v",[196,1007,993],{},[135,1009,1010,1011,1013,1014,1016],{},"Short flag ",[196,1012,1005],{}," now shows version; use ",[196,1015,993],{}," for verbose output",[118,1018,1019,1023,1026],{},[135,1020,1021],{},[196,1022,792],{},[135,1024,1025],{},"accepted, ignored",[135,1027,1028],{},"No external store in v5",[118,1030,1031,1035,1037],{},[135,1032,1033],{},[196,1034,803],{},[135,1036,1025],{},[135,1038,1028],{},[118,1040,1041,1044,1051],{},[135,1042,1043],{},"—",[135,1045,1046,983,1049],{},[196,1047,1048],{},"-w",[196,1050,218],{},[135,1052,1053],{},"New: control parallel detection threads",[118,1055,1056,1058,1063],{},[135,1057,1043],{},[135,1059,1060],{},[196,1061,1062],{},"--no-colors",[135,1064,1065],{},"New: disable ANSI color output",[118,1067,1068,1073,1078],{},[135,1069,1070],{},[196,1071,1072],{},"--skipComments",[135,1074,1075],{},[196,1076,1077],{},"--skip-comments",[135,1079,1080],{},"Kebab-case (camelCase still works in config)",[118,1082,1083,1088,1093],{},[135,1084,1085],{},[196,1086,1087],{},"--skipLocal",[135,1089,1090],{},[196,1091,1092],{},"--skip-local",[135,1094,1080],{},[118,1096,1097,1102,1107],{},[135,1098,1099],{},[196,1100,1101],{},"--noTips",[135,1103,1104],{},[196,1105,1106],{},"--no-tips",[135,1108,1080],{},[118,1110,1111,1116,1121],{},[135,1112,1113],{},[196,1114,1115],{},"--ignoreCase",[135,1117,1118],{},[196,1119,1120],{},"--ignore-case",[135,1122,1080],{},[118,1124,1125,1130,1135],{},[135,1126,1127],{},[196,1128,1129],{},"--formatsExts",[135,1131,1132],{},[196,1133,1134],{},"--formats-exts",[135,1136,1080],{},[118,1138,1139,1144,1149],{},[135,1140,1141],{},[196,1142,1143],{},"--formatsNames",[135,1145,1146],{},[196,1147,1148],{},"--formats-names",[135,1150,1080],{},[118,1152,1153,1158,1163],{},[135,1154,1155],{},[196,1156,1157],{},"--exitCode",[135,1159,1160],{},[196,1161,1162],{},"--exit-code",[135,1164,1080],{},[1166,1167,1168],"blockquote",{},[98,1169,1170,1173,1174,1177],{},[102,1171,1172],{},"Note:"," CamelCase names still work in ",[196,1175,1176],{},".jscpd.json"," config files. The kebab-case change only affects CLI flags.",[221,1179,1181,1184],{"id":1180},"jscpd-packages",[196,1182,1183],{},"@jscpd\u002F*"," Packages",[98,1186,1187],{},"The v4 ecosystem packages are replaced by Rust crates:",[112,1189,1190,1200],{},[115,1191,1192],{},[118,1193,1194,1197],{},[121,1195,1196],{},"v4 Package",[121,1198,1199],{},"v5 Replacement",[130,1201,1202,1217,1230,1241,1253,1266,1277,1288,1298],{},[118,1203,1204,1208],{},[135,1205,1206],{},[196,1207,663],{},[135,1209,1210,1213,1214],{},[196,1211,1212],{},"jscpd@5"," (npm, installs native binary) or ",[196,1215,1216],{},"cargo install jscpd",[118,1218,1219,1224],{},[135,1220,1221],{},[196,1222,1223],{},"@jscpd\u002Fcore",[135,1225,1226,1229],{},[196,1227,1228],{},"cpd-core"," (Rust crate)",[118,1231,1232,1237],{},[135,1233,1234],{},[196,1235,1236],{},"@jscpd\u002Ffinder",[135,1238,1239,1229],{},[196,1240,760],{},[118,1242,1243,1248],{},[135,1244,1245],{},[196,1246,1247],{},"@jscpd\u002Ftokenizer",[135,1249,1250,1229],{},[196,1251,1252],{},"cpd-tokenizer",[118,1254,1255,1260],{},[135,1256,1257],{},[196,1258,1259],{},"@jscpd\u002Fhtml-reporter",[135,1261,1262,1263,1229],{},"Built into ",[196,1264,1265],{},"cpd-reporter",[118,1267,1268,1273],{},[135,1269,1270],{},[196,1271,1272],{},"@jscpd\u002Fbadge-reporter",[135,1274,1262,1275,1229],{},[196,1276,1265],{},[118,1278,1279,1284],{},[135,1280,1281],{},[196,1282,1283],{},"@jscpd\u002Fsarif-reporter",[135,1285,1262,1286,1229],{},[196,1287,1265],{},[118,1289,1290,1295],{},[135,1291,1292],{},[196,1293,1294],{},"@jscpd\u002Fleveldb-store",[135,1296,1297],{},"Removed (not needed)",[118,1299,1300,1304],{},[135,1301,1302],{},[196,1303,785],{},[135,1305,1306],{},"Still available (Node.js based, unchanged)",[107,1308,1310],{"id":1309},"compatible-features","Compatible Features",[98,1312,1313],{},"These work the same in both v4 and v5:",[739,1315,1316,1325,1336,1353,1359,1365,1402,1416],{},[579,1317,1318,1321,1322,1324],{},[102,1319,1320],{},"CLI interface",": Same command name (",[196,1323,663],{},"), same flags structure",[579,1326,1327,1332,1333,1335],{},[102,1328,1329,1331],{},[196,1330,1176],{}," config",": Fully compatible (uses ",[196,1334,663],{}," as the config key)",[579,1337,1338,1341,1342,1345,1346,1345,1349,1352],{},[102,1339,1340],{},"Detection modes",": ",[196,1343,1344],{},"strict",", ",[196,1347,1348],{},"mild",[196,1350,1351],{},"weak"," — identical behavior",[579,1354,1355,1358],{},[102,1356,1357],{},"Cross-format detection",": Vue SFC, Svelte, Astro, Markdown — same support",[579,1360,1361,1364],{},[102,1362,1363],{},"Shebang detection",": Same behavior",[579,1366,1367,1341,1369,1345,1372,1345,1374,1345,1377,1345,1380,1345,1383,1345,1386,1345,1389,1345,1392,1345,1395,1345,1398,1401],{},[102,1368,46],{},[196,1370,1371],{},"console",[196,1373,725],{},[196,1375,1376],{},"xml",[196,1378,1379],{},"csv",[196,1381,1382],{},"html",[196,1384,1385],{},"markdown",[196,1387,1388],{},"sarif",[196,1390,1391],{},"ai",[196,1393,1394],{},"badge",[196,1396,1397],{},"threshold",[196,1399,1400],{},"silent"," — all present in both versions",[579,1403,1404,1409,1410,983,1413,219],{},[102,1405,1406],{},[196,1407,1408],{},"--ignore-pattern",": Same inline ignore blocks (",[196,1411,1412],{},"jscpd:ignore-start",[196,1414,1415],{},"jscpd:ignore-end",[579,1417,1418,1341,1421,800,1424,1426],{},[102,1419,1420],{},"Exit codes",[196,1422,1423],{},"--threshold",[196,1425,1162],{}," work the same",[107,1428,1429],{"id":775},"Coexistence",[98,1431,1432],{},"You can run both v4 and v5 in the same project:",[221,1434,1436],{"id":1435},"install-v5-globally-v4-as-a-project-dependency","Install v5 globally, v4 as a project dependency",[619,1438,1442],{"className":1439,"code":1440,"language":1441,"meta":624,"style":624},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Global: v5 (Rust binary)\nnpm install -g jscpd\n\n# Project: v4 (Node.js API)\nnpm install --save-dev jscpd@4\n","bash",[196,1443,1444,1449,1464,1470,1476],{"__ignoreMap":624},[628,1445,1446],{"class":630,"line":631},[628,1447,1448],{"class":634},"# Global: v5 (Rust binary)\n",[628,1450,1451,1455,1458,1461],{"class":630,"line":638},[628,1452,1454],{"class":1453},"sBMFI","npm",[628,1456,1457],{"class":662}," install",[628,1459,1460],{"class":662}," -g",[628,1462,1463],{"class":662}," jscpd\n",[628,1465,1466],{"class":630,"line":672},[628,1467,1469],{"emptyLinePlaceholder":1468},true,"\n",[628,1471,1473],{"class":630,"line":1472},4,[628,1474,1475],{"class":634},"# Project: v4 (Node.js API)\n",[628,1477,1479,1481,1483,1486],{"class":630,"line":1478},5,[628,1480,1454],{"class":1453},[628,1482,1457],{"class":662},[628,1484,1485],{"class":662}," --save-dev",[628,1487,1488],{"class":662}," jscpd@4\n",[98,1490,1491],{},"Then use v5 from the CLI and v4 from Node.js scripts:",[619,1493,1495],{"className":1439,"code":1494,"language":1441,"meta":624,"style":624},"# CLI uses v5 (fast)\njscpd .\u002Fsrc --reporters json\n\n# Node.js script uses v4\nnode scripts\u002Fdetect.js\n",[196,1496,1497,1502,1515,1519,1524],{"__ignoreMap":624},[628,1498,1499],{"class":630,"line":631},[628,1500,1501],{"class":634},"# CLI uses v5 (fast)\n",[628,1503,1504,1506,1509,1512],{"class":630,"line":638},[628,1505,663],{"class":1453},[628,1507,1508],{"class":662}," .\u002Fsrc",[628,1510,1511],{"class":662}," --reporters",[628,1513,1514],{"class":662}," json\n",[628,1516,1517],{"class":630,"line":672},[628,1518,1469],{"emptyLinePlaceholder":1468},[628,1520,1521],{"class":630,"line":1472},[628,1522,1523],{"class":634},"# Node.js script uses v4\n",[628,1525,1526,1529],{"class":630,"line":1478},[628,1527,1528],{"class":1453},"node",[628,1530,1531],{"class":662}," scripts\u002Fdetect.js\n",[619,1533,1537],{"className":1534,"code":1535,"language":1536,"meta":624,"style":624},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F scripts\u002Fdetect.js — uses v4 Node.js API\nimport { jscpd } from 'jscpd';\n\nconst clones = await jscpd(['', '', '.\u002Fsrc', '-r', 'json']);\nconsole.log(clones);\n","javascript",[196,1538,1539,1544,1549,1553,1558],{"__ignoreMap":624},[628,1540,1541],{"class":630,"line":631},[628,1542,1543],{},"\u002F\u002F scripts\u002Fdetect.js — uses v4 Node.js API\n",[628,1545,1546],{"class":630,"line":638},[628,1547,1548],{},"import { jscpd } from 'jscpd';\n",[628,1550,1551],{"class":630,"line":672},[628,1552,1469],{"emptyLinePlaceholder":1468},[628,1554,1555],{"class":630,"line":1472},[628,1556,1557],{},"const clones = await jscpd(['', '', '.\u002Fsrc', '-r', 'json']);\n",[628,1559,1560],{"class":630,"line":1478},[628,1561,1562],{},"console.log(clones);\n",[221,1564,1566],{"id":1565},"cicd-pin-a-specific-version","CI\u002FCD: Pin a specific version",[619,1568,1572],{"className":1569,"code":1570,"language":1571,"meta":624,"style":624},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# GitHub Actions — v5\n- name: Install jscpd\n  run: npm install -g jscpd@5\n\n- name: Check duplications\n  run: jscpd --threshold 5 .\u002Fsrc\n","yaml",[196,1573,1574,1579,1593,1603,1607,1618],{"__ignoreMap":624},[628,1575,1576],{"class":630,"line":631},[628,1577,1578],{"class":634},"# GitHub Actions — v5\n",[628,1580,1581,1584,1588,1590],{"class":630,"line":638},[628,1582,1583],{"class":645},"-",[628,1585,1587],{"class":1586},"swJcz"," name",[628,1589,617],{"class":645},[628,1591,1592],{"class":662}," Install jscpd\n",[628,1594,1595,1598,1600],{"class":630,"line":672},[628,1596,1597],{"class":1586},"  run",[628,1599,617],{"class":645},[628,1601,1602],{"class":662}," npm install -g jscpd@5\n",[628,1604,1605],{"class":630,"line":1472},[628,1606,1469],{"emptyLinePlaceholder":1468},[628,1608,1609,1611,1613,1615],{"class":630,"line":1478},[628,1610,1583],{"class":645},[628,1612,1587],{"class":1586},[628,1614,617],{"class":645},[628,1616,1617],{"class":662}," Check duplications\n",[628,1619,1621,1623,1625],{"class":630,"line":1620},6,[628,1622,1597],{"class":1586},[628,1624,617],{"class":645},[628,1626,1627],{"class":662}," jscpd --threshold 5 .\u002Fsrc\n",[619,1629,1631],{"className":1569,"code":1630,"language":1571,"meta":624,"style":624},"# GitHub Actions — v4 (if you need the Node.js API)\n- name: Install jscpd\n  run: npm install -g jscpd@4\n\n- name: Check duplications\n  run: jscpd --threshold 5 .\u002Fsrc\n",[196,1632,1633,1638,1648,1657,1661,1671],{"__ignoreMap":624},[628,1634,1635],{"class":630,"line":631},[628,1636,1637],{"class":634},"# GitHub Actions — v4 (if you need the Node.js API)\n",[628,1639,1640,1642,1644,1646],{"class":630,"line":638},[628,1641,1583],{"class":645},[628,1643,1587],{"class":1586},[628,1645,617],{"class":645},[628,1647,1592],{"class":662},[628,1649,1650,1652,1654],{"class":630,"line":672},[628,1651,1597],{"class":1586},[628,1653,617],{"class":645},[628,1655,1656],{"class":662}," npm install -g jscpd@4\n",[628,1658,1659],{"class":630,"line":1472},[628,1660,1469],{"emptyLinePlaceholder":1468},[628,1662,1663,1665,1667,1669],{"class":630,"line":1478},[628,1664,1583],{"class":645},[628,1666,1587],{"class":1586},[628,1668,617],{"class":645},[628,1670,1617],{"class":662},[628,1672,1673,1675,1677],{"class":630,"line":1620},[628,1674,1597],{"class":1586},[628,1676,617],{"class":645},[628,1678,1627],{"class":662},[107,1680,1682],{"id":1681},"configuration-compatibility","Configuration Compatibility",[98,1684,1685,1687],{},[196,1686,1176],{}," files work with both v4 and v5 without changes:",[619,1689,1692],{"className":1690,"code":1691,"filename":1176,"language":725,"meta":624,"style":624},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"threshold\": 0,\n  \"reporters\": [\"html\", \"console\"],\n  \"ignore\": [\"**\u002Fnode_modules\u002F**\"],\n  \"absolute\": true,\n  \"minLines\": 5,\n  \"minTokens\": 50\n}\n",[196,1693,1694,1699,1718,1750,1772,1786,1802,1817],{"__ignoreMap":624},[628,1695,1696],{"class":630,"line":631},[628,1697,1698],{"class":645},"{\n",[628,1700,1701,1704,1706,1709,1711,1715],{"class":630,"line":638},[628,1702,1703],{"class":645},"  \"",[628,1705,1397],{"class":675},[628,1707,1708],{"class":645},"\"",[628,1710,617],{"class":645},[628,1712,1714],{"class":1713},"sbssI"," 0",[628,1716,1717],{"class":645},",\n",[628,1719,1720,1722,1725,1727,1729,1732,1734,1736,1738,1740,1743,1745,1747],{"class":630,"line":672},[628,1721,1703],{"class":645},[628,1723,1724],{"class":675},"reporters",[628,1726,1708],{"class":645},[628,1728,617],{"class":645},[628,1730,1731],{"class":645}," [",[628,1733,1708],{"class":645},[628,1735,1382],{"class":662},[628,1737,1708],{"class":645},[628,1739,697],{"class":645},[628,1741,1742],{"class":645}," \"",[628,1744,1371],{"class":662},[628,1746,1708],{"class":645},[628,1748,1749],{"class":645},"],\n",[628,1751,1752,1754,1757,1759,1761,1763,1765,1768,1770],{"class":630,"line":1472},[628,1753,1703],{"class":645},[628,1755,1756],{"class":675},"ignore",[628,1758,1708],{"class":645},[628,1760,617],{"class":645},[628,1762,1731],{"class":645},[628,1764,1708],{"class":645},[628,1766,1767],{"class":662},"**\u002Fnode_modules\u002F**",[628,1769,1708],{"class":645},[628,1771,1749],{"class":645},[628,1773,1774,1776,1779,1781,1783],{"class":630,"line":1478},[628,1775,1703],{"class":645},[628,1777,1778],{"class":675},"absolute",[628,1780,1708],{"class":645},[628,1782,617],{"class":645},[628,1784,1785],{"class":645}," true,\n",[628,1787,1788,1790,1793,1795,1797,1800],{"class":630,"line":1620},[628,1789,1703],{"class":645},[628,1791,1792],{"class":675},"minLines",[628,1794,1708],{"class":645},[628,1796,617],{"class":645},[628,1798,1799],{"class":1713}," 5",[628,1801,1717],{"class":645},[628,1803,1805,1807,1810,1812,1814],{"class":630,"line":1804},7,[628,1806,1703],{"class":645},[628,1808,1809],{"class":675},"minTokens",[628,1811,1708],{"class":645},[628,1813,617],{"class":645},[628,1815,1816],{"class":1713}," 50\n",[628,1818,1820],{"class":630,"line":1819},8,[628,1821,1822],{"class":645},"}\n",[98,1824,1825,1826,800,1829,1832],{},"v5 ignores ",[196,1827,1828],{},"store",[196,1830,1831],{},"storePath"," fields if present (they're not needed with the Rust engine). Everything else maps directly.",[107,1834,1836],{"id":1835},"migration-checklist","Migration Checklist",[739,1838,1841,1856,1869,1880,1891,1901,1909,1918,1924],{"className":1839},[1840],"contains-task-list",[579,1842,1845,1849,1850,1853,1854],{"className":1843},[1844],"task-list-item",[1846,1847],"input",{"disabled":1468,"type":1848},"checkbox"," Install v5: ",[196,1851,1852],{},"npm install -g jscpd@5"," or ",[196,1855,1216],{},[579,1857,1859,1861,1862,1865,1866],{"className":1858},[1844],[1846,1860],{"disabled":1468,"type":1848}," Replace ",[196,1863,1864],{},"--reporters full"," with ",[196,1867,1868],{},"--reporters consoleFull",[579,1870,1872,1874,1875,1877,1878],{"className":1871},[1844],[1846,1873],{"disabled":1468,"type":1848}," Update HTML report output path from ",[196,1876,852],{}," to ",[196,1879,857],{},[579,1881,1883,1885,1886,983,1888,1890],{"className":1882},[1844],[1846,1884],{"disabled":1468,"type":1848}," Remove ",[196,1887,792],{},[196,1889,803],{}," flags (accepted but ignored)",[579,1892,1894,1861,1896,1865,1898,1900],{"className":1893},[1844],[1846,1895],{"disabled":1468,"type":1848},[196,1897,919],{},[196,1899,928],{}," (inverted behavior)",[579,1902,1904,1861,1906,1908],{"className":1903},[1844],[1846,1905],{"disabled":1468,"type":1848},[196,1907,936],{}," with default behavior (now automatic)",[579,1910,1912,1861,1914,1865,1916],{"className":1911},[1844],[1846,1913],{"disabled":1468,"type":1848},[196,1915,986],{},[196,1917,993],{},[579,1919,1921,1923],{"className":1920},[1844],[1846,1922],{"disabled":1468,"type":1848}," Update Node.js API calls to use CLI, Rust crates, or jscpd-server",[579,1925,1927,1929,1930,1932],{"className":1926},[1844],[1846,1928],{"disabled":1468,"type":1848}," Pin ",[196,1931,770],{}," as a project dependency if you need the Node.js API",[1934,1935,1936],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":624,"searchDepth":638,"depth":638,"links":1938},[1939,1945,1956,1957,1961,1962],{"id":109,"depth":638,"text":110,"children":1940},[1941,1942,1943,1944],{"id":223,"depth":672,"text":224},{"id":323,"depth":672,"text":324},{"id":387,"depth":672,"text":388},{"id":573,"depth":672,"text":574},{"id":605,"depth":638,"text":606,"children":1946},[1947,1948,1950,1951,1952,1953,1954],{"id":609,"depth":672,"text":610},{"id":789,"depth":672,"text":1949},"--store leveldb Removed",{"id":807,"depth":672,"text":808},{"id":823,"depth":672,"text":824},{"id":889,"depth":672,"text":890},{"id":896,"depth":672,"text":897},{"id":1180,"depth":672,"text":1955},"@jscpd\u002F* Packages",{"id":1309,"depth":638,"text":1310},{"id":775,"depth":638,"text":1429,"children":1958},[1959,1960],{"id":1435,"depth":672,"text":1436},{"id":1565,"depth":672,"text":1566},{"id":1681,"depth":638,"text":1682},{"id":1835,"depth":638,"text":1836},"Guide for upgrading from jscpd v4 (TypeScript) to v5 (Rust).","md",null,{},{"icon":44},{"title":41,"description":1969},"Upgrade guide for jscpd v4 to v5 — breaking changes, compatibility, and coexistence.","JtitfVLj1eGjEzJjY_3NONmzrqfqpEErUOjilDZdjHw",[1972,1974],{"title":36,"path":37,"stem":38,"description":1973,"icon":39,"children":-1},"Release history and what's new in jscpd.",{"title":46,"path":47,"stem":48,"description":1975,"icon":51,"children":-1},"Output formats and reporters in jscpd.",1781262513826]