Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions docs/development/installing-formulus-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,19 +161,19 @@ 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
```

</TabItem>
<TabItem value="windows" label="Windows">

```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"
```

</TabItem>
Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/architecture-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 3 additions & 3 deletions docs/getting-started/installation/installing-formulus.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand All @@ -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:
Expand Down
2 changes: 1 addition & 1 deletion docs/guides/deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 4 additions & 4 deletions docs/guides/server-architecture-for-it.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 3 additions & 3 deletions docs/reference/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
|-----------|-----------|
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/synkronus-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down
61 changes: 34 additions & 27 deletions docs/using/data-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

<Tabs>
<TabItem value="cli" label="CLI">
**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 |
|------|----------|
| `<form_type>.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 <form_type>.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
```

</TabItem>
<TabItem value="curl" label="curl">
**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
```

</TabItem>
<TabItem value="portal" label="Portal">
**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.

</TabItem>
</Tabs>

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

Expand All @@ -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