Skip to content

Releases: OpenDataEnsemble/ode

v1.4.0

Choose a tag to compare

@r0ssing r0ssing released this 01 Oct 17:25
ab6898b

ODE v1.4.0

This release brings two major additions to ODE, alongside a broad set of improvements across Formulus, FormPlayer, ODE Desktop, documentation, security, and developer tooling.

Multiple profiles in Formulus

Formulus can now manage multiple profiles on the same device, each with its own custom app and Synkronus connection.

This makes it much easier to use one device across different projects, studies, deployments, or environments without repeatedly reconfiguring Formulus. Profiles can be created and switched directly from within the app.

First-class support for AI agents in ODE Desktop

ODE Desktop now exposes ODE directly to AI agents through two complementary interfaces:

  • a rich command-line interface for working with ODE data and functionality
  • a local MCP server, allowing MCP-compatible agents and development environments to interact with ODE natively

This is an important first step toward making ODE not just a tool people use directly, but also a platform that AI-assisted workflows can safely build upon. You can control what your local AI agents have access to from within the profile settings in ODE Desktop:
image

And, most importantly: the community

This release also includes contributions from a growing number of new contributors across Formulus, FormPlayer, ODE Desktop, documentation, testing, CI and release tooling.

A huge thank you to everyone who contributed code, testing, documentation, reviews, ideas, and time. The people contributing to ODE are what make the community worth our combined effort.

Welcome to all our new contributors, and thank you for helping make ODE better ❤️

What's Changed

  • chore(release): prepare v1.3.3 alpha by @r0ssing in #844
  • fix(formulus): Optimized camera handling by @r0ssing in #901
  • ci(release): prepare next Formulus build code by @r0ssing in #902
  • chore(release): reserve next Formulus build code by @r0ssing in #903
  • chore(release): reserve next Formulus build code by @github-actions[bot] in #904
  • ci: limit renovate PR count and enable versionCode bump on release by @r0ssing in #905
  • feat: improved security hardening by @r0ssing in #906
  • fix(formulus): clear repository generation on server switch by @r0ssing in #914
  • fix(formulus): make app-bundle install atomic and surface low-storage… by @r0ssing in #919
  • fix(formulus): restore iOS permissions, iPad and iPhone layout by @r0ssing in #922
  • docs: add root CONTRIBUTING.md for new contributors by @IamLRBA in #923
  • fix(pr-template): trim PR template to essential sections by @IamLRBA in #924
  • fix(formulus): Play compliance with SAF media picker and 16 KB page-size enforcement by @najuna-brian in #925
  • fix(docs): strip emojis and AI-isms from documentation by @IamLRBA in #928
  • fix: grant permissions to Formulus build code workflow by @allennakalema06-web in #929
  • feat(formulus): add profiles with in-app switching by @Ndacyayisenga-droid in #931
  • fix(formplayer): localize progress bar navigation labels by @Lemeri123 in #932
  • test: guard Formulus interface version drift by @kingmakeruix in #935
  • fix(desktop): map view marker colours by @r0ssing in #934
  • fix(formulus): make tables responsive on small screens by @allennakalema06-web in #930
  • fix(formulus): improve UX for creating and switching profiles by @r0ssing in #937
  • chore(release): reserve next Formulus build code by @github-actions[bot] in #936
  • docs: migrate the documentation site into the monorepo by @najuna-brian in #939
  • chore(release): reserve next Formulus build code by @github-actions[bot] in #938
  • chore(release): v1.3.3 dev->main merge by @r0ssing in #940
  • fix(formulus): defer QR camera binding until provider is ready by @r0ssing in #941
  • fix(desktop): export not copying attachments from nested observation data by @r0ssing in #949
  • chore(release): reserve next Formulus build code by @github-actions[bot] in #942
  • feat(desktop): add local AI agent support by @r0ssing in #952
  • chore(release): reserve next Formulus build code by @github-actions[bot] in #951
  • docs(development): add a code map for one observation's journey by @kingmakeruix in #947
  • fix(desktop): honor includeDeleted in observation queries by @sarahmirembe592 in #944
  • perf(desktop): index deleted observations by @r0ssing in #954
  • chore: Prepare v1.4.0 release by @r0ssing in #955
  • chore: v1.4.0 dev -> main by @r0ssing in #956

New Contributors

Full Changelog: v1.3.2...v1.4.0

v1.3.2

Choose a tag to compare

@r0ssing r0ssing released this 01 Sep 15:38
c04cdb6

