Apps

Build and publish

nuxt-module-build, dist, npm publishing, and desktop validate for OWD apps.

Local build

From the app package root:

pnpm run prepack
# or, for stub during development:
pnpm run dev:prepare
  • prepack runs nuxt-module-build builddist/module.mjs + types.
  • dev:prepare — stub + playground nuxt prepare for daily dev.

What to publish

  • files: typically ["dist"] (or ["dist", "src"] if you ship development exports — match your theme/app convention).
  • README: install via desktop add my-app, peerDependencies on @owdproject/core, minimal desktop.config.ts snippet.
  • Do not publish playground/ launch plugins — they are dev-only.

Versioning

Follow SemVer. Breaking changes to public module exports or ApplicationConfigmajor bump + changelog.

Consuming from the client monorepo

// desktop/package.json
"@owdproject/my-app": "workspace:*"
// desktop.config.ts
apps: ['@owdproject/my-app']

After editing app source:

pnpm run prepare:apps   # or app’s dev:prepare
pnpm run dev

Standalone repos should use npm semver on core — see Package linking.

Validation

desktop validate .

Runs layout and migration checks before publish. Fix errors before npm publish; warnings are recommended (launch plugin, CI, window centering).

AreaExamples
Structuresrc/module.ts, src/runtime/app.config.ts, no duplicate root runtime/
Plugin contractdefineDesktopApp, desktop-*-register name, server guard
Playgroundpackage.json depends on your package + @owdproject/core, ssr: false
Launch (optional)autoStartPlaygroundApps, no import.meta.dev guard
CIclient checkout overlay; avoid nypm alone with workspace:*

Full checklist: core PLAYGROUND.md.

Discovery

Tag the GitHub repository owd-apps.

Publishing Checklist

Follow this checklist to build, configure, and release your OWD application.

1. Preparation

  • Locales File Format: Do not use raw .json files inside src/i18n/locales/. The Nuxt Module Builder does not copy JSON assets to the dist directory by default. Instead, use .ts files (e.g., en.ts) that export a default configuration:
    export default {
      window: {
        close: "Close"
      }
    }
    
    Register them in src/module.ts like this:
    locales: [
      { code: 'en', file: 'locales/en.ts' }
    ]
    
  • Peer Dependencies: Set @owdproject/core in peerDependencies to the latest compatible version (e.g. ^3.4.0).
  • Workspace References: Keep "workspace:*" dependencies inside playground/package.json for development. pnpm publish will automatically rewrite them to matching published versions upon release.

2. Playground CI (GitHub Pages) Workflow

Since the client repository ignores other apps/themes by default, the playground CI workflow must clone the parent client repository and checkout any necessary workspace packages before overlaying the module itself.

Update .github/workflows/pages.yml in your package:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      # 1. Clone the parent client repo with recursive submodules (core, cli, nx)
      - name: Checkout OWD client (workspace deps)
        uses: actions/checkout@v4
        with:
          repository: owdproject/client
          path: client
          submodules: recursive

      # 2. Checkout any other required workspace packages
      - name: Checkout kit-tailwind
        uses: actions/checkout@v4
        with:
          repository: owdproject/kit-tailwind
          path: client/packages/kit-tailwind

      - name: Checkout kit-primevue
        uses: actions/checkout@v4
        with:
          repository: owdproject/kit-primevue
          path: client/packages/kit-primevue

      - name: Checkout module-fs
        uses: actions/checkout@v4
        with:
          repository: owdproject/module-fs
          path: client/packages/module-fs

      # 3. Overlay the current module repository
      - name: Overlay this repo
        uses: actions/checkout@v4
        with:
          path: client/apps/app-about # adjust path depending on app/theme

      # 4. Install & Generate
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: npm i -g --force corepack@latest && corepack enable

      - name: Install monorepo dependencies
        working-directory: client
        run: pnpm install --no-frozen-lockfile

      - name: Prepare and Generate
        working-directory: client/apps/app-about
        run: |
          pnpm run dev:prepare
          pnpm run dev:generate
        env:
          NUXT_APP_BASE_URL: /app-about/

3. NPM Publishing Flow

  1. Verify the module compiles locally:
    pnpm --filter "@owdproject/my-app" run prepack
    
  2. Commit and push the package changes to its repository:
    git add .
    git commit -m "chore: release 0.1.0"
    git push origin main
    
  3. Publish to NPM under the scoped registry (always specify --access public):
    pnpm --filter "@owdproject/my-app" publish --access public --no-git-checks
    

README Schema Template

Every OWD application/theme should share a consistent, high-quality README format.

<p align="center">
  <img width="160" height="160" src="https://avatars.githubusercontent.com/u/65117737?s=160&v=4" />
</p>
<h1 align="center">App Name</h1>
<h3 align="center">
  A short one-sentence subtitle describing what this package does.
</h3>

<br />

## Overview

A paragraph describing the application, its primary features, and usage details.

[Demo](https://owdproject.github.io/app-name/) · [Documentation](https://owdproject.github.io/docs/) · [Support](https://github.com/sponsors/owdproject)

## Installation

```bash
pnpm desktop add app-name

Configuration

Explain the configuration schema or properties inside desktop.config.ts:

export default defineDesktopConfig({
  apps: [
    '@owdproject/app-name'
  ]
})

License

This application is released under the MIT License.


---

## Related

- [Create from scratch](/apps/create-from-scratch)
- [Playground](/apps/playground)