RawPulse is a tiny Android app that shows your live heart rate on a home‑screen widget, updating about once per second — something the official WHOOP app does not offer. It also derives extra live metrics that WHOOP doesn’t show in real time, including live HRV.
It works by reading the standard Bluetooth Heart Rate broadcast that a WHOOP 4.0 / 5.0 band emits (the same signal Peloton, Zwift and Garmin read). Nothing goes through WHOOP’s servers, there is no login, and there is no per‑user setup — if you can turn on HR Broadcast in the WHOOP app, RawPulse works.
Unofficial. Not affiliated with, or endorsed by, WHOOP. “WHOOP” is a trademark of its respective owner and is used here only to describe compatibility.
The official WHOOP Developer API is cycle‑based (recovery, strain, sleep) and does
not expose real‑time or continuous heart rate. Per‑second HR is only available
locally, over Bluetooth, via the band’s standard Heart Rate Service (0x180D,
characteristic 0x2A37). RawPulse subscribes to that stream directly.
All widgets are square‑ish tiles you add to your home screen. They update live while streaming is on.
| Widget | Shows |
|---|---|
| Live Heart Rate | Big BPM number, colour‑coded by heart‑rate zone (the main 1:1 tile) |
| Live HRV | Rolling RMSSD in ms over the last ~60s — not shown live in the WHOOP app |
| HR Session | Min / avg / max BPM and elapsed time since you started streaming |
| HR Zone | Percent of your max HR with a zone‑coloured bar |
Heart‑rate zones are derived from your max HR (estimated as 220 − age, editable in the app).
WhoopHrManager scans for the band’s HR broadcast, connects, and decodes 0x2A37.HrRepository is the shared source of truth; HrService and the widgets read from it.Trade‑offs to know:
-- and the app auto‑reconnects when it’s back.RawPulse isn’t on the Play Store (see the license/rebuild note above about zero‑setup distribution) — install it directly:
Obtainium tracks an app’s GitHub Releases and notifies you (with in‑place updates) whenever a new one is published — no Play Store needed.
https://github.com/mikelord007/RawPulseEvery release APK is signed with the same dedicated RawPulse release key, so updates install cleanly in place without needing to uninstall first.
Grab app-release.apk from the latest GitHub release,
transfer it to your phone, tap it in Files, and allow “install from this source.” You’ll
need to repeat this manually for future versions (Obtainium does this part for you).
See Build & install (command‑line) below.
You only need a JDK and the Android command‑line SDK tools — not the full IDE.
Install Eclipse Temurin 17 (https://adoptium.net). Confirm:
java -version # should report 17.x
Set JAVA_HOME to the JDK folder if it isn’t already.
C:\Android\cmdline-tools\latest\ (the bin folder must sit directly
under latest).ANDROID_HOME = C:\AndroidC:\Android\cmdline-tools\latest\bin and C:\Android\platform-tools to PATHsdkmanager "platform-tools" "platforms;android-35" "build-tools;35.0.0"
sdkmanager --licenses
From the project root:
# Windows PowerShell / cmd
.\gradlew.bat assembleDebug
# Git Bash / macOS / Linux
./gradlew assembleDebug
The APK lands at:
app/build/outputs/apk/debug/app-debug.apk
(The Gradle wrapper is committed, so you don’t need to install Gradle separately.)
Option A — via USB (adb):
adb install -r app/build/outputs/apk/debug/app-debug.apk
Option B — copy the file: transfer app-debug.apk to the phone (email, Drive, USB),
tap it in Files, and allow “install from this source”.
Demo mode (in the app) feeds a simulated heart rate so you can verify the widgets update without wearing the band.
Prefer a GUI? Android Studio does steps 1–3 with one Run click, but it’s a multi‑GB install; the command‑line path above is much smaller.
app/src/main/java/com/rawpulse/hr/
ble/WhoopHrManager.kt # BLE scan/connect + decode 0x2A37
data/ # HrRepository, Metrics (RMSSD), Settings, models
service/HrService.kt # foreground service, pushes widget updates + notification
widget/ # 4 AppWidgetProviders + WidgetUpdater + styling
MainActivity.kt # permissions, start/stop, settings, demo mode
RawPulse collects no data and has no servers — everything happens on your phone. See the privacy policy (or PRIVACY.md directly) for the full policy.
MIT — see LICENSE.