[{"data":1,"prerenderedAt":1178},["ShallowReactive",2],{"navigation_docs":3,"-apps-plugins":217,"-apps-plugins-surround":1173},[4,25,41,84,126,165,201],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":24},"Overview","i-lucide-house","\u002Fgetting-started","1.getting-started",[10,14,19],{"title":11,"path":12,"stem":13,"icon":6},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Project structure","\u002Fgetting-started\u002Fproject-structure","1.getting-started\u002F4.project-structure","i-lucide-folder-tree",false,{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":24},"Architecture","i-lucide-cpu","\u002Farchitecture","3.architecture",[31,36],{"title":32,"path":33,"stem":34,"icon":35},"Core, themes, and apps","\u002Farchitecture\u002Foverview","3.architecture\u002F1.overview","i-lucide-layers",{"title":37,"path":38,"stem":39,"icon":40},"Kits and extension modules","\u002Farchitecture\u002Fkits","3.architecture\u002F3.kits","i-lucide-puzzle",{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":24},"Apps","i-lucide-app-window","\u002Fapps","4.apps",[47,51,55,60,64,69,74,79],{"title":5,"path":48,"stem":49,"icon":50},"\u002Fapps\u002Foverview","4.apps\u002F1.overview","i-lucide-info",{"title":52,"path":53,"stem":54,"icon":23},"Package layout","\u002Fapps\u002Fpackage-layout","4.apps\u002F2.package-layout",{"title":56,"path":57,"stem":58,"icon":59},"Create from scratch","\u002Fapps\u002Fcreate-from-scratch","4.apps\u002F3.create-from-scratch","i-lucide-list-checks",{"title":61,"path":62,"stem":63,"icon":40},"Module and runtime","\u002Fapps\u002Fmodule-and-runtime","4.apps\u002F4.module-and-runtime",{"title":65,"path":66,"stem":67,"icon":68},"Plugins","\u002Fapps\u002Fplugins","4.apps\u002F5.plugins","i-lucide-plug",{"title":70,"path":71,"stem":72,"icon":73},"Windows and commands","\u002Fapps\u002Fwindows-and-commands","4.apps\u002F6.windows-and-commands","i-lucide-layout-panel-top",{"title":75,"path":76,"stem":77,"icon":78},"Playground","\u002Fapps\u002Fplayground","4.apps\u002F7.playground","i-lucide-flask-conical",{"title":80,"path":81,"stem":82,"icon":83},"Build and publish","\u002Fapps\u002Fbuild-and-publish","4.apps\u002F8.build-and-publish","i-lucide-package",{"title":85,"icon":86,"path":87,"stem":88,"children":89,"page":24},"Themes","i-lucide-palette","\u002Fthemes","5.themes",[90,93,98,102,106,111,116,121],{"title":5,"path":91,"stem":92,"icon":50},"\u002Fthemes\u002Foverview","5.themes\u002F1.overview",{"title":94,"path":95,"stem":96,"icon":97},"Theme anatomy","\u002Fthemes\u002Ftheme-anatomy","5.themes\u002F2.theme-anatomy","i-lucide-component",{"title":99,"path":100,"stem":101},"Create From Scratch","\u002Fthemes\u002Fcreate-from-scratch","5.themes\u002F3.create-from-scratch",{"title":103,"path":104,"stem":105,"icon":68},"Theme plugins","\u002Fthemes\u002Fplugins","5.themes\u002F4.plugins",{"title":107,"path":108,"stem":109,"icon":110},"Styling and Tailwind","\u002Fthemes\u002Fstyling-and-tailwind","5.themes\u002F5.styling-and-tailwind","i-lucide-brush",{"title":112,"path":113,"stem":114,"icon":115},"Pages and boot flow","\u002Fthemes\u002Fpages-and-boot-flow","5.themes\u002F6.pages-and-boot-flow","i-lucide-power",{"title":117,"path":118,"stem":119,"icon":120},"Theme and optional modules","\u002Fthemes\u002Ftheme-and-optional-modules","5.themes\u002F7.theme-and-optional-modules","i-lucide-link",{"title":122,"path":123,"stem":124,"icon":125},"Window chrome and nav buttons","\u002Fthemes\u002Fwindow-chrome-and-nav-buttons","5.themes\u002F8.window-chrome-and-nav-buttons","i-lucide-square-mouse-pointer",{"title":127,"icon":128,"path":129,"stem":130,"children":131,"page":24},"Client & CLI","i-lucide-terminal","\u002Fsetup","6.setup",[132,136,141,146,151,156,161],{"title":133,"path":134,"stem":135,"icon":128},"desktop CLI","\u002Fsetup\u002Fdesktop-cli","6.setup\u002F1.desktop-cli",{"title":137,"path":138,"stem":139,"icon":140},"Package linking","\u002Fsetup\u002Fpackage-linking","6.setup\u002F2.package-linking","i-lucide-link-2",{"title":142,"path":143,"stem":144,"icon":145},"Monorepo and workspace","\u002Fsetup\u002Fmonorepo-workspace","6.setup\u002F3.monorepo-workspace","i-lucide-blocks",{"title":147,"path":148,"stem":149,"icon":150},"desktop.config.ts","\u002Fsetup\u002Fdesktop-config","6.setup\u002F4.desktop-config","i-lucide-file-code",{"title":152,"path":153,"stem":154,"icon":155},"Migrate themes, apps, and modules (3.3.2)","\u002Fsetup\u002Fmigrate-packages-3.3.2","6.setup\u002F5.migrate-packages-3.3.2","i-lucide-arrow-right-left",{"title":157,"path":158,"stem":159,"icon":160},"Migrate themes, apps, and modules (3.4)","\u002Fsetup\u002Fmigrate-packages-3.4","6.setup\u002F6.migrate-packages-3.4","i-lucide-arrow-up-right",{"title":162,"path":163,"stem":164},"Troubleshooting","\u002Fsetup\u002Ftroubleshooting","6.setup\u002F7.troubleshooting",{"title":166,"icon":167,"path":168,"stem":169,"children":170,"page":24},"Internals","i-lucide-book-open","\u002Finternals","7.internals",[171,176,181,186,191,196],{"title":172,"path":173,"stem":174,"icon":175},"Boot sequence","\u002Finternals\u002Fboot-sequence","7.internals\u002F1.boot-sequence","i-lucide-list-ordered",{"title":177,"path":178,"stem":179,"icon":180},"Stores and composables","\u002Finternals\u002Fstores-and-composables","7.internals\u002F2.stores-and-composables","i-lucide-database",{"title":182,"path":183,"stem":184,"icon":185},"Core components","\u002Finternals\u002Fcore-components","7.internals\u002F3.core-components","i-lucide-layout-grid",{"title":187,"path":188,"stem":189,"icon":190},"Dialog provider","\u002Finternals\u002Fdialog-provider","7.internals\u002F4.dialog-provider","i-lucide-message-square",{"title":192,"path":193,"stem":194,"icon":195},"Kernel contract","\u002Finternals\u002Fkernel-contract","7.internals\u002F5.kernel-contract","i-lucide-shield-check",{"title":197,"path":198,"stem":199,"icon":200},"Shell identity","\u002Finternals\u002Fshell-identity","7.internals\u002F6.shell-identity","i-lucide-user",{"title":202,"icon":203,"path":204,"stem":205,"children":206,"page":24},"Reference","i-lucide-book-marked","\u002Freference","8.reference",[207,212],{"title":208,"path":209,"stem":210,"icon":211},"Glossary","\u002Freference\u002Fglossary","8.reference\u002F1.glossary","i-lucide-book-a",{"title":213,"path":214,"stem":215,"icon":216},"Ecosystem","\u002Freference\u002Fuseful-links","8.reference\u002F2.useful-links","i-lucide-external-link",{"id":218,"title":65,"body":219,"description":1166,"extension":1167,"links":1168,"meta":1169,"navigation":1170,"path":66,"seo":1171,"stem":67,"__hash__":1172},"docs\u002F4.apps\u002F5.plugins.md",{"type":220,"value":221,"toc":1148},"minimark",[222,231,235,310,382,389,408,445,563,574,583,594,598,606,752,758,773,779,788,810,826,833,850,862,869,876,902,916,927,979,990,994,1000,1117,1125,1129,1144],[223,224,225,226,230],"p",{},"OWD apps use ",[227,228,229],"strong",{},"two different Nuxt plugin layers",". Confusing them is a common source of “app never registered” or “launch runs before register” bugs.",[232,233,5],"h2",{"id":234},"overview",[236,237,238,257],"table",{},[239,240,241],"thead",{},[242,243,244,248,251,254],"tr",{},[245,246,247],"th",{},"Type",[245,249,250],{},"Location",[245,252,253],{},"Shipped in npm?",[245,255,256],{},"Purpose",[258,259,260,292],"tbody",{},[242,261,262,268,274,277],{},[263,264,265],"td",{},[227,266,267],{},"Register",[263,269,270],{},[271,272,273],"code",{},"src\u002Fruntime\u002Fplugin.ts",[263,275,276],{},"Yes",[263,278,279,280,285,286,291],{},"Calls ",[227,281,282],{},[271,283,284],{},"defineDesktopApp"," — makes the app exist in ",[227,287,288],{},[271,289,290],{},"useApplicationManager",".",[242,293,294,299,304,307],{},[263,295,296],{},[227,297,298],{},"Launch (dev)",[263,300,301],{},[271,302,303],{},"playground\u002Fapp\u002Fplugins\u002Flaunch-*.client.ts",[263,305,306],{},"No",[263,308,309],{},"Opens a window automatically in the playground for faster iteration.",[311,312,317],"pre",{"className":313,"code":314,"language":315,"meta":316,"style":316},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sequenceDiagram\n  participant Core as @owdproject\u002Fcore\n  participant Reg as desktop-app-slug-register\n  participant Launch as launch-slug.client\n  participant AM as ApplicationManager\n\n  Core->>Reg: Nuxt plugin boot client\n  Reg->>AM: defineDesktopApp config\n  Launch->>Reg: dependsOn ordering\n  Launch->>AM: autoStartPlaygroundApps after app:mounted\n","mermaid","",[271,318,319,327,333,339,345,351,358,364,370,376],{"__ignoreMap":316},[320,321,324],"span",{"class":322,"line":323},"line",1,[320,325,326],{},"sequenceDiagram\n",[320,328,330],{"class":322,"line":329},2,[320,331,332],{},"  participant Core as @owdproject\u002Fcore\n",[320,334,336],{"class":322,"line":335},3,[320,337,338],{},"  participant Reg as desktop-app-slug-register\n",[320,340,342],{"class":322,"line":341},4,[320,343,344],{},"  participant Launch as launch-slug.client\n",[320,346,348],{"class":322,"line":347},5,[320,349,350],{},"  participant AM as ApplicationManager\n",[320,352,354],{"class":322,"line":353},6,[320,355,357],{"emptyLinePlaceholder":356},true,"\n",[320,359,361],{"class":322,"line":360},7,[320,362,363],{},"  Core->>Reg: Nuxt plugin boot client\n",[320,365,367],{"class":322,"line":366},8,[320,368,369],{},"  Reg->>AM: defineDesktopApp config\n",[320,371,373],{"class":322,"line":372},9,[320,374,375],{},"  Launch->>Reg: dependsOn ordering\n",[320,377,379],{"class":322,"line":378},10,[320,380,381],{},"  Launch->>AM: autoStartPlaygroundApps after app:mounted\n",[232,383,385,386,388],{"id":384},"register-plugin-srcruntimeplugints","Register plugin (",[271,387,273],{},")",[223,390,391,392,397,398,401,402,407],{},"Added via ",[227,393,394],{},[271,395,396],{},"addPlugin"," in your module’s ",[271,399,400],{},"setup",". Rules enforced by ",[227,403,404],{},[271,405,406],{},"desktop validate",":",[409,410,411,419,436],"ol",{},[412,413,414,415,291],"li",{},"Must call ",[227,416,417],{},[271,418,284],{},[412,420,421,422,427,428,431,432,435],{},"Must set ",[227,423,424],{},[271,425,426],{},"name: 'desktop-\u003Cslug>-register'"," — slug matches your package (e.g. ",[271,429,430],{},"desktop-app-about-register"," for ",[271,433,434],{},"app-about",").",[412,437,438,439,444],{},"Should guard ",[227,440,441],{},[271,442,443],{},"if (import.meta.server) return"," — registration is client-only.",[311,446,450],{"className":447,"code":448,"language":449,"meta":316,"style":316},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtPlugin({\n  name: 'desktop-app-about-register',\n  async setup() {\n    if (import.meta.server) return\n    await defineDesktopApp(config)\n  },\n})\n","ts",[271,451,452,473,493,508,535,551,556],{"__ignoreMap":316},[320,453,454,458,461,465,469],{"class":322,"line":323},[320,455,457],{"class":456},"s7zQu","export",[320,459,460],{"class":456}," default",[320,462,464],{"class":463},"s2Zo4"," defineNuxtPlugin",[320,466,468],{"class":467},"sTEyZ","(",[320,470,472],{"class":471},"sMK4o","{\n",[320,474,475,479,481,484,487,490],{"class":322,"line":329},[320,476,478],{"class":477},"swJcz","  name",[320,480,407],{"class":471},[320,482,483],{"class":471}," '",[320,485,430],{"class":486},"sfazB",[320,488,489],{"class":471},"'",[320,491,492],{"class":471},",\n",[320,494,495,499,502,505],{"class":322,"line":335},[320,496,498],{"class":497},"spNyl","  async",[320,500,501],{"class":477}," setup",[320,503,504],{"class":471},"()",[320,506,507],{"class":471}," {\n",[320,509,510,513,516,519,521,524,526,529,532],{"class":322,"line":341},[320,511,512],{"class":456},"    if",[320,514,515],{"class":477}," (",[320,517,518],{"class":456},"import",[320,520,291],{"class":471},[320,522,523],{"class":467},"meta",[320,525,291],{"class":471},[320,527,528],{"class":467},"server",[320,530,531],{"class":477},") ",[320,533,534],{"class":456},"return\n",[320,536,537,540,543,545,548],{"class":322,"line":347},[320,538,539],{"class":456},"    await",[320,541,542],{"class":463}," defineDesktopApp",[320,544,468],{"class":477},[320,546,547],{"class":467},"config",[320,549,550],{"class":477},")\n",[320,552,553],{"class":322,"line":353},[320,554,555],{"class":471},"  },\n",[320,557,558,561],{"class":322,"line":360},[320,559,560],{"class":471},"}",[320,562,550],{"class":467},[223,564,565,566,570,571,291],{},"Import ",[227,567,568],{},[271,569,284],{}," from ",[271,572,573],{},"@owdproject\u002Fcore\u002Fkit\u002FdefineDesktopApp",[575,576,578,579,582],"h3",{"id":577},"why-not-appcreated","Why not ",[271,580,581],{},"app:created","?",[223,584,585,586,589,590,593],{},"Older examples wrapped registration in ",[271,587,588],{},"nuxtApp.hook('app:created', ...)",". Current reference apps and the validator expect ",[227,591,592],{},"direct"," client-side registration. The register plugin runs during Nuxt plugin initialization on the client bundle.",[232,595,597],{"id":596},"launch-plugin-playground-only","Launch plugin (playground only)",[223,599,600,601,291],{},"Optional but recommended for dev and GitHub Pages. Filename pattern: ",[227,602,603],{},[271,604,605],{},"launch-\u003Cslug>.client.ts",[311,607,609],{"className":447,"code":608,"language":449,"meta":316,"style":316},"export default defineNuxtPlugin({\n  name: 'app-about-playground-launch',\n  dependsOn: ['desktop-app-about-register'],\n  setup(nuxtApp) {\n    autoStartPlaygroundApps(nuxtApp, [\n      { id: 'org.owdproject.about', entry: 'about', windowModel: 'main' },\n    ])\n  },\n})\n",[271,610,611,623,638,659,674,689,737,742,746],{"__ignoreMap":316},[320,612,613,615,617,619,621],{"class":322,"line":323},[320,614,457],{"class":456},[320,616,460],{"class":456},[320,618,464],{"class":463},[320,620,468],{"class":467},[320,622,472],{"class":471},[320,624,625,627,629,631,634,636],{"class":322,"line":329},[320,626,478],{"class":477},[320,628,407],{"class":471},[320,630,483],{"class":471},[320,632,633],{"class":486},"app-about-playground-launch",[320,635,489],{"class":471},[320,637,492],{"class":471},[320,639,640,643,645,648,650,652,654,657],{"class":322,"line":335},[320,641,642],{"class":477},"  dependsOn",[320,644,407],{"class":471},[320,646,647],{"class":467}," [",[320,649,489],{"class":471},[320,651,430],{"class":486},[320,653,489],{"class":471},[320,655,656],{"class":467},"]",[320,658,492],{"class":471},[320,660,661,664,666,670,672],{"class":322,"line":341},[320,662,663],{"class":477},"  setup",[320,665,468],{"class":471},[320,667,669],{"class":668},"sHdIc","nuxtApp",[320,671,388],{"class":471},[320,673,507],{"class":471},[320,675,676,679,681,683,686],{"class":322,"line":347},[320,677,678],{"class":463},"    autoStartPlaygroundApps",[320,680,468],{"class":477},[320,682,669],{"class":467},[320,684,685],{"class":471},",",[320,687,688],{"class":477}," [\n",[320,690,691,694,697,699,701,704,706,708,711,713,715,718,720,722,725,727,729,732,734],{"class":322,"line":353},[320,692,693],{"class":471},"      {",[320,695,696],{"class":477}," id",[320,698,407],{"class":471},[320,700,483],{"class":471},[320,702,703],{"class":486},"org.owdproject.about",[320,705,489],{"class":471},[320,707,685],{"class":471},[320,709,710],{"class":477}," entry",[320,712,407],{"class":471},[320,714,483],{"class":471},[320,716,717],{"class":486},"about",[320,719,489],{"class":471},[320,721,685],{"class":471},[320,723,724],{"class":477}," windowModel",[320,726,407],{"class":471},[320,728,483],{"class":471},[320,730,731],{"class":486},"main",[320,733,489],{"class":471},[320,735,736],{"class":471}," },\n",[320,738,739],{"class":322,"line":360},[320,740,741],{"class":477},"    ])\n",[320,743,744],{"class":322,"line":366},[320,745,555],{"class":471},[320,747,748,750],{"class":322,"line":372},[320,749,560],{"class":471},[320,751,550],{"class":467},[575,753,755],{"id":754},"dependson",[271,756,757],{},"dependsOn",[223,759,760,761,764,765,767,768,772],{},"Must list the ",[227,762,763],{},"exact"," register plugin name (",[271,766,430],{},"). Without it, launch may run before ",[227,769,770],{},[271,771,284],{}," completes.",[575,774,776],{"id":775},"autostartplaygroundapps",[271,777,778],{},"autoStartPlaygroundApps",[223,780,781,782,787],{},"Use the helper from ",[227,783,784],{},[271,785,786],{},"@owdproject\u002Fcore"," (auto-imported in playground). It:",[789,790,791,794,797,807],"ul",{},[412,792,793],{},"Waits for desktop work area measurement (pre-open centering)",[412,795,796],{},"Clears stale persisted windows in playground",[412,798,279,799,802,803,806],{},[271,800,801],{},"execAppCommand"," with the ",[271,804,805],{},"entry"," string",[412,808,809],{},"Brings the target window to front",[223,811,812,813,817,818,821,822,825],{},"The ",[227,814,815],{},[271,816,805],{}," field is the raw command string (e.g. ",[271,819,820],{},"'about'"," or ",[271,823,824],{},"'youtube --new --no-check'","), not just the entries map key.",[575,827,829,830],{"id":828},"do-not-use-importmetadev","Do not use ",[271,831,832],{},"import.meta.dev",[223,834,835,836,839,840,843,844,849],{},"Do ",[227,837,838],{},"not"," guard launch with ",[271,841,842],{},"if (!import.meta.dev) return",". GitHub Pages runs ",[227,845,846],{},[271,847,848],{},"nuxt generate"," — the same auto-start path must work there.",[223,851,852,853,291],{},"Reference: ",[854,855,859,861],"a",{"href":856,"rel":857},"https:\u002F\u002Fgithub.com\u002Fowdproject\u002Fapp-about\u002Fblob\u002Fmain\u002Fplayground\u002Fapp\u002Fplugins\u002Flaunch-about.client.ts",[858],"nofollow",[271,860,434],{}," launch plugin",[232,863,865,866],{"id":864},"adding-plugins-from-modulets","Adding plugins from ",[271,867,868],{},"module.ts",[223,870,871,872,875],{},"Only the ",[227,873,874],{},"register"," plugin belongs in the published module:",[311,877,879],{"className":447,"code":878,"language":449,"meta":316,"style":316},"addPlugin(resolve('.\u002Fruntime\u002Fplugin'))\n",[271,880,881],{"__ignoreMap":316},[320,882,883,885,887,890,892,894,897,899],{"class":322,"line":323},[320,884,396],{"class":463},[320,886,468],{"class":467},[320,888,889],{"class":463},"resolve",[320,891,468],{"class":467},[320,893,489],{"class":471},[320,895,896],{"class":486},".\u002Fruntime\u002Fplugin",[320,898,489],{"class":471},[320,900,901],{"class":467},"))\n",[223,903,835,904,906,907,909,910,915],{},[227,905,838],{}," add playground launch plugins from ",[271,908,868],{}," — keep them in ",[227,911,912],{},[271,913,914],{},"playground\u002Fapp\u002Fplugins\u002F"," so Nuxt auto-discovers them in the playground app root.",[223,917,918,919,922,923,926],{},"You can add ",[227,920,921],{},"additional runtime plugins"," under ",[271,924,925],{},"src\u002Fruntime\u002Fplugins\u002F"," if the app needs shared client setup (rare). Register them the same way:",[311,928,930],{"className":447,"code":929,"language":449,"meta":316,"style":316},"addPlugin({ src: resolve('.\u002Fruntime\u002Fplugins\u002F10.my-setup.client.ts'), mode: 'client' })\n",[271,931,932],{"__ignoreMap":316},[320,933,934,936,938,941,944,946,949,951,953,956,958,960,962,965,967,969,972,974,977],{"class":322,"line":323},[320,935,396],{"class":463},[320,937,468],{"class":467},[320,939,940],{"class":471},"{",[320,942,943],{"class":477}," src",[320,945,407],{"class":471},[320,947,948],{"class":463}," resolve",[320,950,468],{"class":467},[320,952,489],{"class":471},[320,954,955],{"class":486},".\u002Fruntime\u002Fplugins\u002F10.my-setup.client.ts",[320,957,489],{"class":471},[320,959,388],{"class":467},[320,961,685],{"class":471},[320,963,964],{"class":477}," mode",[320,966,407],{"class":471},[320,968,483],{"class":471},[320,970,971],{"class":486},"client",[320,973,489],{"class":471},[320,975,976],{"class":471}," }",[320,978,550],{"class":467},[223,980,981,982,985,986,989],{},"Use numeric prefixes (",[271,983,984],{},"10.",", ",[271,987,988],{},"20.",") when order matters relative to other plugins.",[232,991,993],{"id":992},"validation-summary","Validation summary",[223,995,996,999],{},[271,997,998],{},"desktop validate ."," on an app repo reports:",[236,1001,1002,1012],{},[239,1003,1004],{},[242,1005,1006,1009],{},[245,1007,1008],{},"Check",[245,1010,1011],{},"Severity",[258,1013,1014,1024,1033,1047,1058,1072,1080,1089,1098,1109],{},[242,1015,1016,1021],{},[263,1017,1018,1019],{},"Missing ",[271,1020,273],{},[263,1022,1023],{},"error",[242,1025,1026,1031],{},[263,1027,1028,1029],{},"No ",[271,1030,284],{},[263,1032,1023],{},[242,1034,1035,1045],{},[263,1036,1037,1038,1041,1042,388],{},"Wrong plugin ",[271,1039,1040],{},"name"," pattern (",[271,1043,1044],{},"desktop-*-register",[263,1046,1023],{},[242,1048,1049,1056],{},[263,1050,1051,1052,1055],{},"Legacy ",[271,1053,1054],{},"owd-*-register"," name",[263,1057,1023],{},[242,1059,1060,1070],{},[263,1061,1062,1063,1066,1067],{},"Duplicate ",[271,1064,1065],{},"runtime\u002F"," + ",[271,1068,1069],{},"src\u002Fruntime\u002F",[263,1071,1023],{},[242,1073,1074,1077],{},[263,1075,1076],{},"Missing server guard",[263,1078,1079],{},"warning",[242,1081,1082,1087],{},[263,1083,1084,1086],{},[271,1085,832],{}," in launch plugin",[263,1088,1079],{},[242,1090,1091,1096],{},[263,1092,1093,1094],{},"Launch without ",[271,1095,778],{},[263,1097,1079],{},[242,1099,1100,1107],{},[263,1101,1102,1103,1106],{},"Hardcoded ",[271,1104,1105],{},"position"," in app.config",[263,1108,1079],{},[242,1110,1111,1114],{},[263,1112,1113],{},"Missing launch plugin",[263,1115,1116],{},"warning (optional)",[223,1118,1119,1120,291],{},"Full list: ",[854,1121,1124],{"href":1122,"rel":1123},"https:\u002F\u002Fgithub.com\u002Fowdproject\u002Fcore\u002Fblob\u002Fmain\u002FPLAYGROUND.md",[858],"core PLAYGROUND.md",[232,1126,1128],{"id":1127},"related","Related",[789,1130,1131,1135,1139],{},[412,1132,1133],{},[854,1134,56],{"href":57},[412,1136,1137],{},[854,1138,75],{"href":76},[412,1140,1141,1142],{},"Theme-side plugins: ",[854,1143,103],{"href":104},[1145,1146,1147],"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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .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 .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}",{"title":316,"searchDepth":329,"depth":329,"links":1149},[1150,1151,1156,1162,1164,1165],{"id":234,"depth":329,"text":5},{"id":384,"depth":329,"text":1152,"children":1153},"Register plugin (src\u002Fruntime\u002Fplugin.ts)",[1154],{"id":577,"depth":335,"text":1155},"Why not app:created?",{"id":596,"depth":329,"text":597,"children":1157},[1158,1159,1160],{"id":754,"depth":335,"text":757},{"id":775,"depth":335,"text":778},{"id":828,"depth":335,"text":1161},"Do not use import.meta.dev",{"id":864,"depth":329,"text":1163},"Adding plugins from module.ts",{"id":992,"depth":329,"text":993},{"id":1127,"depth":329,"text":1128},"Register plugins in app modules vs playground launch plugins — naming, dependsOn, and validation.","md",null,{},{"icon":68},{"title":65,"description":1166},"PW1b-I3dx8ebrjZNCVKaUzo0YnpjRtMeC3mMe3JvmIo",[1174,1176],{"title":61,"path":62,"stem":63,"description":1175,"icon":40,"children":-1},"module.ts, plugins, defineDesktopApp, configKey merge, and Tailwind registration.",{"title":70,"path":71,"stem":72,"description":1177,"icon":73,"children":-1},"Window models, entries, commands, singletons, and ApplicationController.",1782171655060]