Context
WHOOP 5/MG support has several active research and implementation threads. This issue is a roadmap/spec issue to keep the user-facing deep-data work coherent: decode what is validated, label what is unavailable, and keep experimental probes guarded.
Related / does not replace:
Sharing: whoop-local — a single-file, stdlib-only local decoder for WHOOP 5.0/MG (HR, strain, HRV, sleep, IMU, skin-temp °C, events…) #715
[ble] WHOOP 5/MG raw accel/IMU: community-verified live 0x2B raw-accel stream (cmd 81) that the 5/MG allowlist never arms — gated probe + decode proposal #423
SpO₂ and Skin Temp show nothing with no explanation — build the capability label Spo2ReTrace already calls for #548
Data request: WHOOP 5/MG high-rate optical (deep-buffer) capture with a reference pulse-oximeter #532
[ble] CoreBluetooth state restoration leaves the link half-initialised: connectedPeripheralUUID never set, stale notify never re-armed (iOS, WHOOP 5.0) #613
[connection] Connection & Sync - Whoop 5 #295
WHOOP 5.0 raw HCI capture — where to submit? (docs reference #174, which doesn't exist) #103
Found a repository that might help with Whoop 5 sensor decoding #520
v18 @82: decode the SpO2 candidate as instrumentation (#103) #709
Persist the WHOOP 5/MG raw-IMU offload buffer (#423) #675
feat(android): Kotlin twin of the WHOOP 5/MG R22 deep-buffer + 6-axis IMU decode (#423) #481
Proposed scope
Create a single WHOOP 5/MG deep-data roadmap that ties protocol capability, storage, analytics, and UI behavior together:
explicit capability labels for HR, HRV, respiration, SpO2, skin temperature, raw optical/deep buffers, IMU, battery/body status, and sync mode;
validated decoders persist raw/instrumentation data without pretending it is final physiology;
user-facing cards explain when a metric is unavailable, unsupported by current firmware, or still experimental;
probe paths stay default-off / diagnostic-only until validated on hardware;
active strap id and canonical device-family resolution are used everywhere;
no destructive/write commands to hardware.
Non-goals / safety constraints
No firmware, decompiled app code, proprietary assets, DRM circumvention, or unsafe BLE writes.
No invented SpO2/temperature/respiration values from weak signals.
No default analytics changes from unvalidated PPG/IMU estimates.
No medical interpretation of raw sensor streams.
Acceptance criteria
There is a capability model shared across Apple and Android that can explain “available / unsupported / experimental / needs data”.
Deep-data UI does not silently show blank SpO2/skin-temp/respiration tracks without explanation.
New protocol facts live in protocol packages/decoders, not scattered hardcoded hex in app UI.
Experimental probes are behind explicit toggles or diagnostic flows.
Any persisted raw/deep data has a schema and migration strategy on both platforms.
Verification
Protocol parsers have fixture tests and CRC/error-path coverage.
Swift/Kotlin decoder outputs match for shared fixture data.
BLE changes are compile-tested and validated on real hardware before being called complete.
App-target Swift changes are built locally because default CI does not compile them.
Context
WHOOP 5/MG support has several active research and implementation threads. This issue is a roadmap/spec issue to keep the user-facing deep-data work coherent: decode what is validated, label what is unavailable, and keep experimental probes guarded.
Related / does not replace:
Proposed scope
Create a single WHOOP 5/MG deep-data roadmap that ties protocol capability, storage, analytics, and UI behavior together:
Non-goals / safety constraints
Acceptance criteria
Verification