-
Notifications
You must be signed in to change notification settings - Fork 649
Troubleshooting
Got a question or something not working? This page covers the most common issues and how to fix them.
NOOP is not notarized by Apple — notarization requires a paid Apple Developer ID tied to a real identity, which doesn't fit an anonymous, free project. The app is sandboxed and code-signed, and the full source is here to inspect. macOS Gatekeeper blocks it on first open because of the download quarantine flag (not real damage).
Fix — pick one (you only need to do this once):
-
Terminal (most reliable):
- Drag
NOOP.appto Applications if you haven't already - Run:
xattr -dr com.apple.quarantine /Applications/NOOP.app - Open NOOP normally
- Drag
-
No Terminal:
- Double-click NOOP (it'll be blocked)
- Go to System Settings → Privacy & Security
- Scroll to the bottom and click "Open Anyway" next to NOOP
- On macOS 14 and earlier, you can also right-click the app → Open
-
Build from source to skip notarization entirely — see Build Guide.
WHOOP straps hold an encrypted Bluetooth bond with only one device at a time. If your strap is still bonded to the official WHOOP app on your phone (or another Mac), NOOP's pairing will be refused.
What happens: You see "bond refused" in the strap log, or pairing simply fails with an encryption error.
Fix:
- Close the official WHOOP app on your phone (fully quit it, or turn that phone's Bluetooth off) — you want the strap no longer bonded to it
- On WHOOP 5.0/MG, put the strap in pairing mode — tap the band repeatedly (firm taps on the sensor) until the LEDs flash blue
- In NOOP: Live → select "WHOOP 5.0 / MG" (if you have a 5/MG) → Scan & Connect
- Success looks like "CLIENT_HELLO acked — link established" in the strap log (not "bond refused")
- It can take a couple of attempts
Important: Because the strap holds only one bond, don't leave it connected to your phone and your Mac at the same time. Live heart rate will still stream on both (that rides the bond-free standard Bluetooth HR profile), but none of them will have the real encrypted bond needed for deeper features.
This means the strap is not truly bonded to NOOP — even though live HR shows. Live HR rides the standard Bluetooth heart-rate profile and doesn't require a bond, but everything else does.
Fix: Free the strap from everything else (close WHOOP app on your phone, turn off Bluetooth on other devices), then pair with NOOP again following the steps above.
If the official WHOOP app was using your strap, unbonding from NOOP may have sent the bond back to it (or to another device). You need a clean slate.
Fix:
- Close the WHOOP app completely
- Go to your phone's Bluetooth settings, find "WHOOP" in your paired devices, and forget it
- Do the same on any other device that has ever bonded to this strap
- Put the strap in pairing mode again (tap until blue LEDs flash)
- Try NOOP again: Live → select your strap model → Scan & Connect
If it still refuses, the strap may be bonded to a device you don't have access to — try powering off the strap for 30 seconds (let the battery completely drain if possible), then power back on and pair fresh.
Your strap connects, and NOOP says the history offload finished, but no data appears in the app and you see a WARNING like "decoded to 0 rows" in the diagnostics.
What's happening: The strap is sending data, but NOOP can't decode it — usually because it's a firmware layout version NOOP doesn't recognize yet.
Your data is safe as of v1.82. Older versions acknowledged these undecodable chunks anyway, and the strap then freed them — so the only copy could be lost. As of v1.82, NOOP archives the raw records on-device before it acknowledges the strap, so nothing is destroyed on an unmapped firmware, and it automatically logs a hex sample of the rejected records. Update to v1.82+ first, then follow the steps below so we can map your firmware and get it decoding.
Fix:
- Wear the strap for a full day while connected to NOOP — this gives fresh data NOOP can try to decode
- Turn on Settings → Strap → Debug logging (macOS) or Settings → Strap → "Debug logging" (Android)
- Wear for a few hours, then export your strap log:
- macOS: Settings → Support → "Share strap log"
- Android: Settings → Strap → "Share strap log"
- Send the log to thenoopapp@gmail.com with a note about your strap model and Android/macOS version
The hex dump in the log helps map the firmware layout so NOOP can decode it going forward. You don't need to wait for a fix — you can keep using the strap and import your WHOOP export (see below) to backfill your history.
NOOP computes your scores on your device, so it needs a bit of data before everything fills in:
- Live heart rate shows the moment the strap connects
- Strain and sleep appear after you've worn the strap and synced — the strap's last ~14 days offload automatically over the first few minutes
- Recovery needs a few nights for NOOP to learn your personal baseline, then sharpens each night
- In a hurry? Import your WHOOP CSV export in Data Sources and your full history fills in about a minute
Sync happens automatically — NOOP offloads the strap's history whenever you connect. It's usually done in the first few minutes.
To check sync progress:
- macOS: Look at Today → Data Sources — you'll see "History synced [time] ago" and a timestamp of the last successful sync
- Android: Same — Data Sources card shows the sync status
The strap log (Settings → Share strap log, with Debug logging on) shows detailed offload progress if you need it. If sync seems stuck, try disconnecting and reconnecting the strap — that restarts the offload.
If you've got years of data in the official WHOOP app or in Apple Health, you can import it in one step:
-
Get your export:
- WHOOP: In the official app, go to Settings → Data Export, request your export, and download it (you get a ZIP or folder with CSVs)
- Apple Health: On Mac, go to Health app → top-left menu → Export Health Data, or on iPhone go to Health → Profile → share your health data → export
-
In NOOP: Today (or menu-bar) → Data Sources
-
Click the + button and choose your file — NOOP imports it and adds it to your local database
-
Done. Your history is now permanently on your machine
The import is one-time — you don't need to re-import unless you get a new export.
NOOP needs permission to scan for and connect to your strap. On Android 12+, you'll get a runtime permission prompt when you try to scan.
Fix: Tap Allow when prompted. If you accidentally denied it, go to Settings → Apps → Permissions → Bluetooth and turn it on for NOOP.
To keep collecting strap data while your phone is locked or the app is backgrounded, NOOP runs a foreground service. You'll see a persistent notification — this is normal and expected.
You can't disable it — it's how Android ensures the connection stays alive. But you can long-press the notification to silence the sound/vibration if it bothers you.
Turn on Settings → Strap → Debug logging (macOS) or Settings → Strap → "Debug logging" (Android). This logs detailed connection and decode info:
- macOS: Open Console.app, filter by "WhoopBleClient" or "Strand", and watch live as you connect
-
Android: Run
adb logcat -s WhoopBleClientin a terminal while NOOP is running
Then Settings → Strap → "Share strap log" to export a compact log file for bug reports — this log includes hex of the frames being sent and received, command names, offload progress, and more.
Report it: Open an issue on GitHub or email thenoopapp@gmail.com. Include:
- Your strap model (WHOOP 4.0 or 5.0/MG)
- Your platform and OS version (macOS 13/14/15, Android version)
- Steps to reproduce (what were you doing when it crashed?)
- Your strap log (with Debug logging on) — especially if the crash happened during a connection or offload
NOOP computes recovery, strain, sleep, and HRV from published scientific methods. These are approximations, not reproductions of WHOOP's proprietary scores, so some differences are expected:
- Different recovery / strain: NOOP uses Task Force 1996 (HRV), Karvonen (% heart-rate reserve), and Edwards/Banister TRIMP; these are well-documented but different from WHOOP's models
- Different sleep stages: NOOP's stager is an on-device approximation based on cardiorespiratory and gravity features — not clinically validated
- SpO₂ / heart rate seem off: Check that your strap is snug and you're not moving around; biometric sensors are sensitive to fit and motion
See the How NOOP Works and The Science pages for more detail on how NOOP computes each metric.
Not a medical device: NOOP's outputs are approximations and are not clinically validated. Don't use them to diagnose, treat, or make health decisions — see the Disclaimer and Privacy and Security pages.
Bugs: Open an issue on GitHub with:
- What you were doing
- What you expected to happen
- What actually happened
- Your strap model, platform, and OS version
- Your strap log (with Debug logging on)
Feature ideas or feedback: Email thenoopapp@gmail.com or open a discussion on GitHub — the maintainer reads both.
NOOP is an independent, unofficial, non-commercial interoperability project. It is not affiliated with, endorsed by, or connected to WHOOP, Inc. "WHOOP" is used only nominatively to identify the hardware NOOP talks to. Use NOOP only with a device you own, and not in breach of any agreement that applies to you.
NOOP is not a medical device. See the full Disclaimer and Privacy and Security for more.
NOOP is an independent, unofficial, non-commercial interoperability project — not affiliated with, endorsed by, or sponsored by WHOOP, Inc. "WHOOP" is a trademark of WHOOP, Inc., used nominatively. Works only with a device you own; not a medical device; every metric is an approximation, not medical advice. · Privacy and Security · Donations · Releases
Get started
Tutorials
- Tracking a Workout
- Recovery, Strain & Readiness
- Automations
- Breathe & Intervals
- Importing History
- AI Coach
- Widget & Notifications
- Reading Your Sleep
- Explore & Compare
Reference
Project