Client & CLI

Monorepo and workspace

pnpm workspace layout, root scripts, and how the client repo is organized.

The official client repository is a pnpm + Nx monorepo. Use it when you work on @owdproject/core, kits, or the reference desktop/ demo with workspace:* linking.

For how to wire dependencies (npm vs workspace:* vs Git), read Package linking first — most install failures come from a mismatch there.

Workspace members

pnpm-workspace.yaml includes:

GlobContents
desktop/Reference Nuxt shell (pnpm run dev target).
packages/*@owdproject/core, @owdproject/kit-theme, @owdproject/kit-fs, @owdproject/kit-explorer, @owdproject/nx, …
apps/*App modules when cloned locally (gitignored by default).
themes/*Theme modules when cloned locally (gitignored by default).
plugins/*Optional Nx/plugin extensions.

Not in packages/ (external npm modules):

  • @owdproject/module-fs — virtual filesystem (ZenFS).
  • @owdproject/module-persistence — optional Pinia persistence.

Install them with desktop add module-fs and list them in desktop.config.tsmodules. They are documented as extension modules, not vendored core packages.

Root scripts

ScriptPurpose
pnpm run devStarts desktop/ via Nx (desktop:serve).
pnpm run prepare:stubsStub-builds kit packages and any workspace themes/apps that use nuxt-module-build.
pnpm run prepare:modulesprepare:stubs + dev:prepare on packages/apps/themes (--if-present).
pnpm run prepare:themesTheme dev:prepare only.
pnpm run validate:modulesRuns desktop validate across the workspace.
pnpm desktopCore CLI (add, validate, template, …).
pnpm template:syncRefresh template/ from the core blueprint.

After changing source of a publishable module (not just stubs), run prepack / nuxt-module-build build before testing consumers that import dist/module.mjs.

Lockfile

Commit pnpm-lock.yaml at the repo root for reproducible CI. Re-run pnpm install after removing workspace packages or changing workspace:* entries so ghost importers disappear from the lockfile.

Cloning themes and apps locally

/themes and /apps are gitignored in the client repo so you can:

git clone https://github.com/owdproject/theme-nova.git themes/theme-nova
pnpm install
pnpm run prepare:stubs

Each nested repo keeps its own Git history. Prefer workspace:* for @owdproject/core and kits when the folder sits under the workspace globs; use npm semver for @owdproject/core inside standalone theme repos.