github the-momentum/open-wearables 0.6.3
0.6.3 - Nap detection & HTTP logs middleware

4 hours ago

Highlights

We encourage you to use our official Docker images:

Changes to HTTP logs

As HTTP logs usually account for more than 80% of all logs, we have disabled them by default for production deployments and added a new variable to control their flow (ACCESS_LOG_LEVEL). How it works:

  • ACCESS_LOG_LEVEL=all -> All HTTP logs are available, as before
  • ACCESS_LOG_LEVEL=errors -> only 4xx & 5xx log entries are available
  • ACCESS_LOG_LEVEL=off -> no HTTP logs
  • no ACCESS_LOG_LEVEL (None value):
    • if ENVIRONMENT=production -> errors level is set automatically
    • else all level is set automatically

We have also changed the structure of the HTTP logs:

  • before:
[2026-07-15 11:41:55,669 - uvicorn.access] (INFO) HOSTNAME:PORT - "GET /api/v1/users?page=1&limit=9&sort_by=created_at&sort_order=desc HTTP/1.1" 200
  • after:
{"timestamp": "2026-07-15T13:31:03.742767+00:00", "level": "info", "message": "http_request", "provider": null, "method": "OPTIONS", "path": "/api/v1/users?limit=5&sort_by=created_at&sort_order=desc", "status": 200, "duration_ms": 3.5}

Warning

By default, ACCESS_LOG_LEVEL is set to None, so if you have the ENVIRONMENT variable set to production, you will stop logging most messages. If you wish to retain the current behaviour, you must add the ACCESS_LOG_LEVEL variable and set it to all.

Note

For the time being, this change only affects HTTP logs from uvicorn. The new variable does not alter the behaviour of logs from Open Wearables.

Nap detection for Apple & Oura

We have added support for naps based on data provided by Apple and Oura. For the time being, this feature works correctly only for these two providers, but we will endeavour to develop our own algorithms to detect naps for providers that do not themselves flag which sleep sessions are naps.

image

Flag to enable/disable outgoing webhooks

We have added a new variable, OUTGOING_WEBHOOKS_ENABLED, which allows you to enable or disable outgoing webhooks. By default, it is set to false, so you need to add it and set it to true for the webhooks to start working.

Note

Please note that this has nothing to do with incoming webhooks from providers. It only concerns events that Open Wearables sends to client backends.

image

Strava workout samples

Once the INGEST_WORKOUT_SAMPLES variable is set to true (it was added in previous versions whilst working on Garmin workout samples and is set to false by default), Strava will start logging workout data at a high frequency. You can find out more about this mechanism in the entry “Ingest workout samples” for Garmin in the 0.6.0 release note: https://github.com/the-momentum/open-wearables/releases#release-0.6.0

Redis switched from RDF to AOF mode

We have changed the way Redis works to avoid errors in certain edge cases. You can read the details here: #1188. We have, of course, ensured that the data stored in Redis is preserved during the update.

The Docker Dev image has been reduced in size by around 40%

We achieved this by sealing the .dockerignore file and removing old and unused layers from the Dockerfile. This, of course, only applies to the local development version; nothing changes in the production build.

What's Changed

Outgoing webhooks

Apple

  • fix(backend): convert Health Connect blood glucose from mmol/L to mg/dL by @knowald in #1123
  • feat: Add nap detection for Oura, Apple by @czajkub in #1149

Oura

Suunto

  • fix(integrations): accept float totalDistance in Suunto workout schema by @thecodearrow in #1253

Garmin

  • fix(backend): remove dead sleep parameters from Garmin by @KaliszS in #1275

Strava

Fitbit

  • fix(backend): convert Fitbit workout distance from kilometers to meters by @knowald in #1139

API improvements & optimisation

Observability & deployments

  • fix(backend): enable Redis AOF persistence so the svix queue survives restarts by @knowald & KaliszS in #1188
  • fix(frontend): remove redundant layers & add .output to .dockerignore by @KaliszS in #1296
  • feat(backend): middleware for uvicorn logs by @KaliszS in #1297
  • feat(backend): timestamp for HTTP middleware logs by @KaliszS in #1301

MCP

  • refactor(mcp): typed exception hierarchy + first test harness by @kjsteuer in #894

Docs & chores

New Contributors

Full Changelog: 0.6.2...0.6.3

Don't miss a new open-wearables release

NewReleases is sending notifications on new releases.