[{"data":1,"prerenderedAt":1513},["ShallowReactive",2],{"navigation":3,"docs-\u002Fmodule\u002Fmigration-v4":52,"docs-\u002Fmodule\u002Fmigration-v4-surround":1508},[4,22,43],{"title":5,"path":6,"stem":7,"children":8,"page":21},"Guide","\u002Fguide","1.guide",[9,13,17],{"title":10,"path":11,"stem":12},"Getting Started","\u002Fguide\u002Fgetting-started","1.guide\u002F0.getting-started",{"title":14,"path":15,"stem":16},"Features","\u002Fguide\u002Ffeatures","1.guide\u002F1.features",{"title":18,"path":19,"stem":20},"Composables","\u002Fguide\u002Fcomposables","1.guide\u002F2.composables",false,{"title":23,"path":24,"stem":25,"children":26,"page":21},"Module","\u002Fmodule","2.module",[27,31,35,39],{"title":28,"path":29,"stem":30},"Module Authors","\u002Fmodule\u002Fguide","2.module\u002F0.guide",{"title":32,"path":33,"stem":34},"Utility Kit","\u002Fmodule\u002Futils-kit","2.module\u002F1.utils-kit",{"title":36,"path":37,"stem":38},"UI Kit","\u002Fmodule\u002Fui-kit","2.module\u002F2.ui-kit",{"title":40,"path":41,"stem":42},"Migration to v4","\u002Fmodule\u002Fmigration-v4","2.module\u002F3.migration-v4",{"title":44,"path":45,"stem":46,"children":47,"page":21},"Development","\u002Fdevelopment","3.development",[48],{"title":49,"path":50,"stem":51},"Contribution Guide","\u002Fdevelopment\u002Fcontributing","3.development\u002F0.contributing",{"id":53,"title":40,"body":54,"description":1503,"extension":1504,"meta":1505,"navigation":333,"path":41,"seo":1506,"stem":42,"__hash__":1507},"docs\u002F2.module\u002F3.migration-v4.md",{"type":55,"value":56,"toc":1471},"minimark",[57,66,78,89,101,218,237,291,297,314,389,419,638,645,657,696,730,737,751,836,842,849,877,922,929,942,1034,1047,1054,1072,1174,1178,1181,1213,1224,1237,1288,1295,1308,1323,1338,1342,1355,1389,1396,1408,1428,1434,1440,1446,1456,1467],[58,59,61,65],"h2",{"id":60},"startsubprocess-api-changes",[62,63,64],"code",{},"startSubprocess()"," API Changes",[67,68,69,70,73,74,77],"p",{},"The subprocess system has been migrated from ",[62,71,72],{},"execa"," to ",[62,75,76],{},"tinyexec",".",[79,80,82,85,86],"h3",{"id":81},"subprocessoptions-no-longer-extends-execaoptions",[62,83,84],{},"SubprocessOptions"," no longer extends ",[62,87,88],{},"ExecaOptions",[67,90,91,92,94,95,97,98,100],{},"Previously, ",[62,93,84],{}," extended ",[62,96,88],{}," from ",[62,99,72],{},", allowing you to pass any execa option directly. It now has its own interface:",[102,103,108],"pre",{"className":104,"code":105,"language":106,"meta":107,"style":107},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","interface SubprocessOptions {\n  command: string\n  args?: string[]\n  cwd?: string\n  env?: Record\u003Cstring, string | undefined>\n  nodeOptions?: SpawnOptions \u002F\u002F from 'node:child_process'\n}\n","ts","",[62,109,110,127,140,156,166,197,212],{"__ignoreMap":107},[111,112,115,119,123],"span",{"class":113,"line":114},"line",1,[111,116,118],{"class":117},"spNyl","interface",[111,120,122],{"class":121},"sBMFI"," SubprocessOptions",[111,124,126],{"class":125},"sMK4o"," {\n",[111,128,130,134,137],{"class":113,"line":129},2,[111,131,133],{"class":132},"swJcz","  command",[111,135,136],{"class":125},":",[111,138,139],{"class":121}," string\n",[111,141,143,146,149,152],{"class":113,"line":142},3,[111,144,145],{"class":132},"  args",[111,147,148],{"class":125},"?:",[111,150,151],{"class":121}," string",[111,153,155],{"class":154},"sTEyZ","[]\n",[111,157,159,162,164],{"class":113,"line":158},4,[111,160,161],{"class":132},"  cwd",[111,163,148],{"class":125},[111,165,139],{"class":121},[111,167,169,172,174,177,180,183,186,188,191,194],{"class":113,"line":168},5,[111,170,171],{"class":132},"  env",[111,173,148],{"class":125},[111,175,176],{"class":121}," Record",[111,178,179],{"class":125},"\u003C",[111,181,182],{"class":121},"string",[111,184,185],{"class":125},",",[111,187,151],{"class":121},[111,189,190],{"class":125}," |",[111,192,193],{"class":121}," undefined",[111,195,196],{"class":125},">\n",[111,198,200,203,205,208],{"class":113,"line":199},6,[111,201,202],{"class":132},"  nodeOptions",[111,204,148],{"class":125},[111,206,207],{"class":121}," SpawnOptions",[111,209,211],{"class":210},"sHwdD"," \u002F\u002F from 'node:child_process'\n",[111,213,215],{"class":113,"line":214},7,[111,216,217],{"class":125},"}\n",[67,219,220,221,224,225,228,229,232,233,236],{},"Common fields like ",[62,222,223],{},"cwd"," and ",[62,226,227],{},"env"," are still available as top-level options. Other execa-specific options should be migrated to ",[62,230,231],{},"nodeOptions"," (Node.js ",[62,234,235],{},"SpawnOptions","):",[102,238,242],{"className":239,"code":240,"language":241,"meta":107,"style":107},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","startSubprocess({\n  command: 'my-command',\n  args: ['--flag'],\n  cwd: '\u002Fsome\u002Fpath',\n- stdio: 'pipe',\n+ nodeOptions: {\n+   stdio: 'pipe',\n+ },\n})\n","diff",[62,243,244,249,254,259,264,269,274,279,285],{"__ignoreMap":107},[111,245,246],{"class":113,"line":114},[111,247,248],{},"startSubprocess({\n",[111,250,251],{"class":113,"line":129},[111,252,253],{},"  command: 'my-command',\n",[111,255,256],{"class":113,"line":142},[111,257,258],{},"  args: ['--flag'],\n",[111,260,261],{"class":113,"line":158},[111,262,263],{},"  cwd: '\u002Fsome\u002Fpath',\n",[111,265,266],{"class":113,"line":168},[111,267,268],{},"- stdio: 'pipe',\n",[111,270,271],{"class":113,"line":199},[111,272,273],{},"+ nodeOptions: {\n",[111,275,276],{"class":113,"line":214},[111,277,278],{},"+   stdio: 'pipe',\n",[111,280,282],{"class":113,"line":281},8,[111,283,284],{},"+ },\n",[111,286,288],{"class":113,"line":287},9,[111,289,290],{},"})\n",[79,292,294,296],{"id":293},"startsubprocess-is-deprecated-ndt_dep_0004",[62,295,64],{}," is deprecated {#ndt_dep_0004}",[67,298,299,301,302,309,310,313],{},[62,300,64],{}," is soft-deprecated in favour of the Vite DevTools terminals\nhost, used from the ",[303,304,306],"a",{"href":305},"\u002Fmodule\u002Futils-kit#ondevtoolsready",[62,307,308],{},"onDevtoolsReady"," hook.\nIt still works as a shim, but emits the ",[62,311,312],{},"NDT_DEP_0004"," deprecation diagnostic.",[102,315,317],{"className":239,"code":316,"language":241,"meta":107,"style":107},"- import { startSubprocess } from '@nuxt\u002Fdevtools-kit'\n+ import { onDevtoolsReady } from '@nuxt\u002Fdevtools-kit'\n\n- const subprocess = startSubprocess(\n-   { command: 'vite', args: ['build', '--watch'] },\n-   { id: 'my-module:build', name: 'Build', icon: 'ph:terminal-duotone' },\n- )\n+ onDevtoolsReady(async (ctx) => {\n+   const session = await ctx.terminals.startChildProcess(\n+     { command: 'vite', args: ['build', '--watch'], cwd: process.cwd() },\n+     { id: 'my-module:build', title: 'Build', icon: 'ph:terminal-duotone' },\n+   )\n+ })\n",[62,318,319,324,329,335,340,345,350,355,360,365,371,377,383],{"__ignoreMap":107},[111,320,321],{"class":113,"line":114},[111,322,323],{},"- import { startSubprocess } from '@nuxt\u002Fdevtools-kit'\n",[111,325,326],{"class":113,"line":129},[111,327,328],{},"+ import { onDevtoolsReady } from '@nuxt\u002Fdevtools-kit'\n",[111,330,331],{"class":113,"line":142},[111,332,334],{"emptyLinePlaceholder":333},true,"\n",[111,336,337],{"class":113,"line":158},[111,338,339],{},"- const subprocess = startSubprocess(\n",[111,341,342],{"class":113,"line":168},[111,343,344],{},"-   { command: 'vite', args: ['build', '--watch'] },\n",[111,346,347],{"class":113,"line":199},[111,348,349],{},"-   { id: 'my-module:build', name: 'Build', icon: 'ph:terminal-duotone' },\n",[111,351,352],{"class":113,"line":214},[111,353,354],{},"- )\n",[111,356,357],{"class":113,"line":281},[111,358,359],{},"+ onDevtoolsReady(async (ctx) => {\n",[111,361,362],{"class":113,"line":287},[111,363,364],{},"+   const session = await ctx.terminals.startChildProcess(\n",[111,366,368],{"class":113,"line":367},10,[111,369,370],{},"+     { command: 'vite', args: ['build', '--watch'], cwd: process.cwd() },\n",[111,372,374],{"class":113,"line":373},11,[111,375,376],{},"+     { id: 'my-module:build', title: 'Build', icon: 'ph:terminal-duotone' },\n",[111,378,380],{"class":113,"line":379},12,[111,381,382],{},"+   )\n",[111,384,386],{"class":113,"line":385},13,[111,387,388],{},"+ })\n",[67,390,391,392,395,396,399,400,403,404,407,408,410,411,414,415,418],{},"The terminals host session exposes ",[62,393,394],{},"terminate()",", ",[62,397,398],{},"restart()",",\n",[62,401,402],{},"getChildProcess()",", and ",[62,405,406],{},"getResult()"," — a ",[62,409,76],{},"-style awaitable handle that\nresolves to ",[62,412,413],{},"{ stdout, stderr, exitCode }"," — so the ",[62,416,417],{},"startSubprocess().getResult()","\nergonomics carry over:",[102,420,422],{"className":104,"code":421,"language":106,"meta":107,"style":107},"onDevtoolsReady(async (ctx) => {\n  const session = await ctx.terminals.startChildProcess(\n    { command: 'npm', args: ['install'] },\n    { id: 'my-module:install', title: 'Install' },\n  )\n  const { exitCode, stderr } = await session.getResult()\n  if (exitCode !== 0)\n    console.error(stderr)\n})\n",[62,423,424,450,481,524,557,562,594,614,631],{"__ignoreMap":107},[111,425,426,429,432,435,438,442,445,448],{"class":113,"line":114},[111,427,308],{"class":428},"s2Zo4",[111,430,431],{"class":154},"(",[111,433,434],{"class":117},"async",[111,436,437],{"class":125}," (",[111,439,441],{"class":440},"sHdIc","ctx",[111,443,444],{"class":125},")",[111,446,447],{"class":117}," =>",[111,449,126],{"class":125},[111,451,452,455,458,461,465,468,470,473,475,478],{"class":113,"line":129},[111,453,454],{"class":117},"  const",[111,456,457],{"class":154}," session",[111,459,460],{"class":125}," =",[111,462,464],{"class":463},"s7zQu"," await",[111,466,467],{"class":154}," ctx",[111,469,77],{"class":125},[111,471,472],{"class":154},"terminals",[111,474,77],{"class":125},[111,476,477],{"class":428},"startChildProcess",[111,479,480],{"class":132},"(\n",[111,482,483,486,489,491,494,498,501,503,506,508,511,513,516,518,521],{"class":113,"line":142},[111,484,485],{"class":125},"    {",[111,487,488],{"class":132}," command",[111,490,136],{"class":125},[111,492,493],{"class":125}," '",[111,495,497],{"class":496},"sfazB","npm",[111,499,500],{"class":125},"'",[111,502,185],{"class":125},[111,504,505],{"class":132}," args",[111,507,136],{"class":125},[111,509,510],{"class":132}," [",[111,512,500],{"class":125},[111,514,515],{"class":496},"install",[111,517,500],{"class":125},[111,519,520],{"class":132},"] ",[111,522,523],{"class":125},"},\n",[111,525,526,528,531,533,535,538,540,542,545,547,549,552,554],{"class":113,"line":158},[111,527,485],{"class":125},[111,529,530],{"class":132}," id",[111,532,136],{"class":125},[111,534,493],{"class":125},[111,536,537],{"class":496},"my-module:install",[111,539,500],{"class":125},[111,541,185],{"class":125},[111,543,544],{"class":132}," title",[111,546,136],{"class":125},[111,548,493],{"class":125},[111,550,551],{"class":496},"Install",[111,553,500],{"class":125},[111,555,556],{"class":125}," },\n",[111,558,559],{"class":113,"line":168},[111,560,561],{"class":132},"  )\n",[111,563,564,566,569,572,574,577,580,582,584,586,588,591],{"class":113,"line":199},[111,565,454],{"class":117},[111,567,568],{"class":125}," {",[111,570,571],{"class":154}," exitCode",[111,573,185],{"class":125},[111,575,576],{"class":154}," stderr",[111,578,579],{"class":125}," }",[111,581,460],{"class":125},[111,583,464],{"class":463},[111,585,457],{"class":154},[111,587,77],{"class":125},[111,589,590],{"class":428},"getResult",[111,592,593],{"class":132},"()\n",[111,595,596,599,601,604,607,611],{"class":113,"line":214},[111,597,598],{"class":463},"  if",[111,600,437],{"class":132},[111,602,603],{"class":154},"exitCode",[111,605,606],{"class":125}," !==",[111,608,610],{"class":609},"sbssI"," 0",[111,612,613],{"class":132},")\n",[111,615,616,619,621,624,626,629],{"class":113,"line":281},[111,617,618],{"class":154},"    console",[111,620,77],{"class":125},[111,622,623],{"class":428},"error",[111,625,431],{"class":132},[111,627,628],{"class":154},"stderr",[111,630,613],{"class":132},[111,632,633,636],{"class":113,"line":287},[111,634,635],{"class":125},"}",[111,637,613],{"class":154},[79,639,641,644],{"id":640},"getprocess-is-deprecated-ndt_dep_0001",[62,642,643],{},"getProcess()"," is deprecated {#ndt_dep_0001}",[67,646,647,648,650,651,653,654,656],{},"The return value of ",[62,649,64],{}," now also provides ",[62,652,406],{},"; use it instead of the deprecated ",[62,655,643],{}," method.",[658,659,660,677],"ul",{},[661,662,663,665,666,669,670,673,674,444],"li",{},[62,664,643],{}," still works but emits the ",[62,667,668],{},"NDT_DEP_0001"," deprecation diagnostic and returns ",[62,671,672],{},"ChildProcess | undefined"," (was ",[62,675,676],{},"ExecaChildProcess\u003Cstring>",[661,678,679,681,682,685,686,395,689,395,692,695],{},[62,680,406],{}," returns a tinyexec ",[62,683,684],{},"Result"," object with ",[62,687,688],{},".kill()",[62,690,691],{},".process",[62,693,694],{},".pipe()",", and more",[102,697,699],{"className":239,"code":698,"language":241,"meta":107,"style":107},"const subprocess = startSubprocess(\u002F* ... *\u002F)\n\n- const proc = subprocess.getProcess()\n- proc.stdout.on('data', handler)\n+ const result = subprocess.getResult()\n+ result.process?.stdout?.on('data', handler)\n",[62,700,701,706,710,715,720,725],{"__ignoreMap":107},[111,702,703],{"class":113,"line":114},[111,704,705],{},"const subprocess = startSubprocess(\u002F* ... *\u002F)\n",[111,707,708],{"class":113,"line":129},[111,709,334],{"emptyLinePlaceholder":333},[111,711,712],{"class":113,"line":142},[111,713,714],{},"- const proc = subprocess.getProcess()\n",[111,716,717],{"class":113,"line":158},[111,718,719],{},"- proc.stdout.on('data', handler)\n",[111,721,722],{"class":113,"line":168},[111,723,724],{},"+ const result = subprocess.getResult()\n",[111,726,727],{"class":113,"line":199},[111,728,729],{},"+ result.process?.stdout?.on('data', handler)\n",[58,731,733,736],{"id":732},"extendserverrpc-is-deprecated-ndt_dep_0003",[62,734,735],{},"extendServerRpc()"," is deprecated {#ndt_dep_0003}",[67,738,739,741,742,746,747,750],{},[62,740,735],{}," is soft-deprecated in favour of the Vite DevTools RPC\nregistration, done from the ",[303,743,744],{"href":305},[62,745,308],{},"\nhook. It still works as a shim, but emits the ",[62,748,749],{},"NDT_DEP_0003"," deprecation\ndiagnostic.",[102,752,754],{"className":239,"code":753,"language":241,"meta":107,"style":107},"- import { extendServerRpc } from '@nuxt\u002Fdevtools-kit'\n+ import { onDevtoolsReady } from '@nuxt\u002Fdevtools-kit'\n+ import { defineRpcFunction } from '@vitejs\u002Fdevtools-kit'\n\n- const rpc = extendServerRpc('my-module', {\n-   async getData() {\n-     return 'hello'\n-   },\n- })\n+ onDevtoolsReady((ctx) => {\n+   ctx.rpc.register(defineRpcFunction({\n+     name: 'my-module:get-data',\n+     type: 'query',\n+     setup: () => ({ handler: async () => 'hello' }),\n+   }))\n+ })\n",[62,755,756,761,765,770,774,779,784,789,794,799,804,809,814,819,825,831],{"__ignoreMap":107},[111,757,758],{"class":113,"line":114},[111,759,760],{},"- import { extendServerRpc } from '@nuxt\u002Fdevtools-kit'\n",[111,762,763],{"class":113,"line":129},[111,764,328],{},[111,766,767],{"class":113,"line":142},[111,768,769],{},"+ import { defineRpcFunction } from '@vitejs\u002Fdevtools-kit'\n",[111,771,772],{"class":113,"line":158},[111,773,334],{"emptyLinePlaceholder":333},[111,775,776],{"class":113,"line":168},[111,777,778],{},"- const rpc = extendServerRpc('my-module', {\n",[111,780,781],{"class":113,"line":199},[111,782,783],{},"-   async getData() {\n",[111,785,786],{"class":113,"line":214},[111,787,788],{},"-     return 'hello'\n",[111,790,791],{"class":113,"line":281},[111,792,793],{},"-   },\n",[111,795,796],{"class":113,"line":287},[111,797,798],{},"- })\n",[111,800,801],{"class":113,"line":367},[111,802,803],{},"+ onDevtoolsReady((ctx) => {\n",[111,805,806],{"class":113,"line":373},[111,807,808],{},"+   ctx.rpc.register(defineRpcFunction({\n",[111,810,811],{"class":113,"line":379},[111,812,813],{},"+     name: 'my-module:get-data',\n",[111,815,816],{"class":113,"line":385},[111,817,818],{},"+     type: 'query',\n",[111,820,822],{"class":113,"line":821},14,[111,823,824],{},"+     setup: () => ({ handler: async () => 'hello' }),\n",[111,826,828],{"class":113,"line":827},15,[111,829,830],{},"+   }))\n",[111,832,834],{"class":113,"line":833},16,[111,835,388],{},[67,837,838,839,77],{},"To broadcast to clients from the same context, use ",[62,840,841],{},"ctx.rpc.broadcast({ method, args, event })",[58,843,845,848],{"id":844},"nuxtdevtoolsrpc-direct-access-is-deprecated-ndt_dep_0007",[62,846,847],{},"nuxt.devtools.rpc"," direct access is deprecated {#ndt_dep_0007}",[67,850,851,852,855,856,859,860,863,864,867,868,871,872,876],{},"Directly accessing ",[62,853,854],{},"nuxt.devtools.rpc.broadcast"," or ",[62,857,858],{},"nuxt.devtools.rpc.functions","\nis deprecated (",[62,861,862],{},"NDT_DEP_0007","). They still work as a shim, but you should use the\nconnected ",[62,865,866],{},"ctx.rpc"," (the devframe ",[62,869,870],{},"RpcFunctionsHost",") from the\n",[303,873,874],{"href":305},[62,875,308],{}," hook instead:",[102,878,880],{"className":239,"code":879,"language":241,"meta":107,"style":107},"- nuxt.devtools.rpc.broadcast.myEvent.asEvent(payload)\n+ onDevtoolsReady((ctx) => {\n+   ctx.rpc.broadcast({ method: 'myEvent', args: [payload], event: true })\n+ })\n\n- nuxt.devtools.rpc.functions.myFn = handler\n+ onDevtoolsReady((ctx) => {\n+   ctx.rpc.register({ name: 'myFn', handler })\n+ })\n",[62,881,882,887,891,896,900,904,909,913,918],{"__ignoreMap":107},[111,883,884],{"class":113,"line":114},[111,885,886],{},"- nuxt.devtools.rpc.broadcast.myEvent.asEvent(payload)\n",[111,888,889],{"class":113,"line":129},[111,890,803],{},[111,892,893],{"class":113,"line":142},[111,894,895],{},"+   ctx.rpc.broadcast({ method: 'myEvent', args: [payload], event: true })\n",[111,897,898],{"class":113,"line":158},[111,899,388],{},[111,901,902],{"class":113,"line":168},[111,903,334],{"emptyLinePlaceholder":333},[111,905,906],{"class":113,"line":199},[111,907,908],{},"- nuxt.devtools.rpc.functions.myFn = handler\n",[111,910,911],{"class":113,"line":214},[111,912,803],{},[111,914,915],{"class":113,"line":281},[111,916,917],{},"+   ctx.rpc.register({ name: 'myFn', handler })\n",[111,919,920],{"class":113,"line":287},[111,921,388],{},[58,923,925,928],{"id":924},"addcustomtab-is-deprecated-ndt_dep_0005",[62,926,927],{},"addCustomTab()"," is deprecated {#ndt_dep_0005}",[67,930,931,933,934,938,939,313],{},[62,932,927],{}," is soft-deprecated in favour of registering a dock entry on the\nVite DevTools docks host, from the\n",[303,935,936],{"href":305},[62,937,308],{}," hook. It still works as a\nshim, but emits the ",[62,940,941],{},"NDT_DEP_0005",[102,943,945],{"className":239,"code":944,"language":241,"meta":107,"style":107},"- import { addCustomTab } from '@nuxt\u002Fdevtools-kit'\n+ import { onDevtoolsReady } from '@nuxt\u002Fdevtools-kit'\n\n- addCustomTab({\n-   name: 'my-module',\n-   title: 'My Module',\n-   icon: 'carbon:apps',\n-   view: { type: 'iframe', src: '\u002Furl-to-your-module-view' },\n- })\n+ onDevtoolsReady((ctx) => {\n+   ctx.docks.register({\n+     id: 'my-module',\n+     title: 'My Module',\n+     icon: 'carbon:apps',\n+     type: 'iframe',\n+     url: '\u002Furl-to-your-module-view',\n+   })\n+ })\n",[62,946,947,952,956,960,965,970,975,980,985,989,993,998,1003,1008,1013,1018,1023,1029],{"__ignoreMap":107},[111,948,949],{"class":113,"line":114},[111,950,951],{},"- import { addCustomTab } from '@nuxt\u002Fdevtools-kit'\n",[111,953,954],{"class":113,"line":129},[111,955,328],{},[111,957,958],{"class":113,"line":142},[111,959,334],{"emptyLinePlaceholder":333},[111,961,962],{"class":113,"line":158},[111,963,964],{},"- addCustomTab({\n",[111,966,967],{"class":113,"line":168},[111,968,969],{},"-   name: 'my-module',\n",[111,971,972],{"class":113,"line":199},[111,973,974],{},"-   title: 'My Module',\n",[111,976,977],{"class":113,"line":214},[111,978,979],{},"-   icon: 'carbon:apps',\n",[111,981,982],{"class":113,"line":281},[111,983,984],{},"-   view: { type: 'iframe', src: '\u002Furl-to-your-module-view' },\n",[111,986,987],{"class":113,"line":287},[111,988,798],{},[111,990,991],{"class":113,"line":367},[111,992,803],{},[111,994,995],{"class":113,"line":373},[111,996,997],{},"+   ctx.docks.register({\n",[111,999,1000],{"class":113,"line":379},[111,1001,1002],{},"+     id: 'my-module',\n",[111,1004,1005],{"class":113,"line":385},[111,1006,1007],{},"+     title: 'My Module',\n",[111,1009,1010],{"class":113,"line":821},[111,1011,1012],{},"+     icon: 'carbon:apps',\n",[111,1014,1015],{"class":113,"line":827},[111,1016,1017],{},"+     type: 'iframe',\n",[111,1019,1020],{"class":113,"line":833},[111,1021,1022],{},"+     url: '\u002Furl-to-your-module-view',\n",[111,1024,1026],{"class":113,"line":1025},17,[111,1027,1028],{},"+   })\n",[111,1030,1032],{"class":113,"line":1031},18,[111,1033,388],{},[1035,1036,1037],"warning",{},[67,1038,1039,1040,1043,1044,1046],{},"The docks host does not yet cover the Nuxt-specific custom-tab features such as\n",[62,1041,1042],{},"vnode"," views or tab categories. If you rely on those, keep using\n",[62,1045,927],{}," for now.",[58,1048,1050,1053],{"id":1049},"refreshcustomtabs-is-deprecated-ndt_dep_0006",[62,1051,1052],{},"refreshCustomTabs()"," is deprecated {#ndt_dep_0006}",[67,1055,1056,1058,1059,1062,1063,1066,1067,1071],{},[62,1057,1052],{}," is soft-deprecated (",[62,1060,1061],{},"NDT_DEP_0006","). With the docks host you\nno longer re-run a hook to refresh — update the dock entry directly via the\nhandle returned by ",[62,1064,1065],{},"register()"," inside the\n",[303,1068,1069],{"href":305},[62,1070,308],{}," hook:",[102,1073,1075],{"className":104,"code":1074,"language":106,"meta":107,"style":107},"onDevtoolsReady((ctx) => {\n  const entry = ctx.docks.register({ id: 'my-module', \u002F* ... *\u002F })\n  entry.update({ title: 'My Module (updated)' })\n})\n",[62,1076,1077,1093,1139,1168],{"__ignoreMap":107},[111,1078,1079,1081,1083,1085,1087,1089,1091],{"class":113,"line":114},[111,1080,308],{"class":428},[111,1082,431],{"class":154},[111,1084,431],{"class":125},[111,1086,441],{"class":440},[111,1088,444],{"class":125},[111,1090,447],{"class":117},[111,1092,126],{"class":125},[111,1094,1095,1097,1100,1102,1104,1106,1109,1111,1114,1116,1119,1121,1123,1125,1128,1130,1132,1135,1137],{"class":113,"line":129},[111,1096,454],{"class":117},[111,1098,1099],{"class":154}," entry",[111,1101,460],{"class":125},[111,1103,467],{"class":154},[111,1105,77],{"class":125},[111,1107,1108],{"class":154},"docks",[111,1110,77],{"class":125},[111,1112,1113],{"class":428},"register",[111,1115,431],{"class":132},[111,1117,1118],{"class":125},"{",[111,1120,530],{"class":132},[111,1122,136],{"class":125},[111,1124,493],{"class":125},[111,1126,1127],{"class":496},"my-module",[111,1129,500],{"class":125},[111,1131,185],{"class":125},[111,1133,1134],{"class":210}," \u002F* ... *\u002F",[111,1136,579],{"class":125},[111,1138,613],{"class":132},[111,1140,1141,1144,1146,1149,1151,1153,1155,1157,1159,1162,1164,1166],{"class":113,"line":142},[111,1142,1143],{"class":154},"  entry",[111,1145,77],{"class":125},[111,1147,1148],{"class":428},"update",[111,1150,431],{"class":132},[111,1152,1118],{"class":125},[111,1154,544],{"class":132},[111,1156,136],{"class":125},[111,1158,493],{"class":125},[111,1160,1161],{"class":496},"My Module (updated)",[111,1163,500],{"class":125},[111,1165,579],{"class":125},[111,1167,613],{"class":132},[111,1169,1170,1172],{"class":113,"line":158},[111,1171,635],{"class":125},[111,1173,613],{"class":154},[58,1175,1177],{"id":1176},"global-install-support-removed","Global Install Support Removed",[67,1179,1180],{},"Nuxt DevTools no longer supports being installed globally.",[658,1182,1183,1194,1204],{},[661,1184,1185,1186,1189,1190,1193],{},"The ",[62,1187,1188],{},"devtoolsGlobal"," Nuxt config option (with ",[62,1191,1192],{},"projects"," whitelist) is no longer supported",[661,1195,1185,1196,1199,1200,1203],{},[62,1197,1198],{},"-g"," flag is no longer used when installing\u002Funinstalling ",[62,1201,1202],{},"@nuxt\u002Fdevtools"," via the DevTools UI",[661,1205,1185,1206,1209,1210],{},[62,1207,1208],{},"isGlobalInstall"," property has been removed from ",[62,1211,1212],{},"NuxtDevtoolsInfo",[58,1214,1216,1219,1220,1223],{"id":1215},"nuxtdevtools-wizard-package-and-nuxi-devtools-removed",[62,1217,1218],{},"@nuxt\u002Fdevtools-wizard"," Package and ",[62,1221,1222],{},"nuxi devtools"," Removed",[67,1225,1185,1226,1228,1229,1232,1233,1236],{},[62,1227,1218],{}," package, its CLI, and the ",[62,1230,1231],{},"nuxi devtools enable\u002Fdisable"," subcommand have been removed. DevTools is shipped with Nuxt — to enable or disable it, update your ",[62,1234,1235],{},"nuxt.config.ts"," directly:",[102,1238,1240],{"className":104,"code":1239,"language":106,"meta":107,"style":107},"export default defineNuxtConfig({\n  devtools: { enabled: true }, \u002F\u002F or false\n})\n",[62,1241,1242,1258,1282],{"__ignoreMap":107},[111,1243,1244,1247,1250,1253,1255],{"class":113,"line":114},[111,1245,1246],{"class":463},"export",[111,1248,1249],{"class":463}," default",[111,1251,1252],{"class":428}," defineNuxtConfig",[111,1254,431],{"class":154},[111,1256,1257],{"class":125},"{\n",[111,1259,1260,1263,1265,1267,1270,1272,1276,1279],{"class":113,"line":129},[111,1261,1262],{"class":132},"  devtools",[111,1264,136],{"class":125},[111,1266,568],{"class":125},[111,1268,1269],{"class":132}," enabled",[111,1271,136],{"class":125},[111,1273,1275],{"class":1274},"sfNiH"," true",[111,1277,1278],{"class":125}," },",[111,1280,1281],{"class":210}," \u002F\u002F or false\n",[111,1283,1284,1286],{"class":113,"line":142},[111,1285,635],{"class":125},[111,1287,613],{"class":154},[58,1289,1291,1294],{"id":1290},"runwizard-rpc-removed",[62,1292,1293],{},"runWizard"," RPC Removed",[67,1296,1185,1297,1299,1300,1303,1304,1307],{},[62,1298,1293],{}," server RPC function has been removed from ",[62,1301,1302],{},"ServerFunctions",". The ",[62,1305,1306],{},"enablePages"," action is now available as a direct RPC function:",[102,1309,1311],{"className":239,"code":1310,"language":241,"meta":107,"style":107},"- await rpc.runWizard(token, 'enablePages')\n+ await rpc.enablePages(token)\n",[62,1312,1313,1318],{"__ignoreMap":107},[111,1314,1315],{"class":113,"line":114},[111,1316,1317],{},"- await rpc.runWizard(token, 'enablePages')\n",[111,1319,1320],{"class":113,"line":129},[111,1321,1322],{},"+ await rpc.enablePages(token)\n",[67,1324,1185,1325,395,1328,403,1331,1334,1335,77],{},[62,1326,1327],{},"WizardFunctions",[62,1329,1330],{},"WizardActions",[62,1332,1333],{},"GetWizardArgs"," types have been removed from ",[62,1336,1337],{},"@nuxt\u002Fdevtools-kit",[58,1339,1341],{"id":1340},"vite-devtools-integration-is-now-always-enabled","Vite DevTools Integration is Now Always Enabled",[67,1343,1185,1344,1347,1348,1354],{},[62,1345,1346],{},"viteDevTools"," module option has been removed. Nuxt DevTools now always integrates with ",[303,1349,1353],{"href":1350,"rel":1351},"https:\u002F\u002Fgithub.com\u002Fvitejs\u002Fdevtools",[1352],"nofollow","Vite DevTools"," as a dock entry. The built-in floating panel has been removed — DevTools is accessed through the Vite DevTools panel instead.",[102,1356,1358],{"className":239,"code":1357,"language":241,"meta":107,"style":107},"export default defineNuxtConfig({\n  devtools: {\n    enabled: true,\n-   viteDevTools: true,\n  },\n})\n",[62,1359,1360,1365,1370,1375,1380,1385],{"__ignoreMap":107},[111,1361,1362],{"class":113,"line":114},[111,1363,1364],{},"export default defineNuxtConfig({\n",[111,1366,1367],{"class":113,"line":129},[111,1368,1369],{},"  devtools: {\n",[111,1371,1372],{"class":113,"line":142},[111,1373,1374],{},"    enabled: true,\n",[111,1376,1377],{"class":113,"line":158},[111,1378,1379],{},"-   viteDevTools: true,\n",[111,1381,1382],{"class":113,"line":168},[111,1383,1384],{},"  },\n",[111,1386,1387],{"class":113,"line":199},[111,1388,290],{},[79,1390,1392,1395],{"id":1391},"clientdevtools-methods-now-control-vite-devtools",[62,1393,1394],{},"client.devtools"," Methods Now Control Vite DevTools",[67,1397,1185,1398,395,1401,403,1404,1407],{},[62,1399,1400],{},"client.devtools.open()",[62,1402,1403],{},"client.devtools.close()",[62,1405,1406],{},"client.devtools.toggle()"," methods still work but now control the Vite DevTools panel:",[658,1409,1410,1416,1422],{},[661,1411,1412,1415],{},[62,1413,1414],{},"open()"," opens the Vite DevTools panel and switches to the Nuxt DevTools dock entry",[661,1417,1418,1421],{},[62,1419,1420],{},"close()"," closes the Vite DevTools panel",[661,1423,1424,1427],{},[62,1425,1426],{},"toggle()"," toggles the Nuxt DevTools dock entry in the Vite DevTools panel",[67,1429,1185,1430,1433],{},[62,1431,1432],{},"Shift+Alt+D"," keyboard shortcut now toggles the Nuxt DevTools entry in the Vite DevTools panel.",[79,1435,1437,1223],{"id":1436},"clientdevtoolspopup-removed",[62,1438,1439],{},"client.devtools.popup",[67,1441,1442,1443,1445],{},"The Picture-in-Picture popup feature (",[62,1444,1439],{},") has been removed. This was an experimental feature that required Chrome 111+.",[79,1447,1449,224,1452,1455],{"id":1448},"showpanel-and-minimizepanelinactive-settings-removed",[62,1450,1451],{},"showPanel",[62,1453,1454],{},"minimizePanelInactive"," Settings Removed",[67,1457,1185,1458,224,1460,1462,1463,1466],{},[62,1459,1451],{},[62,1461,1454],{}," UI settings have been removed from ",[62,1464,1465],{},"NuxtDevToolsOptions"," as the built-in floating panel no longer exists.",[1468,1469,1470],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":107,"searchDepth":129,"depth":129,"links":1472},[1473,1482,1484,1486,1488,1490,1491,1493,1495],{"id":60,"depth":129,"text":1474,"children":1475},"startSubprocess() API Changes",[1476,1478,1480],{"id":81,"depth":142,"text":1477},"SubprocessOptions no longer extends ExecaOptions",{"id":293,"depth":142,"text":1479},"startSubprocess() is deprecated {#ndt_dep_0004}",{"id":640,"depth":142,"text":1481},"getProcess() is deprecated {#ndt_dep_0001}",{"id":732,"depth":129,"text":1483},"extendServerRpc() is deprecated {#ndt_dep_0003}",{"id":844,"depth":129,"text":1485},"nuxt.devtools.rpc direct access is deprecated {#ndt_dep_0007}",{"id":924,"depth":129,"text":1487},"addCustomTab() is deprecated {#ndt_dep_0005}",{"id":1049,"depth":129,"text":1489},"refreshCustomTabs() is deprecated {#ndt_dep_0006}",{"id":1176,"depth":129,"text":1177},{"id":1215,"depth":129,"text":1492},"@nuxt\u002Fdevtools-wizard Package and nuxi devtools Removed",{"id":1290,"depth":129,"text":1494},"runWizard RPC Removed",{"id":1340,"depth":129,"text":1341,"children":1496},[1497,1499,1501],{"id":1391,"depth":142,"text":1498},"client.devtools Methods Now Control Vite DevTools",{"id":1436,"depth":142,"text":1500},"client.devtools.popup Removed",{"id":1448,"depth":142,"text":1502},"showPanel and minimizePanelInactive Settings Removed","Breaking changes and migration guide for Nuxt DevTools v4.","md",{},{"title":40,"description":1503},"84uAl32TrZGFwg031poJSxhtY5iwyRY5XEnGYYMyivo",[1509,1511],{"title":36,"path":37,"stem":38,"description":1510,"children":-1},"UI Kit is for module authors to build a custom view.",{"title":49,"path":50,"stem":51,"description":1512,"children":-1},"Learn how to contribute to the Nuxt DevTools.",1784090045574]