When Nuxt loads @owdproject/core, the engine runs roughly this sequence:
desktop.config.ts, or legacy owd.config.ts, from the desktop rootDir.theme, apps, modules shapes; warn on keys that look like Nuxt options (not on extension keys such as fs / terminal).desktop.config.ts export → runtimeConfig.public.desktop (+ coreVersion); same reference on appConfig.desktop. Never spread onto _nuxt.options.defineDesktopApp queues.installDesktopPackage in order:thememodulesappsDesktopCore, DesktopWindow, etc.), composables, stores; client plugins (resize, app registration flush).If step 1–2 fails, bootstrap stops (fail-fast).
When the theme’s setup runs, core has already written user shell config. The theme typically:
import { defu } from 'defu'
nuxt.options.runtimeConfig.public.desktop = defu(
nuxt.options.runtimeConfig.public.desktop ?? {},
options, // module defaults
)
User values win; theme defaults fill gaps.
Themes often gate extra installs:
if (nuxt.options.modules.includes('@owdproject/module-fs')) {
await installModule('@owdproject/kit-explorer')
// theme explorer plugins / components
}
More detail: Kernel contract · Architecture overview.