What's Changed

  • fix(ios): Applied explicit UTF-8 encoding to placerholder by @cstaerk in #744
  • fix(formulus): patch RNFS reject to stop attachment-download crashes by @r0ssing in #747
  • fix(ios): Adjusted app icon by @cstaerk in #745
  • fix(desktop): Fixing generational issue in Desktop by @r0ssing in #748
  • fix(formulus): ship universal APK on GitHub releases by @r0ssing in #749
  • feat(formulus): adaptive sync paging by @r0ssing in #750
  • chore: docs update by @r0ssing in #751
  • fix(formulus): align Android release packaging and version codes by @r0ssing in #783
  • feat: Release prep 1.3.2 by @r0ssing in #818
  • chore: v1.3.2 by @r0ssing in #819

Full Changelog: v1.3.1...v1.3.2

v1.3.1

Choose a tag to compare

@r0ssing r0ssing released this 26 Aug 09:53
f6f3e10

v1.3.1 - Formulus on Apple App Store

Main updates:

  • Formulus is now available for iOS on the Apple app store!
  • Better performance and memory handling in Formulus
  • Packages and build tooling updated

What's Changed

  • feat(ios): Added dark icon by @cstaerk in #731
  • fix(ios): update app icon by @IamLRBA in #732
  • feat(formulus): Updated Grant Permission button title for App Store compliance by @cstaerk in #730
  • feat(formplayer): updated performance and memory handling by @r0ssing in #733
  • fix(formulus): build pipeline fixes after pnpm upgrade by @r0ssing in #739
  • fix(formulus): hoist buffer for release Metro and speed up Android CI by @r0ssing in #740
  • fix(formulus): hoist hermes-compiler for release Hermes bundling by @r0ssing in #741
  • v1.3.1 prep by @r0ssing in #742

Full Changelog: v1.3.0...v1.3.1

v1.3.0

Choose a tag to compare

@r0ssing r0ssing released this 21 Aug 06:26
877d7a6

ODE v1.3.0

This release brings Formulus to iOS beta, adds import/export improvements to ODE Desktop, and makes syncing, diagnostics, and everyday data handling smoother across ODE.

Highlights

  • Formulus for iOS is now in beta testing. iPhone users can try it by installing TestFlight from Apple and then joining the Formulus beta.
  • Import & export in ODE Desktop — new export functionality and improved data imports.
  • Faster, more robust sync across ODE Desktop and Formulus on Android and iOS.
  • Better forensics support in Formulus, including a new Export logfile option.
  • Improved Formulus UI with more compact and consistent Observation and Form tables.
  • Richer analytics in ODE Desktop, with maps added to basic analytical charts.
  • Smarter sub-observation sorting, automatically sorting numerically or alphabetically based on the column type.
  • Bug fixes, including decimal values incorrectly exporting as NA and index rebuilding being skipped after a sync rollback.

Full Changelog: v1.2.0...v1.3.0

What's Changed

  • chore: backmerge main into dev by @najuna-brian in #705
  • fix: numeric fields exporting as null in parquet export by @najuna-brian in #708
  • fix(desktop): app bundle structure by @r0ssing in #706
  • feat(portal): Home page with charts.. by @r0ssing in #709
  • fix(formplayer): Updated sub-observation table sort to use numerical … by @r0ssing in #710
  • fix(formplayer): Clear fields on hide (cascading) by @r0ssing in #711
  • feat(formplayer): Better display of validation errors on finalize screen by @r0ssing in #712
  • feat(formulus): Fix IOS startup by @cstaerk in #714
  • fix(desktop): Fix issue with injected dev scripts by @cstaerk in #715
  • chore(deps): update dependency typescript-eslint to v8.66.0 by @renovate[bot] in #686
  • fix(formplayer): Fix various UI snags by @r0ssing in #717
  • feat(formulus): Added IOS metadata necessary for Apple AppStore submission by @cstaerk in #718
  • chore(deps): update actions/checkout digest to 11d5960 by @renovate[bot] in #716
  • chore(deps): update actions/setup-java digest to cf277c6 by @renovate[bot] in #719
  • chore(deps): enable Renovate automerge for patch and digest updates by @Ndacyayisenga-droid in #721
  • chore: release prep for v1.2.1 by @r0ssing in #713
  • feat(desktop): Add export functionality by @r0ssing in #722
  • fix: More robust index building after sync by @r0ssing in #723
  • feat(formulus): add log viewer to Help&Support by @r0ssing in #724
  • fix(formulus): Include bundled sqlite package (jsi) by @r0ssing in #725
  • chore: prep for v1.3.0 by @r0ssing in #726

