Security practices for deploying and operating ODE (Synkronus, Formulus, and related components).
:::info Compliance ODE is self-hosted research infrastructure. Regulatory compliance (IRB, data classification, BAAs, audit programs) is the host organization’s responsibility. This page describes technical controls ODE provides and what operators must add. ODE does not claim HIPAA, SOC 2, or similar certifications. :::
For a one-page infrastructure overview aimed at IT departments, see Server Architecture for IT.
Security updates are provided for the latest release and the immediately preceding major version. Current ODE release: v1.1.1.
| Component | Supported |
|---|---|
| Synkronus | Latest release and previous major version |
| Formulus | Latest release and previous major version |
| Synkronus CLI | Latest release and previous major version |
Keep server and mobile clients on compatible versions. See Installing Formulus.
Do not report security vulnerabilities through public GitHub issues.
[email protected]Full disclosure policy and PGP key: SECURITY.md on GitHub.
| Data | Storage |
|---|---|
| Login credentials | iOS Keychain / Android Keystore |
| Observations | SQLite (WatermelonDB) in app private sandbox |
| Photos / attachments | App-private directory in the sandbox |
| Android backup | Disabled (allowBackup="false") |
Recommend device passcode or biometric lock and MDM remote wipe for lost devices via institutional policy. Offline synced data remains on the device until wiped.
/health and your log stack)read-only, read-write, admin.JWT_SECRET with openssl rand -base64 32.ghcr.io/opendataensemble/synkronus:v1.1.1 (not :latest).# Example: allow only web ports on the host
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sslmode=disable on internal Docker/Podman network is normal.sslmode=require in DB_CONNECTION.Never commit secrets to version control. Required secrets:
| Variable | Purpose |
|---|---|
JWT_SECRET |
JWT signing |
DB_CONNECTION |
PostgreSQL (includes password) |
ADMIN_PASSWORD |
Initial admin (change after first login) |
Use your platform’s secret manager in production.
The Synkronus Portal (admin UI) is embedded in the Synkronus binary at /portal. Protect it with TLS, strong passwords, and network ACLs where possible.
Install paths: Obtainium (recommended) or F-Droid.
GET /health on Synkronus (via proxy in production).Before production:
appdata backups configured and restore testedv1.1.1)| Severity | Target response |
|---|---|
| Critical | Within 7 days when possible |
| High | Within 30 days |
| Medium | Within 90 days |
Subscribe to GitHub Security Advisories for the ODE repository.