diff --git a/docs/development/installing-formulus-dev.md b/docs/development/installing-formulus-dev.md index 330f0df..1be0fb4 100644 --- a/docs/development/installing-formulus-dev.md +++ b/docs/development/installing-formulus-dev.md @@ -161,9 +161,9 @@ adb install app-debug.apk ```bash # Browse the release and download the arm64-v8a APK for most phones: -# https://github.com/OpenDataEnsemble/ode/releases/tag/v1.2.1 -# Asset names look like: formulus-v1.2.1-25-arm64-v8a-release-YYYYMMDD.apk -adb install /path/to/formulus-v1.2.1-*-arm64-v8a-release-*.apk +# https://github.com/OpenDataEnsemble/ode/releases/tag/v1.3.0 +# Asset names look like: formulus-v1.3.0-35-arm64-v8a-release-YYYYMMDD.apk +adb install /path/to/formulus-v1.3.0-*-arm64-v8a-release-*.apk ``` @@ -171,9 +171,9 @@ adb install /path/to/formulus-v1.2.1-*-arm64-v8a-release-*.apk ```powershell # Browse the release and download the arm64-v8a APK for most phones: -# https://github.com/OpenDataEnsemble/ode/releases/tag/v1.2.1 -# Asset names look like: formulus-v1.2.1-25-arm64-v8a-release-YYYYMMDD.apk -adb install "C:\path\to\formulus-v1.2.1-*-arm64-v8a-release-*.apk" +# https://github.com/OpenDataEnsemble/ode/releases/tag/v1.3.0 +# Asset names look like: formulus-v1.3.0-35-arm64-v8a-release-YYYYMMDD.apk +adb install "C:\path\to\formulus-v1.3.0-*-arm64-v8a-release-*.apk" ``` diff --git a/docs/getting-started/architecture-overview.md b/docs/getting-started/architecture-overview.md index 33aca53..87c4bb5 100644 --- a/docs/getting-started/architecture-overview.md +++ b/docs/getting-started/architecture-overview.md @@ -6,7 +6,7 @@ sidebar_position: 1 ODE (Open Data Ensemble) is a comprehensive platform for mobile data collection and synchronization. This guide explains the core architecture and components. -> **Current ODE release:** [v1.1.1](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.1.1) +> **Current ODE release:** [v1.3.0](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.3.0) ## Core Components diff --git a/docs/getting-started/faq.md b/docs/getting-started/faq.md index 2d8a4b9..8f9169c 100644 --- a/docs/getting-started/faq.md +++ b/docs/getting-started/faq.md @@ -6,7 +6,7 @@ sidebar_position: 5 Common questions about ODE installation, usage, and development. -> **Current ODE release:** [v1.1.1](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.1.1) (Synkronus container, Formulus APK, Desktop, Portal) +> **Current ODE release:** [v1.3.0](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.3.0) (Synkronus container, Formulus APK, Desktop, Portal) ## General Questions diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md index c907e72..abff6ca 100644 --- a/docs/getting-started/installation.md +++ b/docs/getting-started/installation.md @@ -17,7 +17,7 @@ Install the server first so that the client has something to connect to. Then in ## For IT / infrastructure teams -Hosting Synkronus for a study? See **[Server Architecture for IT](/docs/guides/server-architecture-for-it)** for a one-page overview: container layout, TLS, backups, and how custom apps (app bundles) relate to the server. Current platform release: **v1.1.1**. +Hosting Synkronus for a study? See **[Server Architecture for IT](/docs/guides/server-architecture-for-it)** for a one-page overview: container layout, TLS, backups, and how custom apps (app bundles) relate to the server. Current platform release: **v1.3.0**. ## Next steps diff --git a/docs/getting-started/installation/installing-formulus.md b/docs/getting-started/installation/installing-formulus.md index 435ec61..50af4a8 100644 --- a/docs/getting-started/installation/installing-formulus.md +++ b/docs/getting-started/installation/installing-formulus.md @@ -12,7 +12,7 @@ Formulus is available for Android devices through multiple installation methods. - **Obtainium** (Recommended) - Installs Formulus from GitHub releases with automatic updates. Install Obtainium via F-Droid or direct download. - **F-Droid** - Install Formulus directly from [F-Droid](https://f-droid.org/packages/org.opendataensemble.formulus/) -- **Direct APK** - Download and install the APK file directly from [GitHub releases](https://github.com/OpenDataEnsemble/ode/releases) (current: **v1.1.1**) +- **Direct APK** - Download and install the APK file directly from [GitHub releases](https://github.com/OpenDataEnsemble/ode/releases) (current: **v1.3.0**) - **Development Build** - For developers who want to build from source ## System Requirements @@ -86,7 +86,7 @@ You have two options to install Obtainium: ![Obtainium Add App Screen](/img/installation/obtainium-add-app.png) -**Stable release:** Install **v1.2.1** (or the latest [GitHub release](https://github.com/OpenDataEnsemble/ode/releases)). Pre-release toggles are only needed for alpha/beta testing. +**Stable release:** Install **v1.3.0** (or the latest [GitHub release](https://github.com/OpenDataEnsemble/ode/releases)). Pre-release toggles are only needed for alpha/beta testing. #### Step 3: Install Formulus @@ -97,7 +97,7 @@ You have two options to install Obtainium: - App name: **ode** - Developer: **OpenDataEnsemble** - Package: `org.opendataensemble.formulus` - - Latest version: **v1.2.1** (or current [release](https://github.com/OpenDataEnsemble/ode/releases)) + - Latest version: **v1.3.0** (or current [release](https://github.com/OpenDataEnsemble/ode/releases)) - Status: **Not installed** 5. **Tap the "Install" button** at the bottom of the screen 6. **Confirm installation** when prompted: diff --git a/docs/guides/deployment.md b/docs/guides/deployment.md index 995cc94..2b4cb32 100644 --- a/docs/guides/deployment.md +++ b/docs/guides/deployment.md @@ -13,7 +13,7 @@ Complete guide to deploying ODE in production environments using containers (Doc ODE production deployments center on the **Synkronus container image** (`ghcr.io/opendataensemble/synkronus`). The reference stack is [synkronus-quickstart](https://github.com/OpenDataEnsemble/synkronus-quickstart): Synkronus, PostgreSQL, and **Caddy** for TLS. Your IT team may use any hardened reverse proxy (Nginx, Apache, cloud load balancer) instead of Caddy—the requirement is **TLS termination** forwarding to Synkronus on port 8080. -Pin the image tag in production (e.g. `ghcr.io/opendataensemble/synkronus:v1.1.1`), not `:latest`. +Pin the image tag in production (e.g. `ghcr.io/opendataensemble/synkronus:v1.3.0`), not `:latest`. ## Recommended Production Setup diff --git a/docs/guides/server-architecture-for-it.md b/docs/guides/server-architecture-for-it.md index ea5e8e0..7f523ce 100644 --- a/docs/guides/server-architecture-for-it.md +++ b/docs/guides/server-architecture-for-it.md @@ -7,7 +7,7 @@ title: Server Architecture for IT One-page overview for infrastructure teams evaluating or hosting ODE (Synkronus). -> **Current ODE release:** [v1.1.1](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.1.1) · **Reference stack:** [synkronus-quickstart](https://github.com/OpenDataEnsemble/synkronus-quickstart) +> **Current ODE release:** [v1.3.0](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.3.0) · **Reference stack:** [synkronus-quickstart](https://github.com/OpenDataEnsemble/synkronus-quickstart) ## Summary @@ -41,7 +41,7 @@ Reference layout from [synkronus-quickstart](https://github.com/OpenDataEnsemble | Container / role | Image | Purpose | |------------------|-------|---------| | Reverse proxy | Caddy 2 (quickstart) or IT-standard proxy | TLS termination, forward to Synkronus | -| `synkronus` | `ghcr.io/opendataensemble/synkronus:v1.1.1` | API, sync, auth, app-bundle hosting, Portal | +| `synkronus` | `ghcr.io/opendataensemble/synkronus:v1.3.0` | API, sync, auth, app-bundle hosting, Portal | | `db` | `postgres:17` (quickstart) | Observations, users, metadata | ### Common deployment variants @@ -120,14 +120,14 @@ Typical self-hosted pattern (e.g. research institutions running custom apps like 2. [synkronus-quickstart](https://github.com/OpenDataEnsemble/synkronus-quickstart) installer → Caddy + Synkronus + Postgres 3. DNS points to server; TLS via Let's Encrypt or institutional certificates on your proxy 4. Project team uploads the app bundle via Portal or `synk` CLI -5. Field tablets install Formulus **v1.1.1** via Obtainium or F-Droid; configure server URL in app settings +5. Field tablets install Formulus **v1.3.0** via Obtainium or F-Droid; configure server URL in app settings Coordinate **Formulus and Synkronus versions** on upgrade—the mobile app checks server compatibility and may refuse sync on mismatch. ## Operator checklist - [ ] Hardened reverse proxy with TLS (TLS 1.2+) -- [ ] Pin Synkronus image tag (e.g. `v1.1.1`) rather than `:latest` in production +- [ ] Pin Synkronus image tag (e.g. `v1.3.0`) rather than `:latest` in production - [ ] Proxy upload limit ≥ 32 MB per attachment - [ ] Automated Postgres backups + tested restore - [ ] Backup `appdata` volume (attachments + bundles) diff --git a/docs/reference/security.md b/docs/reference/security.md index d3bf9b0..a94d16d 100644 --- a/docs/reference/security.md +++ b/docs/reference/security.md @@ -14,7 +14,7 @@ For a one-page infrastructure overview aimed at IT departments, see [Server Arch ## Supported versions -Security updates are provided for the latest release and the immediately preceding major version. **Current ODE release: [v1.1.1](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.1.1).** +Security updates are provided for the latest release and the immediately preceding major version. **Current ODE release: [v1.3.0](https://github.com/OpenDataEnsemble/ode/releases/tag/v1.3.0).** | Component | Supported | |-----------|-----------| @@ -77,7 +77,7 @@ Recommend **device passcode or biometric lock** and **MDM remote wipe** for lost ### Container images -- Production: pin `ghcr.io/opendataensemble/synkronus:v1.1.1` (not `:latest`). +- Production: pin `ghcr.io/opendataensemble/synkronus:v1.3.0` (not `:latest`). - Scan images for vulnerabilities as part of your supply-chain process. ### Network @@ -149,7 +149,7 @@ Before production: - [ ] OS and image dependencies patched - [ ] Reverse proxy rate limiting configured - [ ] Proxy upload limit ≥ 32 MB -- [ ] Synkronus image tag pinned (e.g. `v1.1.1`) +- [ ] Synkronus image tag pinned (e.g. `v1.3.0`) - [ ] Device passcode/MDM policy for field tablets ## Security updates diff --git a/docs/reference/synkronus-server.md b/docs/reference/synkronus-server.md index ffe6987..9343c0e 100644 --- a/docs/reference/synkronus-server.md +++ b/docs/reference/synkronus-server.md @@ -19,7 +19,7 @@ Synkronus is a robust synchronization API server built with Go. It provides REST Production deployments should pin a release tag rather than `:latest`: ``` -ghcr.io/opendataensemble/synkronus:v1.1.1 +ghcr.io/opendataensemble/synkronus:v1.3.0 ``` Images are published on [GitHub Container Registry](https://github.com/OpenDataEnsemble/ode/pkgs/container/synkronus) for each [ODE release](https://github.com/OpenDataEnsemble/ode/releases). diff --git a/docs/using/data-management.md b/docs/using/data-management.md index 75be39f..cf926f9 100644 --- a/docs/using/data-management.md +++ b/docs/using/data-management.md @@ -47,51 +47,59 @@ The observations list supports filtering by: ## Exporting Data -Data can be exported from the server using multiple methods: +### ODE Desktop (local workspace) - - +**ODE Desktop** exports from the **active profile’s local SQLite workspace** (offline-friendly; no Synkronus round-trip): -Export all observations as a Parquet ZIP archive: +1. Open **Data → Export**. +2. Optionally enable **Include pending observations** and/or **Include attachments**. +3. Choose a parent folder. Desktop creates a dated leaf folder **`YYYYMMDD`** (asks before overwriting). +4. Result layout: -```bash -synk data export exports.zip -``` +| Path | Contents | +|------|----------| +| `.parquet` | One Parquet file per form type (envelope columns + top-level `data_*` fields, plus a `pending` flag) | +| `export_manifest.json` | Export metadata (options, counts, attachment path hints) | +| `snippets/` | Ready-to-run load scripts (`load_r.R`, `load_python.py`, `load_stata.do`, `load_julia.jl`) with variables named after each form type | +| `attachments/` | Present when **Include attachments** is on — flat copies of referenced files | + +Attachment fields in observation JSON store **basenames**. Use the workspace attachments path shown on the Export / Profiles pages as a prefix for live workspace files, or the export folder’s `attachments/` path for a self-contained handoff. + +Study-specific transforms and pipelines belong in analyst tools (R, Python, etc.), not in Desktop. Desktop’s role is extract. -Export to different formats: +### Synkronus server (Portal / CLI) + +For a full **server-side** dump (all non-deleted observations on Synkronus), use Portal or the CLI. These download a **ZIP**: + +**CLI** ```bash -# Parquet (default) +# Parquet ZIP (default) — one .parquet per form type inside the archive synk data export observations.zip -# JSON -synk data export observations.json --format json +# Nested JSON ZIP +synk data export observations.zip --format json -# CSV -synk data export observations.csv --format csv +# Attachments ZIP +synk data export attachments.zip --format attachments ``` - - +**curl** ```bash curl -X GET http://your-server:8080/api/dataexport/parquet \ -H "Authorization: Bearer YOUR_TOKEN" \ + -H "x-ode-version: YOUR_ODE_VERSION" \ -o observations.zip ``` - - +**Portal** -1. Navigate to the Portal -2. Go to the "Data Export" section -3. Select export format (Parquet, JSON, CSV) -4. Click "Export" to download +1. Open Synkronus Portal (admin). +2. Open the **Data Export** section. +3. Download Parquet, raw JSON, or attachments. - - - -The export includes all observations in the selected format, organized by schema type. See the [API Reference](/reference/api) for details. +There is **no CSV** export endpoint today; use Parquet (or JSON) and convert in your analysis toolchain if needed. ## Data Synchronization @@ -101,5 +109,4 @@ Observations are synchronized between devices and the server automatically. See - Learn about [synchronization](/using/synchronization) in detail - Review the [API Reference](/reference/api/endpoints) for programmatic access -- Explore [data export options](/reference/api/endpoints) for analysis - +- Use ODE Desktop **Export** for local Parquet; use Portal/CLI for server ZIP dumps