New Contributors

Full Changelog: v1.2.0...v1.3.0

v1.2.0 - Young Ossicone

Choose a tag to compare

@najuna-brian najuna-brian released this 15 Jul 19:40
bddd355

ODE v1.2.0 - Young Ossicone

Next minor release in the Young Ossicone (1.x) line.

This release brings internationalization, richer form question types, stronger ODE Desktop workflows, and smoother Formulus onboarding for admins.

Highlights

Internationalization

  • i18n support across Formulus and formplayer
  • Separate UI language and forms language selectors

Formplayer question types

  • Built-in Likert scale (buttons, radio, slider, numeric, stars, emoji)
  • Built-in Duration / timer questions
  • Better label-only screen counting and form UX fixes

ODE Desktop

  • Import UI enhancements, observations overview with charts and map
  • Dimension selector for custom app and form previews
  • Accordion panels on the observation editor
  • App bundle upload
  • Bundle handling / stability improvements
  • UI language selection fixes and clearer messaging
  • Version bump to v1.2.0

Portal & Formulus onboarding

  • One-time Formulus onboarding QR for secure handoff of credentials

Formulus

  • Keyboard re-popping limited during text editing

Full changelog (since v1.1.1)

  • feat(desktop): improved bundle handling, stability by @r0ssing in #689
  • fix(formulus): Limiting keyboard re-popping up during text editing by @r0ssing in #688
  • feat(formulus): Add support for i18n in formulus and formplayer by @r0ssing in #690
  • fix(formplayer): include non-input elements in counts by @r0ssing in #691
  • feat(formplayer): Likert scale and duration question types by @najuna-brian in #695
  • feat(formulus): Split language selector into UI and forms by @r0ssing in #696
  • feat(desktop): Various UI enhancements related to Import by @r0ssing in #697
  • feat(desktop): Dimension selector for previews by @r0ssing in #698
  • fix(desktop): fixing ui language selection by @r0ssing in #699
  • feat(desktop): Accordion panels on obs editor by @r0ssing in #700
  • feat(portal): show one-time Formulus onboarding QR by @najuna-brian in #701
  • feat(desktop): Update messages and bump version to v1.2.0 by @r0ssing in #702
  • feat(desktop): Add app_bundle upload functionality by @r0ssing in #703
  • chore: release v1.2.0 by @r0ssing in #704

Full Changelog: v1.1.1...v1.2.0

v1.1.1

Choose a tag to compare

@r0ssing r0ssing released this 24 Jun 16:44
4bec898

What's Changed

  • fix(formulus): Minor UX fixes by @r0ssing in #659
  • feat(formulus): Various bugfixes to formulus and desktop by @r0ssing in #660
  • fix(packages): Fix CycloneDB action error by updating package lockfile by @r0ssing in #661
  • feat(formulus): Prep for v1.1.1 by @r0ssing in #662
  • fix(desktop): update dekstop API implementation by @r0ssing in #663
  • fix(formulus): Autonumbering implementation by @r0ssing in #664
  • fix(formplayer): Add support for more layout options, and make ODE De… by @r0ssing in #665
  • fix(formplayer): prevent re-revealing of input fields by @r0ssing in #666
  • fix(formplayer): Improved number input UX by @r0ssing in #667
  • chore(deps): update dependency @react-native-community/cli to v20.1.3 by @renovate[bot] in #642
  • chore(deps): update Babel dependencies to version 7.29.7 by @r0ssing in #670
  • chore(deps): update dependency @react-native/typescript-config to v0.86.0 by @renovate[bot] in #430
  • chore(deps): update dependency baseline-browser-mapping to v2.10.38 by @renovate[bot] in #432
  • chore(deps): update material-ui monorepo by @renovate[bot] in #434
  • chore(deps): update dependency @react-native-community/cli-platform-android to v20.1.3 by @renovate[bot] in #668
  • chore(deps): update babel monorepo by @renovate[bot] in #641
  • chore(deps): update dependency react-native-safe-area-context to v5.8.0 by @renovate[bot] in #436
  • chore(deps): pin dependencies by @renovate[bot] in #669
  • chore(deps): update react-native-safe-area-context to v5.8.0 and impr… by @r0ssing in #671
  • chore(deps): update dependency concurrent-ruby to '< 1.3.8' by @renovate[bot] in #673
  • chore(deps): update dependency @react-native-community/cli-platform-ios to v20.1.3 by @renovate[bot] in #672
  • feat(synkronus-cli): enhance login command for non-interactive use in CI/CD by @r0ssing in #674
  • chore(renovate): disable lockFileMaintenance by @r0ssing in #677
  • feat(ode): Prep v1.1.1 by @r0ssing in #687

