[{"data":1,"prerenderedAt":1564},["ShallowReactive",2],{"navigation_docs":3,"-setup-desktop-cli":217,"-setup-desktop-cli-surround":1559},[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":133,"body":219,"description":1552,"extension":1553,"links":1554,"meta":1555,"navigation":1556,"path":134,"seo":1557,"stem":135,"__hash__":1558},"docs\u002F6.setup\u002F1.desktop-cli.md",{"type":220,"value":221,"toc":1532},"minimark",[222,234,247,273,293,298,310,447,453,460,536,550,556,559,586,595,601,627,672,677,721,734,742,826,830,910,913,955,959,966,1002,1008,1011,1053,1102,1105,1117,1121,1248,1266,1273,1285,1331,1338,1347,1484,1488,1518,1528],[223,224,225,226,233],"p",{},"The ",[227,228,229],"strong",{},[230,231,232],"code",{},"desktop"," command is your primary interface for managing an OWD project from the terminal. It handles everything from environment setup and development to package installation and validation.",[223,235,236,237,242,243,246],{},"It ships in ",[227,238,239],{},[230,240,241],{},"@owdproject\u002Fcore"," (",[230,244,245],{},"packages\u002Fcore\u002Fbin\u002Fdesktop.js","). In the official client monorepo:",[248,249,254],"pre",{"className":250,"code":251,"language":252,"meta":253,"style":253},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm desktop          # same as: node .\u002Fpackages\u002Fcore\u002Fbin\u002Fdesktop.js\n","bash","",[230,255,256],{"__ignoreMap":253},[257,258,261,265,269],"span",{"class":259,"line":260},"line",1,[257,262,264],{"class":263},"sBMFI","pnpm",[257,266,268],{"class":267},"sfazB"," desktop",[257,270,272],{"class":271},"sHwdD","          # same as: node .\u002Fpackages\u002Fcore\u002Fbin\u002Fdesktop.js\n",[274,275,276,281,282,286,287,292],"callout",{"icon":50},[227,277,278],{},[230,279,280],{},"owd"," is a deprecated alias for ",[227,283,284],{},[230,285,232],{},". Use ",[227,288,289],{},[230,290,291],{},"pnpm desktop"," in scripts and docs.",[294,295,297],"h2",{"id":296},"control-panel-default","Control panel (default)",[223,299,300,301,305,306,309],{},"Running ",[227,302,303],{},[230,304,291],{}," with no subcommand opens the ",[227,307,308],{},"interactive TUI"," (control panel).",[311,312,313,326],"table",{},[314,315,316],"thead",{},[317,318,319,323],"tr",{},[320,321,322],"th",{},"Key",[320,324,325],{},"Action",[327,328,329,340,350,360,370,382,400,410,420,433],"tbody",{},[317,330,331,337],{},[332,333,334],"td",{},[227,335,336],{},"m",[332,338,339],{},"Command menu",[317,341,342,347],{},[332,343,344],{},[227,345,346],{},"s",[332,348,349],{},"Start Nuxt dev server",[317,351,352,357],{},[332,353,354],{},[227,355,356],{},"x",[332,358,359],{},"Stop dev server",[317,361,362,367],{},[332,363,364],{},[227,365,366],{},"R",[332,368,369],{},"Restart dev server",[317,371,372,377],{},[332,373,374],{},[227,375,376],{},"w",[332,378,379,380],{},"Save catalog\u002Ftheme changes to ",[230,381,147],{},[317,383,384,389],{},[332,385,386],{},[227,387,388],{},"d",[332,390,391,392,395,396,399],{},"Toggle ",[227,393,394],{},"User"," (npm) \u002F ",[227,397,398],{},"Dev"," (git clone) install mode",[317,401,402,407],{},[332,403,404],{},[227,405,406],{},"g",[332,408,409],{},"Settings (GitHub user for fork clones)",[317,411,412,417],{},[332,413,414],{},[227,415,416],{},"r",[332,418,419],{},"Refresh package list from GitHub",[317,421,422,427],{},[332,423,424],{},[227,425,426],{},"b",[332,428,429,430],{},"Run ",[230,431,432],{},"pnpm run generate",[317,434,435,444],{},[332,436,437,440,441],{},[227,438,439],{},"q"," \u002F ",[227,442,443],{},"Esc",[332,445,446],{},"Quit",[294,448,450],{"id":449},"desktop-dev",[230,451,452],{},"desktop dev",[223,454,455,456,459],{},"Start the dev server. Resolution depends on ",[227,457,458],{},"current working directory",":",[248,461,463],{"className":250,"code":462,"language":252,"meta":253,"style":253},"# From client monorepo root → reference desktop\u002F\npnpm desktop dev\n\n# From an app or theme package → that package’s playground\u002F\ncd apps\u002Fapp-about\npnpm desktop dev\n\n# Force playground even when cwd might resolve elsewhere\npnpm desktop dev --playground\n",[230,464,465,470,480,487,493,503,512,517,523],{"__ignoreMap":253},[257,466,467],{"class":259,"line":260},[257,468,469],{"class":271},"# From client monorepo root → reference desktop\u002F\n",[257,471,473,475,477],{"class":259,"line":472},2,[257,474,264],{"class":263},[257,476,268],{"class":267},[257,478,479],{"class":267}," dev\n",[257,481,483],{"class":259,"line":482},3,[257,484,486],{"emptyLinePlaceholder":485},true,"\n",[257,488,490],{"class":259,"line":489},4,[257,491,492],{"class":271},"# From an app or theme package → that package’s playground\u002F\n",[257,494,496,500],{"class":259,"line":495},5,[257,497,499],{"class":498},"s2Zo4","cd",[257,501,502],{"class":267}," apps\u002Fapp-about\n",[257,504,506,508,510],{"class":259,"line":505},6,[257,507,264],{"class":263},[257,509,268],{"class":267},[257,511,479],{"class":267},[257,513,515],{"class":259,"line":514},7,[257,516,486],{"emptyLinePlaceholder":485},[257,518,520],{"class":259,"line":519},8,[257,521,522],{"class":271},"# Force playground even when cwd might resolve elsewhere\n",[257,524,526,528,530,533],{"class":259,"line":525},9,[257,527,264],{"class":263},[257,529,268],{"class":267},[257,531,532],{"class":267}," dev",[257,534,535],{"class":267}," --playground\n",[223,537,538,539,544,545,549],{},"Requires a Nuxt project with ",[227,540,541],{},[230,542,543],{},"modules: ['@owdproject\u002Fcore']"," and ",[227,546,547],{},[230,548,147],{},".",[294,551,553],{"id":552},"desktop-init",[230,554,555],{},"desktop init",[223,557,558],{},"Scaffold a new OWD desktop project (uses the template blueprint), install dependencies, then open the control panel:",[248,560,562],{"className":250,"code":561,"language":252,"meta":253,"style":253},"desktop init my-desktop\ndesktop init .          # current directory\n",[230,563,564,574],{"__ignoreMap":253},[257,565,566,568,571],{"class":259,"line":260},[257,567,232],{"class":263},[257,569,570],{"class":267}," init",[257,572,573],{"class":267}," my-desktop\n",[257,575,576,578,580,583],{"class":259,"line":472},[257,577,232],{"class":263},[257,579,570],{"class":267},[257,581,582],{"class":267}," .",[257,584,585],{"class":271},"          # current directory\n",[223,587,588,589,594],{},"Equivalent to ",[227,590,591],{},[230,592,593],{},"npm create owd"," for new projects outside the monorepo.",[294,596,598],{"id":597},"desktop-add",[230,599,600],{},"desktop add",[223,602,603,604,607,608,611,612,615,616,620,621,626],{},"Install an ",[227,605,606],{},"app",", ",[227,609,610],{},"theme",", or ",[227,613,614],{},"extension module"," and register it in ",[227,617,618],{},[230,619,147],{}," (and ",[227,622,623],{},[230,624,625],{},"desktop\u002Fpackage.json"," when using the reference desktop).",[248,628,630],{"className":250,"code":629,"language":252,"meta":253,"style":253},"desktop add app-todo\ndesktop add theme-nova\ndesktop add module-fs\ndesktop add module-persistence --npm\n",[230,631,632,642,651,660],{"__ignoreMap":253},[257,633,634,636,639],{"class":259,"line":260},[257,635,232],{"class":263},[257,637,638],{"class":267}," add",[257,640,641],{"class":267}," app-todo\n",[257,643,644,646,648],{"class":259,"line":472},[257,645,232],{"class":263},[257,647,638],{"class":267},[257,649,650],{"class":267}," theme-nova\n",[257,652,653,655,657],{"class":259,"line":482},[257,654,232],{"class":263},[257,656,638],{"class":267},[257,658,659],{"class":267}," module-fs\n",[257,661,662,664,666,669],{"class":259,"line":489},[257,663,232],{"class":263},[257,665,638],{"class":267},[257,667,668],{"class":267}," module-persistence",[257,670,671],{"class":267}," --npm\n",[673,674,676],"h3",{"id":675},"optional-kind-prefix","Optional kind prefix",[248,678,680],{"className":250,"code":679,"language":252,"meta":253,"style":253},"desktop add app todo      # → @owdproject\u002Fapp-todo\ndesktop add theme paper\ndesktop add module fs\n",[230,681,682,697,709],{"__ignoreMap":253},[257,683,684,686,688,691,694],{"class":259,"line":260},[257,685,232],{"class":263},[257,687,638],{"class":267},[257,689,690],{"class":267}," app",[257,692,693],{"class":267}," todo",[257,695,696],{"class":271},"      # → @owdproject\u002Fapp-todo\n",[257,698,699,701,703,706],{"class":259,"line":472},[257,700,232],{"class":263},[257,702,638],{"class":267},[257,704,705],{"class":267}," theme",[257,707,708],{"class":267}," paper\n",[257,710,711,713,715,718],{"class":259,"line":482},[257,712,232],{"class":263},[257,714,638],{"class":267},[257,716,717],{"class":267}," module",[257,719,720],{"class":267}," fs\n",[223,722,723,724,607,727,607,730,733],{},"Kinds are inferred from the name when omitted (",[230,725,726],{},"app-*",[230,728,729],{},"theme-*",[230,731,732],{},"module-*",").",[673,735,737,738,741],{"id":736},"install-sources-from","Install sources (",[230,739,740],{},"--from",")",[311,743,744,755],{},[314,745,746],{},[317,747,748,752],{},[320,749,750],{},[230,751,740],{},[320,753,754],{},"Behaviour",[327,756,757,771,780,794,806,816],{},[317,758,759,765],{},[332,760,761],{},[762,763,764],"em",{},"(omit)",[332,766,767,770],{},[227,768,769],{},"npm registry"," (default)",[317,772,773,778],{},[332,774,775],{},[230,776,777],{},"npm",[332,779,769],{},[317,781,782,787],{},[332,783,784],{},[230,785,786],{},"owdproject",[332,788,789,790,793],{},"Clone ",[230,791,792],{},"github.com\u002Fowdproject\u002F\u003Cpackage>"," (monorepo dev)",[317,795,796,801],{},[332,797,798],{},[230,799,800],{},"\u003Cgithub-user>",[332,802,789,803],{},[230,804,805],{},"github.com\u002F\u003Cuser>\u002F\u003Cpackage>",[317,807,808,813],{},[332,809,810],{},[230,811,812],{},"\u003Cuser>\u002F\u003Crepo>",[332,814,815],{},"Explicit GitHub repo",[317,817,818,823],{},[332,819,820],{},[230,821,822],{},"\u003Cgit-url>",[332,824,825],{},"Full clone URL",[673,827,829],{"id":828},"other-flags","Other flags",[311,831,832,842],{},[314,833,834],{},[317,835,836,839],{},[320,837,838],{},"Flag",[320,840,841],{},"Effect",[327,843,844,854,877,887,897],{},[317,845,846,851],{},[332,847,848],{},[230,849,850],{},"--npm",[332,852,853],{},"Force npm (skip git)",[317,855,856,864],{},[332,857,858,607,861],{},[230,859,860],{},"--dev",[230,862,863],{},"--workspace",[332,865,866,867,607,870,611,873,876],{},"Clone into ",[230,868,869],{},"apps\u002F",[230,871,872],{},"themes\u002F",[230,874,875],{},"packages\u002F"," in the monorepo",[317,878,879,884],{},[332,880,881],{},[230,882,883],{},"--branch \u003Cname>",[332,885,886],{},"Git branch to clone",[317,888,889,894],{},[332,890,891],{},[230,892,893],{},"--dry-run",[332,895,896],{},"Print plan only",[317,898,899,907],{},[332,900,901,607,904],{},[230,902,903],{},"-h",[230,905,906],{},"--help",[332,908,909],{},"Usage",[223,911,912],{},"Examples:",[248,914,916],{"className":250,"code":915,"language":252,"meta":253,"style":253},"desktop add app-todo --npm\ndesktop add theme-paper --dev\ndesktop add module-persistence --from dxlliv\n",[230,917,918,929,941],{"__ignoreMap":253},[257,919,920,922,924,927],{"class":259,"line":260},[257,921,232],{"class":263},[257,923,638],{"class":267},[257,925,926],{"class":267}," app-todo",[257,928,671],{"class":267},[257,930,931,933,935,938],{"class":259,"line":472},[257,932,232],{"class":263},[257,934,638],{"class":267},[257,936,937],{"class":267}," theme-paper",[257,939,940],{"class":267}," --dev\n",[257,942,943,945,947,949,952],{"class":259,"line":482},[257,944,232],{"class":263},[257,946,638],{"class":267},[257,948,668],{"class":267},[257,950,951],{"class":267}," --from",[257,953,954],{"class":267}," dxlliv\n",[673,956,958],{"id":957},"legacy-commands","Legacy commands",[223,960,961,962,459],{},"Still supported; prefer ",[227,963,964],{},[230,965,600],{},[248,967,969],{"className":250,"code":968,"language":252,"meta":253,"style":253},"desktop install-app @owdproject\u002Fapp-todo   # → desktop add app-todo\ndesktop install-theme theme-nova\ndesktop install-module module-fs\n",[230,970,971,984,993],{"__ignoreMap":253},[257,972,973,975,978,981],{"class":259,"line":260},[257,974,232],{"class":263},[257,976,977],{"class":267}," install-app",[257,979,980],{"class":267}," @owdproject\u002Fapp-todo",[257,982,983],{"class":271},"   # → desktop add app-todo\n",[257,985,986,988,991],{"class":259,"line":472},[257,987,232],{"class":263},[257,989,990],{"class":267}," install-theme",[257,992,650],{"class":267},[257,994,995,997,1000],{"class":259,"line":482},[257,996,232],{"class":263},[257,998,999],{"class":267}," install-module",[257,1001,659],{"class":267},[294,1003,1005],{"id":1004},"desktop-validate",[230,1006,1007],{},"desktop validate",[223,1009,1010],{},"Check that a package matches the OWD 3.4 module layout (exports, playground, peers, CI patterns).",[248,1012,1014],{"className":250,"code":1013,"language":252,"meta":253,"style":253},"desktop validate              # cwd package, or all apps\u002Fthemes\u002Fmodules at repo root\ndesktop validate .\ndesktop validate apps\ndesktop validate themes\u002Ftheme-paper\n",[230,1015,1016,1026,1035,1044],{"__ignoreMap":253},[257,1017,1018,1020,1023],{"class":259,"line":260},[257,1019,232],{"class":263},[257,1021,1022],{"class":267}," validate",[257,1024,1025],{"class":271},"              # cwd package, or all apps\u002Fthemes\u002Fmodules at repo root\n",[257,1027,1028,1030,1032],{"class":259,"line":472},[257,1029,232],{"class":263},[257,1031,1022],{"class":267},[257,1033,1034],{"class":267}," .\n",[257,1036,1037,1039,1041],{"class":259,"line":482},[257,1038,232],{"class":263},[257,1040,1022],{"class":267},[257,1042,1043],{"class":267}," apps\n",[257,1045,1046,1048,1050],{"class":259,"line":489},[257,1047,232],{"class":263},[257,1049,1022],{"class":267},[257,1051,1052],{"class":267}," themes\u002Ftheme-paper\n",[311,1054,1055,1063],{},[314,1056,1057],{},[317,1058,1059,1061],{},[320,1060,838],{},[320,1062,841],{},[327,1064,1065,1075,1085],{},[317,1066,1067,1072],{},[332,1068,1069],{},[230,1070,1071],{},"--json",[332,1073,1074],{},"Machine-readable output",[317,1076,1077,1082],{},[332,1078,1079],{},[230,1080,1081],{},"--strict",[332,1083,1084],{},"Warnings fail the run",[317,1086,1087,1092],{},[332,1088,1089],{},[230,1090,1091],{},"--smoke",[332,1093,429,1094,1097,1098,1101],{},[230,1095,1096],{},"dev:prepare"," + ",[230,1099,1100],{},"nuxt build playground"," (slow, CI)",[223,1103,1104],{},"From the monorepo root:",[248,1106,1108],{"className":250,"code":1107,"language":252,"meta":253,"style":253},"pnpm validate:modules\n",[230,1109,1110],{"__ignoreMap":253},[257,1111,1112,1114],{"class":259,"line":260},[257,1113,264],{"class":263},[257,1115,1116],{"class":267}," validate:modules\n",[673,1118,1120],{"id":1119},"common-checks","Common checks",[311,1122,1123,1133],{},[314,1124,1125],{},[317,1126,1127,1130],{},[320,1128,1129],{},"Area",[320,1131,1132],{},"Examples",[327,1134,1135,1152,1170,1190,1204,1219,1233],{},[317,1136,1137,1140],{},[332,1138,1139],{},"Structure",[332,1141,1142,607,1145,1148,1149],{},[230,1143,1144],{},"src\u002Fmodule.ts",[230,1146,1147],{},"src\u002Fruntime\u002F",", no duplicate root ",[230,1150,1151],{},"runtime\u002F",[317,1153,1154,1157],{},[332,1155,1156],{},"Exports",[332,1158,1159,1162,1163,1166,1167],{},[230,1160,1161],{},"exports[\".\"].import",", optional ",[230,1164,1165],{},"development"," → ",[230,1168,1169],{},".\u002Fsrc\u002Fmodule.ts",[317,1171,1172,1175],{},[332,1173,1174],{},"Scripts",[332,1176,1177,607,1179,607,1182,1185,1186,1189],{},[230,1178,1096],{},[230,1180,1181],{},"prepack",[230,1183,1184],{},"validate",", no ",[230,1187,1188],{},"prepare"," script",[317,1191,1192,1195],{},[332,1193,1194],{},"Register plugin",[332,1196,1197,607,1200,1203],{},[230,1198,1199],{},"defineDesktopApp",[230,1201,1202],{},"desktop-*-register",", server guard",[317,1205,1206,1208],{},[332,1207,75],{},[332,1209,1210,1211,607,1213,607,1216],{},"deps on your package + ",[230,1212,241],{},[230,1214,1215],{},"ssr: false",[230,1217,1218],{},"\u003CDesktop \u002F>",[317,1220,1221,1224],{},[332,1222,1223],{},"Launch (optional)",[332,1225,1226,1185,1229,1232],{},[230,1227,1228],{},"autoStartPlaygroundApps",[230,1230,1231],{},"import.meta.dev"," guard",[317,1234,1235,1238],{},[332,1236,1237],{},"CI (standalone repos)",[332,1239,1240,1241,1244,1245],{},"client checkout overlay; avoid standalone ",[230,1242,1243],{},"nypm"," with ",[230,1246,1247],{},"workspace:*",[223,1249,1250,1251,1254,1255,1258,1259,549],{},"Fix ",[227,1252,1253],{},"errors"," before ",[230,1256,1257],{},"npm publish",". Warnings are recommended fixes (launch plugin, CI, centering). Full code list: ",[1260,1261,1265],"a",{"href":1262,"rel":1263},"https:\u002F\u002Fgithub.com\u002Fowdproject\u002Fcore\u002Fblob\u002Fmain\u002FPLAYGROUND.md",[1264],"nofollow","core PLAYGROUND.md",[294,1267,1269,1272],{"id":1268},"desktop-template-maintainers",[230,1270,1271],{},"desktop template"," (maintainers)",[223,1274,1275,1276,1281,1282,1284],{},"Regenerate ",[227,1277,1278],{},[230,1279,1280],{},"template\u002F"," (output of ",[230,1283,593],{},") from the blueprint and reference desktop:",[248,1286,1288],{"className":250,"code":1287,"language":252,"meta":253,"style":253},"pnpm template:sync\n# or\ndesktop template\ndesktop template --dry-run\ndesktop template --check    # CI: fail if template\u002F drifted\n",[230,1289,1290,1297,1302,1309,1319],{"__ignoreMap":253},[257,1291,1292,1294],{"class":259,"line":260},[257,1293,264],{"class":263},[257,1295,1296],{"class":267}," template:sync\n",[257,1298,1299],{"class":259,"line":472},[257,1300,1301],{"class":271},"# or\n",[257,1303,1304,1306],{"class":259,"line":482},[257,1305,232],{"class":263},[257,1307,1308],{"class":267}," template\n",[257,1310,1311,1313,1316],{"class":259,"line":489},[257,1312,232],{"class":263},[257,1314,1315],{"class":267}," template",[257,1317,1318],{"class":267}," --dry-run\n",[257,1320,1321,1323,1325,1328],{"class":259,"line":495},[257,1322,232],{"class":263},[257,1324,1315],{"class":267},[257,1326,1327],{"class":267}," --check",[257,1329,1330],{"class":271},"    # CI: fail if template\u002F drifted\n",[294,1332,1334,1335,1337],{"id":1333},"monorepo-pnpm-scripts","Monorepo ",[230,1336,264],{}," scripts",[223,1339,1340,1341,1346],{},"These wrap the same tooling from the ",[1260,1342,1345],{"href":1343,"rel":1344},"https:\u002F\u002Fgithub.com\u002Fowdproject\u002Fclient",[1264],"client"," root:",[311,1348,1349,1358],{},[314,1350,1351],{},[317,1352,1353,1356],{},[320,1354,1355],{},"Script",[320,1357,841],{},[327,1359,1360,1375,1387,1398,1410,1425,1442,1458,1471],{},[317,1361,1362,1369],{},[332,1363,1364],{},[227,1365,1366],{},[230,1367,1368],{},"pnpm dev",[332,1370,1371,1374],{},[230,1372,1373],{},"nx run desktop:serve"," — reference desktop",[317,1376,1377,1384],{},[332,1378,1379],{},[227,1380,1381],{},[230,1382,1383],{},"pnpm generate",[332,1385,1386],{},"Production build of reference desktop",[317,1388,1389,1395],{},[332,1390,1391],{},[227,1392,1393],{},[230,1394,291],{},[332,1396,1397],{},"Control panel \u002F CLI",[317,1399,1400,1407],{},[332,1401,1402],{},[227,1403,1404],{},[230,1405,1406],{},"pnpm prepare:stubs",[332,1408,1409],{},"Stub-build kits, apps, themes",[317,1411,1412,1419],{},[332,1413,1414],{},[227,1415,1416],{},[230,1417,1418],{},"pnpm prepare:modules",[332,1420,1421,1422,1424],{},"Stubs + ",[230,1423,1096],{}," on packages\u002Fapps\u002Fthemes",[317,1426,1427,1434],{},[332,1428,1429],{},[227,1430,1431],{},[230,1432,1433],{},"pnpm prepare:apps",[332,1435,1436,1438,1439],{},[230,1437,1096],{}," for ",[230,1440,1441],{},"apps\u002F*",[317,1443,1444,1451],{},[332,1445,1446],{},[227,1447,1448],{},[230,1449,1450],{},"pnpm prepare:themes",[332,1452,1453,1438,1455],{},[230,1454,1096],{},[230,1456,1457],{},"themes\u002F*",[317,1459,1460,1467],{},[332,1461,1462],{},[227,1463,1464],{},[230,1465,1466],{},"pnpm template:sync",[332,1468,1469],{},[230,1470,1271],{},[317,1472,1473,1480],{},[332,1474,1475],{},[227,1476,1477],{},[230,1478,1479],{},"pnpm validate:modules",[332,1481,1482],{},[230,1483,1007],{},[294,1485,1487],{"id":1486},"prerequisites","Prerequisites",[1489,1490,1491,1501,1511],"ul",{},[1492,1493,1494,1496,1497,1500],"li",{},[227,1495,264],{}," at the version in the repo ",[230,1498,1499],{},"packageManager"," field",[1492,1502,1503,1504,1166,1509],{},"Desktop project with ",[227,1505,1506],{},[230,1507,1508],{},"nuxt.config.ts",[230,1510,543],{},[1492,1512,1513,1517],{},[227,1514,1515],{},[230,1516,147],{}," beside the Nuxt root",[223,1519,1520,1521,1525,1526,549],{},"Manual install (no CLI): add the package with pnpm\u002Fnpm, then edit ",[227,1522,1523],{},[230,1524,147],{}," — see ",[1260,1527,137],{"href":138},[1529,1530,1531],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":253,"searchDepth":472,"depth":472,"links":1533},[1534,1535,1536,1537,1544,1547,1549,1551],{"id":296,"depth":472,"text":297},{"id":449,"depth":472,"text":452},{"id":552,"depth":472,"text":555},{"id":597,"depth":472,"text":600,"children":1538},[1539,1540,1542,1543],{"id":675,"depth":482,"text":676},{"id":736,"depth":482,"text":1541},"Install sources (--from)",{"id":828,"depth":482,"text":829},{"id":957,"depth":482,"text":958},{"id":1004,"depth":472,"text":1007,"children":1545},[1546],{"id":1119,"depth":482,"text":1120},{"id":1268,"depth":472,"text":1548},"desktop template (maintainers)",{"id":1333,"depth":472,"text":1550},"Monorepo pnpm scripts",{"id":1486,"depth":472,"text":1487},"pnpm desktop — control panel, dev, add, validate, init, template.","md",null,{},{"icon":128},{"title":133,"description":1552},"kwl0cUFB8DG_nAZKipQKptnTemO39mmT11iTdVsngBo",[1560,1562],{"title":122,"path":123,"stem":124,"description":1561,"icon":125,"children":-1},"DesktopWindowNavButton, nav-append-inner, and title-bar slots every theme must implement.",{"title":137,"path":138,"stem":139,"description":1563,"icon":140,"children":-1},"How to wire @owdproject\u002F* dependencies with npm, pnpm workspace, or Git — and avoid common install failures.",1782171656841]