Custom app (Workbench)
Run the custom application from the active app bundle in an embedded WebView — the same integration model as Formulus.
Open Workbench → Custom app (#/workbench/custom-app).
Prerequisites
| Mode | Requirement |
|---|---|
| Normal | Download an app bundle on Bundles |
| Developer mode | Enable Developer mode and mirror a folder with index.html |
Authenticate on Profiles so the custom app can read and write observations through the Formulus bridge.
Normal mode
When developer mode is off:
- Download & apply a bundle on Bundles.
- Open Custom app — ODE Desktop loads
index.htmlfrombundles/active/app/. - Use Reload app to remount the WebView after bundle updates.
The status line shows the active bundle version and hash.
Developer mode
When developer mode is on:
- The embed loads from
bundles/dev-local/app/(your mirrored local build). - The downloaded bundle in
bundles/active/remains on disk for sync and server refresh. - After each local build, click Refresh app on Bundles or in the Workbench banner.
If the folder is missing or has no index.html, a blocking warning appears — ODE Desktop does not silently fall back to bundles/active/.
Bridge behavior
The custom app receives the same Formulus JavaScript API as on mobile (window.formulus). ODE Desktop handles postMessage bridge calls for:
- Observations (
getObservations,getObservationsByQuery,persistObservation, etc.) - Opening nested form sessions (navigates to Form preview)
- Attachment URIs where applicable
Device APIs (camera, GPS, QR, etc.) are stubbed in the desktop WebView.
Finalize flow
When the custom app submits a form through the bridge, ODE Desktop may show a Finalize dialog (same concept as Formulus) before persisting the observation locally.