Full Changelog: v1.1.0...v1.1.1

v1.1.0

Choose a tag to compare

@r0ssing r0ssing released this 17 Jun 22:25
0ea55bd

ODE v1.1.0

This release introduces ODE Desktop, major improvements to the Formulus user experience, richer form capabilities, and a range of synchronization, API, and platform enhancements across the ODE ecosystem.

🦒 Highlights

New band member: ODE Desktop

image
  • Desktop application for working with ODE projects and data.
  • Developer mode for much improved DX for custom_app developers
  • Essential for data cleaning tasks
  • Improved data import workflows and validation.
  • Enhanced synchronization capabilities.
  • Significant UI and UX improvements.

Improved Formulus Experience

  • Modernized mobile user interface.
  • Redesigned app bundle synchronization experience.
  • More accurate sync progress and clearer sync status reporting.
  • Improved keyboard handling and form usability on mobile devices.
  • Better attachment handling and synchronization.

Expanded Form & Media Support

  • Support for audio, video and generic file inputs.
  • Improved photo capture and media workflows.
  • In-form GPS capture.
  • First-class support for sub-observations, including configurable labels.
  • Shared choice schema loading and resolution.

Enhanced API & Integration Capabilities

  • New WebView bridge APIs.
  • File URL bridge support.
  • Improved generated API clients and API consistency.
  • Repository generation and administration improvements.

🔄 Synchronization & Reliability

  • More resilient synchronization and upload handling.
  • Improved handling of slow or unstable network connections.
  • Better conflict prevention and duplicate upload protection.
  • Synchronization improvements across mobile, desktop, and server components.

⚡ Performance & Data Management

  • Support for database indexes and more performant queries.
  • Observation query improvements.
  • Improved import and validation performance.
  • Better handling of large datasets and attachments.

Platform & Distribution

  • Full support for both Google Play and F-Droid releases.
  • Improved FOSS/F-Droid compatibility. ODE ❤️ F-Droid - the preferred app store
  • Multi-architecture builds and packaging improvements.
  • Enhanced CI/CD and release automation.
  • Beta-release in google pray store 💩 for registered beta testers with validated google accounts and a liberal concept of privacy

Other Improvements

  • Last-seen tracking in Synkronus.
  • Improved version handling and update detection.
  • Numerous bug fixes, stability improvements, dependency updates, and documentation enhancements.

v1.0.0 - Young Ossicone

Choose a tag to compare

@r0ssing r0ssing released this 22 Mar 18:59
da88b01

ODE v1.0.0 - Young Ossicone

hello

We’re excited to introduce the first stable release of Open Data Ensemble (ODE) — a flexible toolkit for building and running custom data collection solutions.

ODE lets you define your own instruments, collect data across devices, and keep everything in sync with minimal setup.


ensemble2

🚀 Highlights

  • Modular suite: mobile app, backend, and CLI
  • Offline-first data collection with sync
  • Custom app support (HTML + JavaScript)
  • Simple deployment (Docker-based backend)
  • Quick start in under 10 minutes

Getting Started

gettingstart

You can have your own Synkronus server running in under 10 minutes.

Find our Quick Start install guide here

We also include a simple demo showing how to build a longitudinal custom_app to get you started quickly.

Find our 'first app' tutorial here


🧩 Components

Synkronus

A lightweight server component for synchronization and management.

  • Distributed as a Docker image
  • User management (admin, read-write, read-only)
  • Manage and serve your custom_app
  • Data export capabilities
  • Built-in web interface

Formulus

Mobile app for running forms and collecting observations.

  • JSONForms-based questionnaires
  • Offline-first data collection
  • Bi-directional sync with Synkronus
  • API available to your custom_app

Synkronus CLI

Command-line utility for automation and server interaction.

  • Deploy forms and custom_app versions
  • Scriptable workflows
  • Ideal for CI/CD pipelines

❤️ Thanks

This release would not have been possible without the incredible community around ODE.
The energy, feedback, and contributions have been amazing.

ensemble

🔗 Links