Architecture

Kits and extension modules

core shell/explorer, kit-primevue, module-fs, and deprecated kits.

Core (@owdproject/core) owns the kernel and shell composables (flat runtime/composables, runtime/utils, runtime/components/Desktop/). Headless explorer APIs live in @owdproject/module-fs. PrimeVue demo UI is in @owdproject/kit-primevue.

Extension modules (npm, optional)

Installed via desktop add and listed in desktop.config.tsmodules:

PackageRole
@owdproject/module-fsVirtual filesystem (ZenFS); uses shell identity for per-user paths
@owdproject/module-persistencePinia persistence (e.g. IndexedDB)

Load order: theme → modules → apps.

Core: shell composables

Shared behaviour for all themes — no visual chrome. Auto-imported with core.

Composable / componentUse
useDesktopShellOptionsRead systemBar, startButton from appConfig.desktop
useDesktopShellIdentityGuest user, avatar, VFS userHome; auth overrides — see Shell identity
useDesktopSessionEnd session → navigate to theme start route
useWorkspaceEdgeDropDrag window to screen edge → adjacent workspace
useWindowDragHandlersEdge drop + snap while dragging
useWorkspaceOverviewLiveScaleLive DOM scale in workspace overview
useWorkspaceOverviewCaptureOverview JPEG snapshots (html2canvas optional)
DesktopWorkspaceEdgeHintsBase, DesktopWindowSnapHintsBaseHeadless hints; theme supplies slots

Import path (explicit):

import { useDesktopShellIdentity } from '@owdproject/core/runtime/composables/useDesktopShellIdentity'

@owdproject/module-fs (headless explorer)

AreaUse
useExplorerStoreExplorer selection, nav expanded keys
createExplorerFsOperationsDelete/overwrite confirm via useDesktopDialogs
createExplorerWindowMenuItemsWindow menubar model (DesktopMenuItem[])
useExplorerTabsTab strip state
useExplorerWindowExplorer shell wiring (tabs, DnD, FS ops)

With module-fs, themes build their own explorer shell (Nova, Win95, …) on top of these APIs. PV listing chrome is in kit-primevue.

@owdproject/kit-primevue

Optional — PrimeVue stack for demo themes:

  • Installs @primevue/nuxt-module
  • Client plugin: createDesktopDialogs → core DesktopDialogProvider
  • PV explorer chrome: KitPrimevue* (Workspace, Toolbar, AddressBar, …)
await installModule('@owdproject/kit-primevue')

Themes still mount styled <ConfirmDialog /> groups (delete, about, …) in their layout.

Non-PV themes skip this package and provide their own dialog implementation on DESKTOP_DIALOG_PROVIDER_KEY.

See Dialog provider.

Deprecated packages

PackageReplacement
@owdproject/kit-themeShell → core runtime/composables/; dialogs → kit-primevue
@owdproject/kit-fsHeadless → module-fs; PV UI → kit-primevue
@owdproject/kit-explorerHeadless → module-fs; PV UI → kit-primevue

Update imports to core / module-fs / kit-primevue — no Vite shims.

Typical desktop stack (PV theme)

export default defineDesktopConfig({
  theme: '@owdproject/theme-nova',
  modules: ['@owdproject/module-fs'],
  apps: ['@owdproject/app-about'],
})

Theme module.ts: installModule('@owdproject/kit-primevue') and registerThemeTailwindPath(nuxt, import.meta.url) (not kit-theme / kit-explorer).

What apps should use

  • Peers: @owdproject/core for public runtime APIs.
  • Avoid: theme components unless the app is theme-specific.