Example aligned with app-about and common Nuxt module practice.
@owdproject/my-app/
├── package.json # exports → dist/module.mjs, prepack / dev:prepare scripts
├── tsconfig.json
├── project.json # optional Nx target
├── src/
│ ├── module.ts # defineNuxtModule
│ └── runtime/
│ ├── plugin.ts # defineDesktopApp
│ ├── app.config.ts # ApplicationConfig
│ └── components/
│ └── Window/
│ └── WindowMain.vue
├── playground/ # minimal Nuxt app to develop the module
│ ├── nuxt.config.ts # modules: ['@owdproject/core']
│ ├── desktop.config.ts # theme + apps + modules
│ ├── package.json # must list every desktop.config dependency
│ └── app/plugins/ # optional launch-*.client.ts (dev auto-open)
└── dist/ # from nuxt-module-build (omit from git if CI-only policy)
package.json fields"type": "module"exports: point to ./dist/module.mjs and generated types in dist/types.d.mts if applicable.peerDependencies: @owdproject/core in a supported range.devDependencies: nuxt, @nuxt/module-builder, @nuxt/schema, etc.dev:prepare — stub build + nuxt prepare for the playground (daily dev).prepack — release build of the module (nuxt-module-build build).src/Separates module source from the dist/ artifact required by consumers installing from npm without TypeScript sources.
A separate Nuxt folder that depends on @owdproject/core and your in-development module: test windows and hot-reload without booting the full client/desktop monorepo.
See Playground and Create from scratch.