Skip to main content

ODE Desktop Development

Complete guide for developing ODE Desktop from the ODE monorepo.

Prerequisites

Install shared design tokens before the desktop package:

cd packages/tokens && pnpm install && pnpm run build && cd ../..

Local development setup

cd desktop
pnpm install
pnpm tauri dev

pnpm tauri dev opens the Tauri desktop window with the Rust backend. Do not use a regular browser at http://localhost:1420 — IPC commands such as invoke only work inside the Tauri shell.

For frontend-only work without Tauri IPC:

pnpm dev

This starts the Vite dev server only; most Data management and Workbench features require pnpm tauri dev.

Scripts

ScriptPurpose
pnpm devVite dev server (frontend only)
pnpm buildTypecheck + Vite production build
pnpm build:formplayerBuild formulus-formplayer and copy into public/formplayer_dist/
pnpm build:tauriPrepare Formplayer assets, then build the desktop frontend
pnpm tauri buildFull desktop bundle (runs build:tauri first)
pnpm tauri devDevelopment with hot reload in the Tauri shell
pnpm lint / pnpm lint:fixESLint
pnpm format / pnpm format:checkPrettier
pnpm testVitest unit and component tests
pnpm typechecktsc --noEmit
pnpm copy:formplayerCopy existing formulus-formplayer/build/ into public/formplayer_dist/

From formulus-formplayer/, pnpm run build:copy builds formplayer and copies assets to Formulus and ODE Desktop in one step.

Rust backend

cd desktop/src-tauri
cargo test
cargo fmt
cargo clippy

Formplayer integration

ODE Desktop embeds the same formplayer bundle as Formulus. Production builds copy formplayer into public/formplayer_dist/.

After changing formplayer or the Formulus bridge contract:

  1. Update formulus/src/webview/FormulusInterfaceDefinition.ts (source of truth).
  2. Run pnpm run sync-interface in formulus-formplayer.
  3. Rebuild and copy: pnpm run build:copy from formulus-formplayer/, or pnpm build:formplayer from desktop/.

OpenAPI client

The desktop app regenerates a TypeScript Synkronus client from synkronus/openapi/synkronus.yaml:

cd desktop
pnpm codegen:synk-client

CI fails if the generated client does not match the OpenAPI spec.

Developer mode (user-facing)

To test a local custom app build against a profile workspace, use Workbench developer mode. See:

Project layout

PathRole
desktop/src/React UI (pages, components, store)
desktop/src-tauri/Rust backend (SQLite, sync, bundle apply, dev mirror)
desktop/public/formplayer_dist/Embedded formplayer bundle
desktop/public/formulus-injection.jsBridge injection for custom app and form preview

Contributing

  • Follow Conventional Commits
  • Run pnpm lint, pnpm format:check, and pnpm test before pushing
  • PRs touching desktop/** trigger the ODE Desktop GitHub Actions workflow