Apps

Package layout

Recommended folder layout for an OWD app module (src, playground, dist).

Example aligned with app-about and common Nuxt module practice.

Typical tree

@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)

Key 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.
  • Scripts:
    • dev:prepare — stub build + nuxt prepare for the playground (daily dev).
    • prepack — release build of the module (nuxt-module-build build).

Why src/

Separates module source from the dist/ artifact required by consumers installing from npm without TypeScript sources.

Playground

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.