ODE Desktop Development
Complete guide for developing ODE Desktop from the ODE monorepo.
Prerequisites
- Node.js 20+ and pnpm 10+
- Rust toolchain (rustup)
- Platform build tools per Tauri 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
| Script | Purpose |
|---|---|
pnpm dev | Vite dev server (frontend only) |
pnpm build | Typecheck + Vite production build |
pnpm build:formplayer | Build formulus-formplayer and copy into public/formplayer_dist/ |
pnpm build:tauri | Prepare Formplayer assets, then build the desktop frontend |
pnpm tauri build | Full desktop bundle (runs build:tauri first) |
pnpm tauri dev | Development with hot reload in the Tauri shell |
pnpm lint / pnpm lint:fix | ESLint |
pnpm format / pnpm format:check | Prettier |
pnpm test | Vitest unit and component tests |
pnpm typecheck | tsc --noEmit |
pnpm copy:formplayer | Copy 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:
- Update
formulus/src/webview/FormulusInterfaceDefinition.ts(source of truth). - Run
pnpm run sync-interfaceinformulus-formplayer. - Rebuild and copy:
pnpm run build:copyfromformulus-formplayer/, orpnpm build:formplayerfromdesktop/.
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:
- ODE Desktop developer mode — user guide
- ODE Desktop reference —
bundles/dev-local/paths and bridge behavior
Project layout
| Path | Role |
|---|---|
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.js | Bridge injection for custom app and form preview |
Contributing
- Follow Conventional Commits
- Run
pnpm lint,pnpm format:check, andpnpm testbefore pushing - PRs touching
desktop/**trigger the ODE Desktop GitHub Actions workflow
Related documentation
- ODE Desktop reference — component overview
- Installing ODE Desktop
- Formplayer development
- Building and testing