feat: Add ODE Desktop Application (Tauri + React)#610
Merged
r0ssing merged 19 commits intoOpenDataEnsemble:devfrom Apr 16, 2026
Merged
feat: Add ODE Desktop Application (Tauri + React)#610r0ssing merged 19 commits intoOpenDataEnsemble:devfrom
r0ssing merged 19 commits intoOpenDataEnsemble:devfrom
Conversation
…rc and child-src directives
r0ssing
approved these changes
Apr 16, 2026
Contributor
r0ssing
left a comment
There was a problem hiding this comment.
Thanks @najuna-brian ! This will be a great addition to our data ensemble 😄
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR introduces ODE Desktop, a cross-platform desktop application built with Tauri, React, and Rust. The desktop app provides two core modes to enable field staff and form developers:
Architecture
graph TB User["👤 User<br/>(Field Staff / Form Developer)"] Desktop["🖥️ ODE Desktop<br/>(Tauri App)"] React["⚛️ React Frontend<br/>(Vite)"] Rust["🦀 Rust Backend<br/>(Tauri Commands)"] Synk["🔗 Synkronus API<br/>(OpenAPI Client)"] Formplayer["📋 Embedded Formplayer<br/>(React Native Web)"] User -->|Interacts with| Desktop Desktop --> React Desktop --> Rust React -->|HTTP/OpenAPI| Synk React -->|Loads in WebView| Formplayer Formplayer -->|Bridge Contract| React Rust -->|OS Integration| OS["🔧 OS APIs<br/>(File, Dialog, etc)"]Key Features
Technical Stack
Project Structure
Build & Deployment
Development
Production Build
CI/CD Integration
feat/add-desktop-apppushSee .github/CICD.md for workflow details.
Dependency Management
Frontend Dependencies (React + UI)
react/react-dom: UI frameworkreact-router-dom: Client-side routingzustand: Minimal state management@tauri-apps/api: Tauri IPC & plugins@tauri-apps/plugin-dialog: File/folder dialogs@tauri-apps/plugin-opener: Open external linksDevDependencies
vite/@vitejs/plugin-react: Build toolingtypescript/typescript-eslint: Type safety & lintingeslint/prettier: Code qualityvitest/@testing-library/*: Testing@openapitools/openapi-generator-cli: OpenAPI codegenAPI Integration
OpenAPI Client Generation
The desktop app auto-generates a TypeScript client from the Synkronus OpenAPI specification:
CI/CD: The
ode-desktopworkflow regenerates the client and fails the build if the repo is out of sync with the spec.Component Integration
Formplayer Embedding
The desktop app embeds the built Formplayer from
formulus-formplayer/:formulus-formplayer/build/desktop/public/formplayer_dist/<iframe src="formplayer_dist/index.html">Build chain:
Bridge Contract
The Formulus Interface Definition is the source of truth for
formulusAPIandpostMessagecommunication:formulus/src/webview/FormulusInterfaceDefinition.tsformulus-formplayerviasync-interfaceTesting
Unit & Component Tests
Test files co-located with source (e.g.,
App.test.tsxnext toApp.tsx).Code Quality
Browser & System Requirements
Windows
macOS
Linux
libgdk-pixbuf2.0-0,libssl3)Changes Summary
desktop/.github/workflows/ode-desktop.ymlworkflowChanged Packages
build:ode-desktopscript for desktop buildsSecurity & Content Security Policy (CSP)
Updated
tauri.conf.jsonCSP directives:frame-src 'self': Allow same-origin iframes (embedded formplayer)child-src 'self': Allow child content from trusted sourcesTauri Security documentation.
Deployment & Distribution
Official Releases
Published builds are attached to GitHub Releases with platform-specific artifacts:
.msiinstaller.dmg/.appbundle.AppImage/.debpackagesDevelopment Builds
For early testing or internal distribution:
Installation Script
A placeholder installer is provided at
scripts/install-ode-desktop.sh(to be wired to real release asset URLs).Breaking Changes
✅ None — Backward compatible with existing:
Desktop is an additive feature; no public APIs were modified.
Future Enhancements
Review Checklist
pnpm build:tauriandpnpm tauri buildpnpm lintpnpm testpnpm typecheckpnpm codegen:synk-clientpnpm build:formplayer && pnpm tauri buildpnpm tauri devRelated Issues & PRs
Contributors
Built with ❤️ by the ODE team.
Getting Started (For Reviewers)
Quick Test
Test Scenarios
Questions?
desktop/README.md(Architecture Pointers section)desktop/README.md(Development section)desktop/README.md(OpenAPI Client section)Merge strategy: Squash and merge to
dev(or rebase if keeping commit history).