OpenPulse Standard is an open data standard and reference platform for wearable and sensor data.
It gives manufacturers, health systems, analytics teams, and software vendors a practical way to move data from fragmented device ecosystems into one normalized model that is easy to query, govern, and integrate.
Today, every wearable integration becomes its own project:
- different APIs
- different units
- different timestamp behavior
- different consent models
- different data quality issues
- different downstream mappings into analytics and clinical workflows
OpenPulse reduces that repeated work.
Instead of building a custom pipeline for every new device or manufacturer, teams can ingest data once, normalize it into a common model, preserve source provenance, and make it available for analytics, monitoring, and EHR export.
- Wearable data volume is growing faster than most integration teams can support.
- Health systems need a safer way to separate raw device data from what belongs in the clinical record.
- Manufacturers need a lower-friction path into provider and analytics ecosystems.
- AI and analytics teams need clean, longitudinal, queryable data instead of vendor-specific payloads.
OpenPulse gives all four groups a shared foundation.
This repo already runs a working local platform with:
- ingestion APIs
- manufacturer simulators for Apple HealthKit, Android Health Connect, Fitbit, Garmin, Oura, WHOOP, Withings, and Dexcom
- normalization into the OpenPulse model
- raw payload lineage storage
- ClickHouse analytics tables and views
- SQL query APIs
- FHIR-aligned export APIs
- governance workflows
- monitoring dashboards
- a live web demo surface
A technically capable team can get value from OpenPulse quickly.
In the current reference implementation you can:
- start the full stack locally
- ingest realistic data from all required ecosystems
- inspect normalized records and lineage
- run SQL queries over the canonical model
- review a web demo for operators and stakeholders
That means you can validate the standard, the warehouse model, the API layer, and the demo workflow before committing to a large integration program.
OpenPulse is designed to be useful in real buying and implementation cycles, not just in architecture diagrams.
It is built to:
- lower integration cost across manufacturers
- preserve manufacturer-specific value through controlled extensions
- support local deployment and data ownership
- provide clean handoffs to analytics and AI teams
- support health-system governance and consent enforcement
- align with FHIR for export without forcing FHIR complexity into the core ingest pipeline
- Backend/services: Python + FastAPI for maintainable APIs and fast adapter delivery.
- Streaming: Redpanda for Kafka-compatible ingestion without heavy local ops overhead.
- Warehouse: ClickHouse for fast time-series and analytical SQL.
- Bronze storage: MinIO for immutable raw payload retention and lineage.
- Observability: Prometheus + Grafana for service and pipeline visibility.
standards/: canonical schemas, taxonomy, mappings, compatibility policyservices/ingestion-gateway: ingest, idempotency, rate limitingservices/connector-service: adapters and synthetic generatorsservices/normalization-service: normalization, provenance, quality scoringservices/consent-identity-service: consent and pseudonymizationservices/query-api: operator and analytics accessservices/ehr-integration: FHIR-aligned exports and bulk export patternsservices/governance-agent: policy-based approval engineservices/ops-console: operator-facing demo and admin surfacedata-platform/: warehouse DDL, marts, lineage-ready structuresobservability/: dashboards and metrics configk8s/: Kubernetes deployment path
Copy-Item .env.example .env
./scripts/bootstrap.ps1Copy-Item .env.example .env
./scripts/openpulse-up-wsl.ps1
./scripts/openpulse-status-wsl.ps1The WSL-based path uses open-source Docker Engine inside Ubuntu WSL2.
- Ingestion:
http://localhost:8001 - Connectors:
http://localhost:8002 - Query API:
http://localhost:8003 - Consent:
http://localhost:8004 - Governor Jeff:
http://localhost:8005 - EHR integration:
http://localhost:8006 - Ops console:
http://localhost:8007 - Grafana:
http://localhost:3000 - Prometheus:
http://localhost:9090
Use the IP printed by ./scripts/openpulse-up-wsl.ps1.
SELECT subject_id, metric_code, avg(value) AS avg_value
FROM openpulse.observation
GROUP BY subject_id, metric_code
ORDER BY subject_id, metric_code;- device manufacturers that want easier enterprise adoption
- health systems that need a safer wearable-data ingestion model
- digital health vendors building multi-device products
- analytics teams building cohort, quality, and longitudinal models
- AI teams that need normalized feature-ready data
- Spec/docs: CC BY 4.0
- Reference implementation code: Apache-2.0
The current repo includes a working local reference implementation with real services, real tests, real schemas, and a functioning demo path. It is not just a placeholder project.