App which allows you to use your health devices beyond subscriptions. Supports Workout Tracking, Nutrition Tracking, Wellness Excercise, Sleep, Recovery, Strain, and Many more.
561
stars
1,086
commits
Dart
primary language
Sep 7, 2026
updated
An app that makes your wearable useful without its subscription. Pairs over Bluetooth, computes everything on your phone, iOS and Android. WHOOP 4/5/MG get full support today; see Supports for what else it talks to.
Not affiliated with WHOOP. Not a clone of their app or their scores — see below.
"The goal of the so-called OpenStrap project is not to re-create the WHOOP app. Rather, the algorithms and processing methods are developed from scratch, based on public research… The health data collected from the watch never leaves the phone."
"When a membership lapses, the hardware is basically useless. You own it, you still can't use it — it just goes dark, because the app stops talking to it. So you've got a perfectly good sensor turning into a paperweight."
| iOS | Join the TestFlight beta → — normal TestFlight install, no sideloading, no computer needed. |
| Android | Download the APK → — allow installs from unknown sources and open it. |
Quit the official WHOOP app before you pair. Bluetooth only lets one app own the band at a time.
Prefer to sideload the unsigned IPA instead of using TestFlight? That still
works — see guides/IOS_SIDELOAD.md.
No subscription, no paywall, no company behind this.
If OpenStrap gave your band a second life, a small tip genuinely helps.
Bitcoin
bc1qvtcch38dcwp967ar764uu6eetw7tf907844wfq
EVM — Ethereum · Base · Arbitrum · Optimism · Polygon
0x8310C89393366b7eBCD47ABa82e1dfB5ECeFFbD9
What donations actually pay for →
Nothing is gated behind paying, and nothing ever will be.
Bug reports from real bands are worth more than money — there's only one
person's physiology in the test data otherwise.
My subscription lapsed and a perfectly good sensor turned into a bracelet. The hardware never stopped working, only the app that made it useful did. So I reverse-engineered enough of the band's Bluetooth protocol to talk to it myself, wrote the analytics from scratch off published research instead of guessing at WHOOP's formulas, and built an app around the result. Now it works without them, and anyone else stuck with the same drawer-bracelet problem can use it, or go dig through the code themselves.
![]() Today | ![]() Sleep | ![]() Heart |
![]() Stress | ![]() Breathing | ![]() Body |
![]() Steps | ![]() Workouts | ![]() Records |
![]() Recap | ![]() Profile |
iOS also gets a home-screen widget, a lock-screen/Dynamic Island Live Activity, and a couple of Siri shortcuts.
![]() Widget | ![]() Battery widget | ![]() Live Activity |
Every screenshot above is real output from a WHOOP 4.0.
Health — heart rate, HRV, sleep staging, recovery/readiness, strain, stress, an HRV spot-check, real-time breathing coherence.
Activity — auto-detected workouts, live workout tracking with GPS routes, heart-rate zones.
Your data, elsewhere — writes to Apple Health (HealthKit) and Google Health Connect: sleep stages, resting HR, HRV, respiratory rate, active energy and workouts. Only things the band actually measures — never the derived scores, which have no native type and would be fabricated. Exports are idempotent, so a day re-deriving never duplicates samples. You can also export the entire local SQLite database to a file whenever you like — it's your data, in a format anything can open.
Background sync — the band drains without you opening the app. Android runs a foreground service with a 15-minute watchdog worker and re-attaches via CompanionDeviceManager. iOS uses a background processing task plus a light refresh task, and a separate restore Bluetooth central that relaunches the app when the band reconnects.
Everything else — trends/history, a journal with on-device correlation insights ("what actually moves your numbers"), cycle tracking, a deterministic coach, a shareable weekly recap, a BYOK AI assistant, home-screen widgets, iOS Live Activities, Siri shortcuts, a smart alarm that buzzes the band.
git clone https://github.com/OpenStrap/edge.git
cd edge
cp .env.example .env
flutter pub get
flutter run --dart-define-from-file=.env
Quit the official WHOOP app before you pair — Bluetooth only lets one app own the band at
a time. iOS signing and the App Group setup for the widget/Live Activity is its own
longer story — see guides/IOS_INSTALLATION.md.
wearable → Bluetooth → protocol decoder → local storage → analytics → the UI
openstrap_protocol turns bytes off the band into records.openstrap_analytics turns those records into metrics, each with its own confidence
score attached — nothing gets faked when the data isn't there.The band doesn't have a normal documented API — it's a proprietary protocol, and getting it to behave reliably took a while. Short version: the clock ships unset (skip setting it and every timestamp comes out garbage), history comes off in batches that need an exact 8-byte token echoed back or the band just re-sends the same data forever, and the local save has to happen before that acknowledgement goes out, not after, so a crash mid-sync can't lose anything.
The full blow-by-blow lives in the protocol repo's README — genuinely the more interesting read if you're into this kind of thing.
Everything's computed and stored locally. No cloud account required, no backend this needs to work day to day. Your health data never leaves the device unless you explicitly send it somewhere.
Being precise about the network, since "no cloud" gets said too loosely. Nothing below is required for the app to work, and none of it carries health data except the two you turn on yourself:
Full detail in PRIVACY.md.
lib/ai/ BYOK AI assistant — briefings, journal AI, nightly sweep
lib/ble/ Bluetooth link + history-sync state machine
lib/cloud/ optional companion/backend + cloud import clients
lib/coach/ read-only SQL coach over allow-listed views
lib/compute/ runs the analytics pipeline, writes results
lib/data/ local storage + the repository seam the UI reads from
lib/debug/ debug-mode flags
lib/gestures/ device action / gesture dispatch
lib/gps/ GPS route tracking for outdoor activities
lib/health/ HealthKit / Health Connect import + export
lib/import/ backup + third-party data import
lib/l10n/ translations (.arb)
lib/live/ Live Activity / breathing session
lib/models/ shared data models (Metric, payloads, app status)
lib/notify/ the single notification emitter + alert policies
lib/platform/ platform-channel glue (app icon, Tasker, device actions)
lib/state/ AppState, the one source of truth
lib/stress/ guided-breathing session logic
lib/sync/ background/headless sync policies
lib/telemetry/ opt-in error + usage telemetry
lib/theme/ design tokens, theming, transitions
lib/ui2/ every screen
lib/widget/ App-Group snapshot for the home-screen/watch widget
See AGENTS.md §2 for the full architecture map, invariants, and the biggest
files by ownership.
Protocol decoding and analytics live in their own repos — protocol, analytics.
guides/IOS_INSTALLATION.md — building and installing on an iPhone.guides/IOS_SIDELOAD.md — sideloading without a paid developer account.guides/WATCH_SETUP.md — the Apple Watch companion app.guides/AI_COACH.md — bring-your-own-key AI coach, briefings, and journal.guides/TASKER_INTEGRATION.md — buzzing the strap from Tasker/automation.guides/BUZZ_MEANINGS.md — what each buzz pattern means.Discord — for questions, band-specific quirks, and bug reports that don't need a full issue yet.
Found something broken? Open an issue. Found something broken and fixed it? Even better, send the PR. Protocol-level stuff (new record types, opcodes) belongs in the protocol repo, metric/formula changes belong in analytics, anything about the app itself — Bluetooth, storage, UI — belongs here.
CONTRIBUTING.md has the details: which repo a change belongs in, how to run the three packages together locally, and the two rules that matter most — never fabricate a number when the data isn't there, and cite the published method you're implementing.
Security problems shouldn't go in a public issue — see SECURITY.md for private reporting.
Every one of these people made the app better — mostly by using it on a real wrist and reporting what came out wrong.
The most useful contribution isn't necessarily code. There's one person's
physiology in the test data, so a bug report from a different body on a
different band is worth a great deal — see
CONTRIBUTING.md.
That cliff in mid-July is Hackaday and Adafruit covering it on the same day.
Dart
96.4%
Swift
2.0%
Kotlin
1.5%
App which allows you to use your health devices beyond subscriptions. Supports Workout Tracking, Nutrition Tracking, Wellness Excercise, Sleep, Recovery, Strain, and Many more.
561
stars
1,086
commits
Dart
primary language
Sep 7, 2026
updated
An app that makes your wearable useful without its subscription. Pairs over Bluetooth, computes everything on your phone, iOS and Android. WHOOP 4/5/MG get full support today; see Supports for what else it talks to.
Not affiliated with WHOOP. Not a clone of their app or their scores — see below.
"The goal of the so-called OpenStrap project is not to re-create the WHOOP app. Rather, the algorithms and processing methods are developed from scratch, based on public research… The health data collected from the watch never leaves the phone."
"When a membership lapses, the hardware is basically useless. You own it, you still can't use it — it just goes dark, because the app stops talking to it. So you've got a perfectly good sensor turning into a paperweight."
| iOS | Join the TestFlight beta → — normal TestFlight install, no sideloading, no computer needed. |
| Android | Download the APK → — allow installs from unknown sources and open it. |
Quit the official WHOOP app before you pair. Bluetooth only lets one app own the band at a time.
Prefer to sideload the unsigned IPA instead of using TestFlight? That still
works — see guides/IOS_SIDELOAD.md.
No subscription, no paywall, no company behind this.
If OpenStrap gave your band a second life, a small tip genuinely helps.
Bitcoin
bc1qvtcch38dcwp967ar764uu6eetw7tf907844wfq
EVM — Ethereum · Base · Arbitrum · Optimism · Polygon
0x8310C89393366b7eBCD47ABa82e1dfB5ECeFFbD9
What donations actually pay for →
Nothing is gated behind paying, and nothing ever will be.
Bug reports from real bands are worth more than money — there's only one
person's physiology in the test data otherwise.
My subscription lapsed and a perfectly good sensor turned into a bracelet. The hardware never stopped working, only the app that made it useful did. So I reverse-engineered enough of the band's Bluetooth protocol to talk to it myself, wrote the analytics from scratch off published research instead of guessing at WHOOP's formulas, and built an app around the result. Now it works without them, and anyone else stuck with the same drawer-bracelet problem can use it, or go dig through the code themselves.
![]() Today | ![]() Sleep | ![]() Heart |
![]() Stress | ![]() Breathing | ![]() Body |
![]() Steps | ![]() Workouts | ![]() Records |
![]() Recap | ![]() Profile |
iOS also gets a home-screen widget, a lock-screen/Dynamic Island Live Activity, and a couple of Siri shortcuts.
![]() Widget | ![]() Battery widget | ![]() Live Activity |
Every screenshot above is real output from a WHOOP 4.0.
Health — heart rate, HRV, sleep staging, recovery/readiness, strain, stress, an HRV spot-check, real-time breathing coherence.
Activity — auto-detected workouts, live workout tracking with GPS routes, heart-rate zones.
Your data, elsewhere — writes to Apple Health (HealthKit) and Google Health Connect: sleep stages, resting HR, HRV, respiratory rate, active energy and workouts. Only things the band actually measures — never the derived scores, which have no native type and would be fabricated. Exports are idempotent, so a day re-deriving never duplicates samples. You can also export the entire local SQLite database to a file whenever you like — it's your data, in a format anything can open.
Background sync — the band drains without you opening the app. Android runs a foreground service with a 15-minute watchdog worker and re-attaches via CompanionDeviceManager. iOS uses a background processing task plus a light refresh task, and a separate restore Bluetooth central that relaunches the app when the band reconnects.
Everything else — trends/history, a journal with on-device correlation insights ("what actually moves your numbers"), cycle tracking, a deterministic coach, a shareable weekly recap, a BYOK AI assistant, home-screen widgets, iOS Live Activities, Siri shortcuts, a smart alarm that buzzes the band.
git clone https://github.com/OpenStrap/edge.git
cd edge
cp .env.example .env
flutter pub get
flutter run --dart-define-from-file=.env
Quit the official WHOOP app before you pair — Bluetooth only lets one app own the band at
a time. iOS signing and the App Group setup for the widget/Live Activity is its own
longer story — see guides/IOS_INSTALLATION.md.
wearable → Bluetooth → protocol decoder → local storage → analytics → the UI
openstrap_protocol turns bytes off the band into records.openstrap_analytics turns those records into metrics, each with its own confidence
score attached — nothing gets faked when the data isn't there.The band doesn't have a normal documented API — it's a proprietary protocol, and getting it to behave reliably took a while. Short version: the clock ships unset (skip setting it and every timestamp comes out garbage), history comes off in batches that need an exact 8-byte token echoed back or the band just re-sends the same data forever, and the local save has to happen before that acknowledgement goes out, not after, so a crash mid-sync can't lose anything.
The full blow-by-blow lives in the protocol repo's README — genuinely the more interesting read if you're into this kind of thing.
Everything's computed and stored locally. No cloud account required, no backend this needs to work day to day. Your health data never leaves the device unless you explicitly send it somewhere.
Being precise about the network, since "no cloud" gets said too loosely. Nothing below is required for the app to work, and none of it carries health data except the two you turn on yourself:
Full detail in PRIVACY.md.
lib/ai/ BYOK AI assistant — briefings, journal AI, nightly sweep
lib/ble/ Bluetooth link + history-sync state machine
lib/cloud/ optional companion/backend + cloud import clients
lib/coach/ read-only SQL coach over allow-listed views
lib/compute/ runs the analytics pipeline, writes results
lib/data/ local storage + the repository seam the UI reads from
lib/debug/ debug-mode flags
lib/gestures/ device action / gesture dispatch
lib/gps/ GPS route tracking for outdoor activities
lib/health/ HealthKit / Health Connect import + export
lib/import/ backup + third-party data import
lib/l10n/ translations (.arb)
lib/live/ Live Activity / breathing session
lib/models/ shared data models (Metric, payloads, app status)
lib/notify/ the single notification emitter + alert policies
lib/platform/ platform-channel glue (app icon, Tasker, device actions)
lib/state/ AppState, the one source of truth
lib/stress/ guided-breathing session logic
lib/sync/ background/headless sync policies
lib/telemetry/ opt-in error + usage telemetry
lib/theme/ design tokens, theming, transitions
lib/ui2/ every screen
lib/widget/ App-Group snapshot for the home-screen/watch widget
See AGENTS.md §2 for the full architecture map, invariants, and the biggest
files by ownership.
Protocol decoding and analytics live in their own repos — protocol, analytics.
guides/IOS_INSTALLATION.md — building and installing on an iPhone.guides/IOS_SIDELOAD.md — sideloading without a paid developer account.guides/WATCH_SETUP.md — the Apple Watch companion app.guides/AI_COACH.md — bring-your-own-key AI coach, briefings, and journal.guides/TASKER_INTEGRATION.md — buzzing the strap from Tasker/automation.guides/BUZZ_MEANINGS.md — what each buzz pattern means.Discord — for questions, band-specific quirks, and bug reports that don't need a full issue yet.
Found something broken? Open an issue. Found something broken and fixed it? Even better, send the PR. Protocol-level stuff (new record types, opcodes) belongs in the protocol repo, metric/formula changes belong in analytics, anything about the app itself — Bluetooth, storage, UI — belongs here.
CONTRIBUTING.md has the details: which repo a change belongs in, how to run the three packages together locally, and the two rules that matter most — never fabricate a number when the data isn't there, and cite the published method you're implementing.
Security problems shouldn't go in a public issue — see SECURITY.md for private reporting.
Every one of these people made the app better — mostly by using it on a real wrist and reporting what came out wrong.
The most useful contribution isn't necessarily code. There's one person's
physiology in the test data, so a bug report from a different body on a
different band is worth a great deal — see
CONTRIBUTING.md.
That cliff in mid-July is Hackaday and Adafruit covering it on the same day.
Dart
96.4%
Swift
2.0%
Kotlin
1.5%