Happy Friday! Here's a fresh release of Open Wearables - v0.4 is out 🚀
Highlights
1000 stars on GitHub ⭐
Last week we crossed 1000 stars on GitHub! It happened overnight after Open Wearables went viral on X:
Thank you all for the support - it means a lot to the team and keeps us motivated!
React Native SDK
The React Native SDK is here! @ninotell-tbb and @dtochetto-tbb for making this happen.
Oura Ring integration
We added support for Oura Ring as a new wearable provider - contributed by community member @vikohone 🎉
Raw payload storage & replay
You can now optionally store raw incoming payloads from all providers to S3. This is useful for debugging, auditing, and reprocessing data without asking users to re-sync. We also ship a replay script that lets you re-ingest stored payloads on demand.
More: Documentation
Provider disconnect
You can now disconnect users from wearable providers via the API. Currently, only Garmin includes full deregistration through their API - more providers coming soon, with no changes needed on your end.
More: API reference
Apple Health improvements
Apple Health XML import got several upgrades - sleep record handling, sleep stage timestamps, better data source extraction, and timezone-aware datetime storage. On the SDK side, we also landed fixes in the iOS SDK. If you're integrating sleep data via Apple Health, this release is a big step up.
Archive & retention policy
New configurable archive and retention policy with storage growth projections. Keeps your database lean as usage scales.
Redesigned mobile app connection flow
The invitation code dialog has been redesigned into a smoother mobile app connection flow - making it easier for end users to connect their devices.
More: Open Wearables app docs
Production docker-compose
A dedicated production docker-compose config is now available, making self-hosting easier.
More frequent releases
Until now we've been releasing every two weeks, but we noticed this sometimes causes upgrade pain for specific implementations. Going forward, we're switching to more frequent minor releases - smaller batches, faster to deploy.
What's Changed
Integrations
- feat(integrations): add Oura Ring provider by @vikohone in #454
- feat(api): add provider disconnect endpoint by @bartmichalak in #632
- feat: deregister user from Garmin API on disconnect by @bartmichalak in #638
Apple Health
- fix(backend): improve Apple XML data source extraction by @czajkub in #582
- feat(backend): Add sleep record handling in Apple Health XML export by @czajkub in #583
- feat: store sleep stages timestamps for Apple Health by @KaliszS in #567
API & Backend
- feat(backend): add optional raw payload storage for incoming data by @bartmichalak in #591
- feat: add S3 raw payload replay script by @bartmichalak in #619
- feat(backend): added new s3 replay raw payloads example envs by @KaliszS in #629
- feat: Add archive & retention policy w/ storage growth projection by @KaliszS in #535
- feat: add password change endpoint with complexity validation by @kaifcodec in #550
- fix(backend): add password length validation to PasswordChange schema by @bartmichalak in #631
- fix(backend): include timezone offset in datetime saved to database by @czajkub in #608
- fix(backend): unify uvicorn log format and remove duplicate log lines by @bartmichalak in #628
- fix(backend): release event loop from fake async endpoints by @KaliszS in #623
- feat: add configurable Sentry server_name via env var by @bartmichalak in #626
Frontend
- feat: redesign invitation code dialog as mobile app connection flow by @bartmichalak in #561
- fix: update UI connection status after OAuth authorization by @bartmichalak in #555
Docs
- docs: update README with mobile sync SDK references by @bartmichalak in #564
- docs: update Apple Health coverage matrix to reflect current implementation by @bartmichalak in #565
- docs: add raw payloads storage page by @bartmichalak in #603
- docs: update roadmap to reflect current implementation status by @bartmichalak in #604
- docs: update mobile sdk docs by @kmlpiekarz in #609
- docs: add Polar provider setup guide by @bartmichalak in #614
- docs: update mobile sdk docs by @kmlpiekarz in #624
- docs: update Flutter and React Native SDK descriptions in README by @bartmichalak in #630
DevOps
- chore: add production docker-compose by @bartmichalak in #617
- chore: use local ruff in pre-commit to match CI version by @bartmichalak in #637
Other
- chore: add .claude/ directory to .gitignore by @bartmichalak in #600
- docs: add explicit rule against calling repositories from routes by @bartmichalak in #634
- docs: add documentation update guideline for AI agents by @bartmichalak in #616
New Contributors
Full Changelog: 0.3...0.4