Open Data Ensemble (ODE) is an open-source platform for mobile data collection and synchronization.
This monorepo contains all the core components of ODE, the members of our ensemble. Together they provide an offline-first solution for field data collection that works across mobile devices, the desktop and the web.
Formulus is the mobile app that field teams use to collect data. It works fully offline, syncs with your Synkronus server when a connection is available, and can hold several projects on one device.
Formulus is available on F-Droid, the App Store and Google Play, and as an APK from GitHub Releases.
This repository houses the core components plus the public documentation site:
A React Native project containing the Android and iOS apps. Formulus is the mobile data collection client, designed for field work and offline-first data gathering.
A React web application responsible for rendering JSON forms and communicating with the Formulus mobile app. It provides the form interface used during data collection, including built-in controls such as format: sub-observation (embedded child rows). Author-facing documentation: Custom extensions on opendataensemble.org.
The server component, written in Go. It handles authentication, data synchronization and storage for the whole platform.
A command-line utility to interact with the Synkronus server. Use it to manage custom app data, handle user administration, export data to Parquet format, and perform other administrative tasks.
Install the CLI with one of these commands:
irm https://raw.githubusercontent.com/OpenDataEnsemble/ode/main/scripts/install-synkronus-cli.ps1 | iexcurl -fsSL https://raw.githubusercontent.com/OpenDataEnsemble/ode/main/scripts/install-synkronus-cli.sh | bashLicense note: this component is currently GPL-2.0-or-later (see synkronus-cli/LICENSE) while the QR PNG stack depends on GPL-classified libraries. We plan to swap in a stdlib-only renderer and return the CLI to MIT. See THIRD_PARTY_NOTICES.md.
A web-based admin interface for Synkronus. It covers the same tasks as synkronus-cli in the browser.
ODE Desktop, a Tauri app for managing collected data and for building and testing forms and custom apps.
The public documentation site (Docusaurus), published at opendataensemble.org. It is an independent npm project inside this monorepo. See docs/README.md.
ODE is a young open-source project, and we welcome contributors of all experience levels and interests, including:
- Software Development (React Native, React, Go, TypeScript)
- Documentation (helping others understand and use ODE)
- Implementation (deploying, testing, real-world usage)
- Community Building (fostering collaboration and growth)
- UI/UX Design (making data collection easier to use)
- Data Science (improving data workflows and analytics)
For the full contribution workflow (setup, commit rules, and PR checks), read CONTRIBUTING.md.
Different perspectives and skills make the project stronger. If you are new to open source, or think your skills are not "technical enough", there is still a place for you here.
Getting started:
- Browse the issues to find something that interests you
- Join the discussions to share ideas
- Improve documentation where you see gaps
- Test the platform and report your experience
- Share how you're using ODE in your work
This monorepo uses GitHub Actions for CI/CD. For details (trigger conditions, tags, and workflows), see .github/CICD.md.
- Synkronus Docker build & publish:
.github/workflows/synkronus-docker.yml - Formulus Android build (includes Formplayer asset build):
.github/workflows/formulus-android.yml - Documentation site:
.github/workflows/docs.yml(validates PRs; deploys fromdev) - Synkronus deployment docs:
synkronus/DOCKER.md,synkronus/DEPLOYMENT.md
ODE enforces consistent formatting and linting for the frontend projects both locally and in CI.
- Run linting:
cd formulus && pnpm run lint - Run linting with auto-fix:
cd formulus && pnpm run lint:fix - Format code:
cd formulus && pnpm run format - Check formatting (no writes):
cd formulus && pnpm run format:check
- Run linting:
cd formulus-formplayer && pnpm run lint - Run linting with auto-fix:
cd formulus-formplayer && pnpm run lint:fix - Format code:
cd formulus-formplayer && pnpm run format - Check formatting (no writes):
cd formulus-formplayer && pnpm run format:check
In the main CI workflow:
- For
formulus:- Runs
pnpm run lintafter install and before tests.
- Runs
- For
formulus-formplayer:- Runs
pnpm run lint,pnpm run format:check, then tests and build.
- Runs
CI will fail if:
- ESLint finds errors, or
- Prettier formatting checks fail (unformatted files).
The repository root is MIT. synkronus-cli is GPL-2.0-or-later until the QR dependency cleanup above is done. Third-party and mixed-component details: THIRD_PARTY_NOTICES.md.
Questions, ideas or feedback are welcome:
- Community forum: forum.opendataensemble.org
- GitHub: issues and discussions
- Email: hello@opendataensemble.org







