▲ 30 r/NOOPApp

The state of NOOP: where the project stands, what to expect, and how it gets built 🤔

I want to set out clearly where NOOP stands today, what you should expect from it, and what it is going to take to get this where we all want it to go. If you are new here, or you have just downloaded it expecting a finished product, please read this properly. It matters, and it will save us both a lot of frustration.

What NOOP is

NOOP is a free, open, on-device companion for your WHOOP and a growing range of other straps, watches and bands. Everything runs locally on your phone or your Mac. There is no account, no cloud, no subscription, no telemetry, and nothing you record ever leaves your device. It is built in the open by a small community, and every line of it is there for you to read, use, and improve.

That is the heart of it, and that part will never change.

What NOOP is not, yet

It is not a finished product. It is not a commercial app. It is not a polished, guaranteed, set-and-forget replacement for WHOOP, Oura or Garmin that you can lean on without a second thought. It does not come with a support desk, an uptime promise, or a roadmap that lands on a fixed date.

If what you need today is reliability you never have to think about, NOOP is not that yet. I believe it becomes that. It is not that right now, and it would be wrong of me to let you think otherwise.

Where we actually are: early, active development

NOOP is being built in real time. That is genuinely difficult, slow work, and it means the app is in constant motion. Setting your expectations straight here is the whole point of this post.

You should expect:

  • 🔄 Frequent updates, sometimes several in a single day.
  • 🐞 Real bugs. Things that work today and break tomorrow, then get fixed the day after.
  • ↩️ The occasional regression, where a fix for one thing briefly unsettles another.
  • 🧪 Features clearly labelled experimental, because they are not proven yet and we will not pretend they are.
  • 📐 Numbers and screens that change shape as we learn what is actually correct.
  • 🐢 Slow, deliberate progress on the hardest parts, because rushing them produces data you cannot trust.

None of that is the project failing. That is what building something this ambitious, in the open, actually looks like from the inside. If you are comfortable with that, you are in exactly the right place. If you are not, that is entirely fair, and it may be worth checking back in a few months when more of it has settled.

The work going on right now

This is a deliberate, organised effort, not something thrown together and abandoned:

  • 🔋 A dedicated battery-testing group is being set up, because strap battery behaviour is subtle and only careful testing across real devices over real time will get it right.
  • 🎨 A UI and UX testing group, to make sure the app does not merely work, but feels right to live with every single day.
  • 😴 Sustained work on the sleep algorithms, which is some of the most demanding work in the entire app. Getting sleep staging genuinely accurate, from raw signals, on your device, is hard, and we are not going to fake it to look finished.

These things take time. I would far rather move at the pace that gets them right than ship something that looks impressive and quietly misleads you about your own body. That is a line I will not cross.

The orchestra, and why this takes time

The clearest way I can describe my role is this: I am stood at the front of an orchestra with the baton. The musicians are extraordinary, contributors writing code, people submitting strap logs, people testing corners I could never cover on my own. But you do not pull a full orchestra into a finished symphony in a week. We are in rehearsal. Some sections are tight. Some are still finding their timing. My job is holding the whole thing together and pointed in one direction while every part comes up to standard.

It will not all sound right yet. That is the nature of rehearsal, not a fault in the players. The performance is coming, and it will be worth the wait, but the wait is real and I am not going to pretend it away.

How NOOP actually gets built: GitHub is the engine

This is the part I most need you to take on board. NOOP does not improve because one person codes in isolation. It improves because of you, through GitHub. There are three ways to be part of that, and each one genuinely shapes the app.

1. Report bugs, properly. 🐛 Not in a passing Reddit comment, and not as a vague "it is laggy". File it on GitHub Issues, with a strap log attached. There is a button in the app to capture one, and the template walks you through exactly what we need. I cannot fix what I cannot see. A clear report with a log is the single most valuable thing you can give this project, and a large share of every release comes directly from one person taking a few minutes to file one well. The dashboard performance fix that just shipped came from precisely that: one person, one clear report, one strap log. That is the entire loop, and it works.
➡️ Report a bug · All open issues · How to grab a strap log and report it

2. Send a pull request. 🔀 A great deal of what is in NOOP came from the community writing code. We review every single one ourselves, verify it, and reimplement it cleanly rather than merging blindly, but the ideas and the fixes are yours. If you can code, this is the most direct way to build the thing you wish existed.
➡️ Open pull requests · Contributing guide · Roadmap and where we need help

3. Take part in the wider effort. 💬 The testing groups, the discussion, the feedback, it all lives in the community and it all feeds straight back into what gets built next.
➡️ Discord · r/NOOPApp

And if you are here simply to download the app, please understand why it lives on GitHub in the first place. That is not an app-store listing. It is a development repository. You are taking a work-in-progress out of the exact place we are actively building it. That is a good arrangement, free, open, and yours, but the understanding that comes with it is firm: you are an early tester in a build that changes constantly, not a customer buying a finished product off a shelf. Treating it as the latter is where the disappointment comes from, and I would rather you treat it as what it is.

Where this is heading

The destination has not moved. NOOP is becoming a genuine, reliable, on-device alternative to the subscription wearable apps, one that respects your data completely and costs you nothing. We are not there yet. We get there by doing the hard parts properly rather than quickly, and by everyone who uses it taking part in making it better.

That is the deal. It is a serious project with a serious goal, and it is going to take time, patience, and all of us pulling in the same direction.

Everything in one place

🏠 Repository https://github.com/NoopApp/noop
🪞 Mirror (if GitHub is ever down) https://noop.fans
📥 Download and all releases https://github.com/NoopApp/noop/releases
📌 Start here (FAQ and how to report a bug) #470
📖 Wiki home https://github.com/NoopApp/noop/wiki
❓ FAQ wiki/FAQ
🚀 Getting started wiki/Getting-Started
📱 iPhone install (sideload or build from source) iPhone guide
🩺 No data or blank scores? Fix-it guide
🐛 Report a bug New issue
🔀 Pull requests Open PRs
🙏 Roadmap and help wanted #132
💬 Discord https://discord.com/invite/nHK9FHczu
💚 Support the project docs/DONATIONS.md

What I am asking of you

Be patient. Be early. Use it knowing exactly what it is. When something breaks, report it properly, with a log, on GitHub. If you can write code, send a pull request. Every issue you raise carefully is a problem solved for the next person, and every contribution moves the whole thing forward.

This is not a finished app, and I am not going to dress it up as one. It is a serious, long-term effort to build something genuinely worth having, in the open, for free, and it is going to take real time and real commitment from all of us. If you are here for that, you are exactly who this is for. Thank you for being part of it while we build it properly.

reddit.com
u/TheNoopApp — 8 hours ago
▲ 133 r/NOOPApp

We turned a cancelled WHOOP back into a working device. Thank you to the 161 people who made it real. 🎉

A few weeks ago this was a wild idea: what if your WHOOP just worked, forever, for free, no subscription, your data living on your own devices and going precisely nowhere else?

That idea has gone off like a rocket, and it's because of you. Here's where we are. Buckle up.

⭐ Nearly 2,000 stars on GitHub
🍴 777 forks
📦 220 releases
🚀 7 major versions, v1.0 all the way to v7.0.3
🛠 312 pull requests
🐛 358 issues hunted down
👥 161 people who've written code, filed bugs or shaped a feature
📝 Over 230,000 lines of Swift and Kotlin
📱 Three platforms: iPhone, Mac, Android
💬 1,100+ of you on Reddit, hundreds more on Discord

And nearly all of that happened in a matter of weeks. No company. No roadmap meetings. Just a community that decided a good piece of hardware shouldn't be held hostage.

Here's the bit that actually fires me up. A WHOOP without a subscription is a paperweight. Stop paying and the band on your wrist, a perfectly good sensor that cost real money to make, goes dark. Multiply that by everyone who's ever cancelled and that's a mountain of working tech heading for a drawer or a landfill.

NOOP says no. Your strap keeps working. Your data stays on your phone. No cloud, no fees, no "upgrade or lose access." We're not just building an app, we're keeping kit alive that the industry would happily have you bin and re-buy. That's less e-waste, less money out of your pocket, and a small middle finger to planned obsolescence. Own your data. Keep your gear. Waste nothing.

And look what we built together: WHOOP 4 and 5/MG support, Charge / Effort / Rest scores, Fitness Age, a Vitality score, hydration tracking, automatic workout detection, GPS workouts, a rebuilt sleep stager with editable nights, skin temp and respiratory trends, a bring-your-own-key AI coach, support for straps way beyond WHOOP, light and dark themes, full data export, and a dozen more, all of it offline, all of it yours.

But an app is just code. The soul of this is people. So here they are, the wall of legends who've sent a PR, cracked a bug, pasted a strap log at 3am, or just told us exactly what was broken:

adamstefanik, ahmedelfayoume, alexsas00, andreasc1, artur01-code, asemfahad, Brechard, cbarrado, claypilat, Copperknox, danielrossdanielross, darylbleach, dev-goalz, Dharanesh07, DieserLiton, Divad27, don86nl, eltomato89, Eph00n, Extazian, exzanimo, fkmooney, frazzle28, FrostDev7, gingerbeardman, hkuehl, iamkishann, iHateSubscriptions, jamartif, JanLoebel, jannikl-punkt, jhjosephcho, joalavedra, JordanBouchier, Joshsil03, julian-ben, julienranc, kavemang, khalilkm01, maddognik, marceauboul, MasterARK4, Meriquium, Mindfulpaths, mornepousse, MrL0, muthuganeshp, mvanhorn, nhe, NoahMcE, oregontrailbison, PatrickClipa25, phsycology, pilleuspulcher-blip, pranavfrost69, psifertex, rayg8, RazvanRex, RichrdJ, robin-liquidium, rr-allin, ruedigermunz, ryanbr, sactyr, sebastianwoo, spasypaddy, stnnnts, subscriptiondestroyer, sudden-break, sunny-noop, tajchert, TasadduqB, tavelli, Te1man, tigercraft4, Twenzo-cell, ujix, umarXBT, virajshoor, wagenknecht, witchykinkajou

...and the hundreds more of you in the threads: the testers, the lurkers, the "hey this would be cool if" crew. Every single one of you moved this forward.

This is a mission now, not a project. We're only just getting warmed up. ❤️

reddit.com
u/TheNoopApp — 2 days ago
▲ 49 r/NOOPApp

A homescreen that changes throughout the day (you can disable it in settings...!). 🌞🌚

u/TheNoopApp — 3 days ago

7.0.0.1 Hotfix Update

Keep in mind this is an app in development, if you want to positively contribute towards it then post issues on GitHub etc.

If you're expecting a fully working app, this isn't for you right now at this stage of its development.

-------

A fast follow-up to the v7.0.0 "Everything" release, fixing a batch of things you reported (and a few we caught ourselves while tightening our tests). Same app, just steadier.

Fixes

  • 😴 The experimental sleep staging (V2) toggle now actually works. It was only re-staging nights you'd hand-edited, so flipping it on did nothing for a normal night. Now every detected night is re-staged when it's on. (#690)
  • 👟 Step-estimate calibration unsticks. WHOOP 4.0 step calibration sat on "need more days" forever because it was reading your phone steps from the wrong place. It accumulates properly now. (#693)
  • 🏃 Manual workouts record on WHOOP 5/MG. Starting a workout from the Workouts tab now holds the live heart-rate stream open, so it captures HR and saves instead of logging nothing. (#681)
  • 💓 No more nonsense HRV headline. An imported HRV measured a different way (an Oura ring's SDNN vs your strap's RMSSD) no longer renders a wild "210% over baseline" line. The raw reading is still shown, just not the misleading comparison. (#696)
  • 📜 Scrolling no longer drifts sideways. Vertical scrolling on Trends, Sleep, Data Sources and Stress could bounce left and right. That horizontal bounce is locked off now. (#697)
  • 🔢 The version shown is correct. The About screen reads the real app version (it was stuck on an old number), and the update check no longer tells you to download a version you already have.

Caught while closing a test gap

We found that one of our test suites wasn't running in the release check. Switching it on immediately surfaced four real bugs, all fixed here:

  • 🟢 Garmin "vívoactive" straps are now recognised (the accented name was tripping up detection)
  • 🛰️ a single bad GPS distance no longer drops a whole saved route
  • 📥 an iOS Shortcut import with Windows-style line endings no longer silently skips records
  • 🛌 an unstaged night is no longer falsely flagged as low-confidence

📥 Get NOOP

  • 🍎 Mac: brew tap noopapp/noop && brew trust noopapp/noop && brew install --cask noop
  • 🤖 Android: download the APK below
  • 📱 iPhone: sideload the IPA below with AltStore / SideStore, or build from source
github.com
u/TheNoopApp — 3 days ago
▲ 82 r/NOOPApp+4 crossposts

NOOP v7.0.0: the "Everything" release 🎉

EDIT: Download the latest version (7.0.02) here: https://github.com/NoopApp/noop/releases

This is the big one. 🚀

The entire app got rebuilt around a brand-new look, there are two new trackers, sleep got smarter, and we cleared a whole stack of fixes off the board. Underneath it's the same NOOP you know: free, fully offline, no account, no subscription, and nothing ever leaves your device.

Grab a coffee, this one's chunky. ☕

🎨 A whole new NOOP

We tore the whole interface down and rebuilt every single screen around one clean design language, inspired by Apple Fitness and WHOOP. Not just the home tab. All of it, on iPhone, Mac and Android, in light and dark.

  • 🟢🔵⚪ Clean Apple-style rings for your daily scores. Charge, Effort and Rest now live in three crisp flat colour rings: green for Charge (recovery), blue for Effort (strain), and a calm slate for Rest (sleep). No more heavy gauges or wobbling needles, just clear colour you read in a glance.
  • 🌅 A living day-cycle backdrop behind Today. The home screen now sits under a hand-painted scene that follows your actual clock: sunrise, full daylight, dusk, and a starry night with the moon, all picked automatically from your local time. Your cards float on top so the data stays razor-sharp.
  • 🔤 Apple-clean typography. Everything's set in SF Pro, and every number uses SF Pro Rounded, the same friendly digits you see across Apple's own Fitness and Health apps.
  • ◾ Borderless rounded cards. Flat, near-black, soft corners, no borders. The contrast does all the work, so the app feels calmer and nothing's shouting at you.
  • 📊 New pip bars replace the old gauges. Metrics now fill across a row of clean little segments that light up left to right. Bye-bye stress needle and busy dials.
  • 🟩 A fresh green brand mark. The open ring with a glowing core (it doubles as the O in NOOP) is now a clean green ring with a white centre. Gold's gone completely. The new look is all colour, space and clarity.
  • 🧭 Cleaner navigation and a live cue. Getting around is simpler, and the header glows softly whenever NOOP is actively recording, so you always know it's live.
  • 🎬 Everything moves now. Scores count up to their value, cards rise and fade in one after another, then it all settles. Flip on Reduce Motion and it snaps straight to the end.
  • 🧩 Build your own Today. The home screen is yours to arrange now. Pick which metrics show and in what order, so the numbers you actually care about sit right at the top. Hit CUSTOMISE to set it up.

Same redesign on every device, matched down to the colour, and it looks right whether you run light or dark. 🌗

✨ New in v7

💧 Hydration tracking

A dead-simple, fully local water tracker. Tap to log a drink against a daily goal that actually adapts to you.

Your goal isn't a flat number. It starts from a baseline by profile (3.7 L male, 2.7 L female, 3.2 L otherwise) and nudges up the harder you've trained today, by up to another 0.7 L scaled to your Effort. No Effort logged yet? No fake bump, it just sits at the baseline. So a female profile with an Effort of 50 lands at about 3.05 L for the day. 🧮

Logging is three buttons: Sip (30 ml), Cup (237 ml) and Bottle (500 ml). Every tap stacks onto your running total, the ring fills instantly, and a 7-day bar chart keeps the week in view.

Turn it on: it's off by default. Settings → Features → Hydration tracking drops a Hydration card onto Today (on iPhone, add it via CUSTOMISE). Tap the card for the full screen with the ring, the buttons and your history.

100% on-device, nothing synced. It's a wellness nudge, not medical advice, and it's deliberately minimal in this first cut (fixed amounts, and it stores your day total rather than every individual sip).

🏃 Automatic workout detection

Forgot to hit "start workout"? NOOP can now spot it for you, without ever messing up your data.

After a sync, NOOP quietly scans your recent heart rate for a sustained elevated stretch that looks like exercise (roughly your resting HR + 30 bpm, held for 12 minutes or more). If it finds one, you get a friendly Today card: "Looks like a workout around 14:05-14:32 (avg HR 148, 27 min). Save it?" ✅

It's non-destructive on purpose. NOOP never auto-creates a workout, it only ever asks. Tap Save it and it writes a normal manual-style workout over that window with the average HR filled in (re-label the sport later under Workouts → Edit). Tap Not a workout or the X and that exact suggestion never bugs you again.

Turn it on: off by default. Settings → Features → Auto-detect workouts. It's tuned conservatively so a stressful meeting or a flight of stairs doesn't trip it, which means it'll occasionally miss a short or gentle session. That's the trade we picked: no junk in your log. On-device only, one suggestion at a time, nothing synced.

😴 Smarter sleep

🌙 Experimental sleep staging (V2)

A brand-new, opt-in way to split your night into Light / Deep / REM / Awake that does a noticeably better job of recovering Deep and REM sleep, especially on the nights our default stager flattened everything to "light."

It re-reads each already-detected night from your heart rate, how variable it is, your breathing and your movement, smoothed the way sleep labs do it. Every number in the recipe comes from published sleep science, none of it is fitted to you, and it works on both WHOOP 4.0 and 5/MG.

Turn it on: iPhone/Mac Settings → Experimental · Sleep staging, Android Settings → Diagnostics. Flip "Experimental sleep staging (V2)" on and your next staged nights use it. Flip it off and you're instantly back to the default.

Straight up about what this is: it's labelled experimental because it was validated by its author on a single sleeper across 7 nights (where it lifted agreement with a commercial reference a lot). It needs wider testing, which is exactly why it's opt-in and not the default. It only changes how a night gets split up, it never touches sleep detection, your bed/wake times, or any score. Big thanks to u/sunny-noop for the recipe (#600). 🙏

🛏️ Sleep marks

Log your own "going to bed" and "woke up" boundaries as a personal record. On the Sleep screen, tap Going to sleep when you turn in and I'm awake when you get up, each one timestamped with a confirming buzz. Prefer hands-free? Set your strap's double-tap to "Log a sleep mark" (Settings → Automations) and a quick double-tap writes it straight to your strap log, no screen needed.

Marks are yours alone: saved on-device, they survive a relaunch and ride along in your shareable strap log. They never move the night NOOP detects. This is Phase 1, the groundwork for tap-driven sleep bounds and personal calibration coming later. 🧱

🔬 Under-the-hood sleep + recovery tune-ups

Four algorithm improvements, reimplemented and verified by us from u/ryanbr's community PRs:

  • Steadier resting HR (#686). A single sensor dropout can't drag your RHR implausibly low anymore. A 5-minute window only counts toward your night's floor if it's well-populated and physiologically sane (mean at or above 25 bpm).
  • Better step estimates (#682). Busy, high-movement days now carry more weight when NOOP learns your personal steps-per-motion ratio, so one lazy day can't skew your WHOOP 4.0 step counts.
  • 0%-REM-night diagnostic (#688). When a night reads 0% REM (common on WHOOP 4.0), a read-only diagnostic now explains exactly where REM got lost, so you can triage it from the log instead of guessing. Changes no labels, no scores.
  • Honest RHR logging (#691). NOOP now logs both your resting HR (the lowest sustained 5-minute level, WHOOP-style) and the whole-night mean side by side, so "why is NOOP's resting HR lower than my other app" is answerable straight from the log. It's lower by design, not a bug.

🛠️ Fixes & polish

A proper board-clear. Every one of these we rebuilt on the new design and verified ourselves, never shipped the original code:

  • 🔋 Battery (#514): the "Strap fully charged" notification now clears itself the moment the cell drops below 100%, so it can't sit there lying to you. (all platforms)
  • 🛌 Rest shows the right day (#614): Today no longer borrows yesterday's Rest score on a freshly-synced day. The glitch turned up on Android, but the fix is shared. (all platforms)
  • 🏋️ Hevy import (#649): zoneless Hevy CSV timestamps now land in your device timezone, so a set logged at 18:30 shows at 18:30 local, not in UTC. (all platforms)
  • 🛏️ Sleep-mark persistence (#461): a strap double-tap sleep mark now saves the same row the Sleep screen reads back, giving iPhone/Mac parity with Android. (iOS, Mac)
  • 🔄 WHOOP-4 bond-loop (#617): when a strap keeps bonding then dropping a second later, NOOP now spots the loop and surfaces the forget-and-re-pair guide instead of spinning silently. (all platforms)
  • 🧹 Remove Apple Health data (#616): a confirm-gated button in Data Sources wipes everything imported from Apple Health in one go, leaving your live strap data untouched. (all platforms)
  • 📏 iOS safe-area (#611): the Today top bar no longer tucks under the status bar, fixed as part of the redesign scaffold. (iOS)
  • 💓 Android HR chart (#605): the Health heart-rate chart now updates live as a WHOOP-4 offload banks samples, instead of staying frozen until something else redrew it. (Android)
  • 👯 Cross-source dedup (#687): a live workout and the same activity imported from Health Connect / Apple Health no longer show up twice, NOOP keeps the richer one. (all platforms)
  • 🔍 Backfill diagnostics (#601): three silent failure points in history sync now write clear strap-log lines, so the "live HR works but history won't advance" class is finally debuggable. (iOS, Mac)
  • 🖥️ Mac polish: the sidebar reads as one continuous flat surface, the Today day-nav is a clean translucent pill instead of a black bar, and the notification badge is a proper circle again (no more stretched ellipse). (Mac)

🤯 Oh, and NOOP already does all of this too

In case you're new here: NOOP is a free, fully offline, on-device companion for your WHOOP (and a growing list of other straps). No cloud, no account, no subscription. Here's the rest of what's in the box. 📦

📊 Daily scores, all out of 100. Charge (recovery), Effort (strain) and Rest (sleep), recomputed locally from documented, citable methods. Wake with Charge, spend it as Effort, rebuild it with Rest. Honest "calibrating N nights" states instead of blanks, never WHOOP's cloud scores.

🧭 Readiness & stress. A Readiness verdict (Primed / Balanced / Strained / Run down) built from HRV-vs-baseline, resting-HR drift, respiratory drift and training load, a 0-3 Stress Monitor, illness early-warning, and a plain-English "why" plus the exact math behind every reading.

📡 Not just for WHOOP. WHOOP 4.0 and 5/MG, PPG→HR continuity, the opt-in R22 deep-data unlock, and manage several straps at once. Plus standard BLE chest straps and arm bands (Polar, Wahoo, Coospo, Garmin HRM), gym FTMS machines, run/cycle/power sensors, spot HRV, and broadcast-out to Zwift/Peloton. There are experimental community drivers for Amazfit and Xiaomi too, and offline file-import of Oura, Fitbit, Garmin, GPX/TCX/FIT exports. No cloud, no account, ever.

⏳ Longevity. Fitness Age (weekly, from the published Nes/HUNT VO2max model), a Vitality score, and a Body Age band, all framed as a fitness comparison, never a diagnosis.

🛌 Deep sleep tools. Full hypnogram, browse back through past nights, a movement graph, the Deep Timeline (pinch and zoom into the full-resolution per-second night), a sleep-debt ledger vs your personal need, and a smart main-night picker that handles shift work and naps.

🌡️ Vitals & raw signals. HRV (RMSSD + SDNN from real R-R intervals), live HR with zones, a full skin-temperature suite feeding cycle / circadian / illness tracking, respiratory rate, and raw red/IR PPG and motion banked locally.

📈 Trends, Explore & correlation. Interrogate any metric over time, overlay 2-4 metrics with live Pearson r, n-of-1 behaviour effects from your journal, activity-cost learning, and per-user alcohol and caffeine dose-response with an evening "damage forecast."

🧪 Lab Book & data ownership. Log your own bloods, BP, scans and notes and correlate them against your wearable signals on-device, import your WHOOP / Apple Health / nutrition CSVs onto one timeline, and export a one-page PDF report for a doctor or coach.

🤖 AI Coach, your key, your call. Ask about your data in plain language. The one feature that can ever touch the network, and only after you add your own key (Anthropic, OpenAI, or a local Ollama / LM Studio model, in which case it never leaves your machine). Off by default.

📳 Haptics. HRV breathing biofeedback, a silent interval timer, a smart alarm that arms the strap's own firmware so it buzzes you awake even if the app's closed, zone coaching, and an inactivity nudge.

🖱️ Desktop & glance. Double-tap the strap to lock your Mac, buzz back, or run any Shortcut, a menu-bar live-HR extra, Android home-screen widgets, and per-app wrist-alert routing.

🌍 Speaks your language. English, German, Spanish and Russian on iPhone and Mac, with more languages and Android translations on the way.

🔒 Privacy, 100% on-device. No server, no telemetry, no account. Everything lives in a local database on your device and stays there. Source-available under PolyForm Noncommercial: read it, run it, fork it, mirror it.

🙌 Where this came from

This release is the community's, really. The redesign, the new trackers, the smarter sleep, half the fixes in this list, they all trace back to people filing issues, sending PRs, posting strap logs, and pushing us on how recovery should be scored. We reimplement and verify everything ourselves rather than blind-merging, but the ideas and the testing are yours. Thank you. 💚

The direction is set: NOOP started as a WHOOP app and it's becoming a proper open home for your body data, whatever you wear, fully on your own device. That's the whole point.

Support: NOOP is free forever, every feature unlocked, no ads, no nag. If it's saved you a WHOOP subscription and you fancy chucking something in the tip jar, there's an optional, one-off, fully anonymous crypto tip jar over on noop.fans. Never required, and it changes nothing about the app either way. 🙏

📥 Get NOOP

  • 🍎 Mac: brew tap noopapp/noop && brew trust noopapp/noop && brew install --cask noop (or grab the .app zip below)
  • 🤖 Android: download the APK below and install it
  • 📱 iPhone: sideload the IPA below with AltStore / SideStore using your own free Apple ID, or build from source

Lockstep release across all three platforms. Same version, same redesign, everywhere.

github.com
u/TheNoopApp — 3 days ago
▲ 11 r/NOOPApp+1 crossposts

DISCORD! 💬

It's a spot to chat, show off your setup, kick ideas around, ask the quick stuff that doesn't need a whole issue, and just hang with other people running NOOP. No account, no strings.

One rule though, and I'm dead serious about this one:

Bugs and feature requests ALWAYS go on GitHub. Never Discord.

Here's why I'm firm on it: GitHub is the only place things actually get fixed. An issue there gets tracked, gets your strap log attached, and gets worked on properly. A bug dropped in a Discord chat just scrolls off the screen and gets forgotten, and then it never gets fixed and everyone loses. Same deal with features: kick the idea around in Discord all you like, but if you actually want it on the list, it has to be a GitHub issue or it goes nowhere.

So keep it simple:

  • 💬 Chat, ideas, setups, quick questions → Discord
  • 🐛 Something's broken, or you want a feature → GitHub. Always.\
  • 🤖 Message or @ NOOP Helper if you have a question

Discord: https://discord.gg/nHK9FHczu
Report a bug / request a feature: https://github.com/NoopApp/noop/issues
The app + everything else: https://github.com/NoopApp/noop

See you in there 👋

discord.gg
u/TheNoopApp — 5 days ago
▲ 20 r/NOOPApp

We rebuilt how NOOP scores your sleep, from scratch. Here's the actual research and the algorithm, because you deserve to know we're not guessing...

Hey everyone. This is a long one, and I'm not going to apologize for it, because getting sleep right is the thing I lose the most sleep over (the irony is not lost on me 😅). NOOP 6.0.2 ships a from-scratch rebuild of one specific, deceptively hard problem: given everything we detected overnight, which block is actually your main sleep?

I want to take you on the full journey: how sleep is really measured, why every wearable on your wrist or finger is doing something fundamentally approximate, the precise sub-problem we tackled, and the math we landed on. Grab a coffee. Or don't, if it's late. ☕

1. The gold standard, and why none of us are it

The ground truth for sleep is polysomnography (PSG): EEG on the scalp reading brain waves, plus EOG (eye movement), EMG (muscle tone), ECG, airflow, the works. A trained technician scores your night in 30-second epochs into wake / light (N1, N2) / deep (N3) / REM. That is the actual referee. Brain state, measured directly.

You cannot wear PSG to work. So the entire consumer-wearable field exists to approximate that referee from the outside, using whatever signals you can get from a wrist or a finger. Every single device, ours included, is playing that approximation game. The honest question is never "is it as good as PSG" (it isn't, nothing is), it's "how is it approximating, and where does that approximation break?"

2. Actigraphy: 40 years of inferring sleep from movement

The original trick, and still the backbone of most wearables, is actigraphy: infer sleep vs wake from how much your wrist moves. No brain waves. Just motion.

Generation 1: activity counts and regression. The accelerometer signal gets boiled down to a per-epoch "activity count," and a regression equation scores each epoch.

  • Cole-Kripke (1992) is the original. It scores each epoch from a scaled weighted sum of activity counts in a moving window (a few epochs before and after the one you're scoring), thresholded: below 1 = sleep, at or above 1 = wake. Validated on 41 subjects against overnight PSG, it "correctly distinguished sleep from wakefulness approximately 88% of the time," with actigraphic sleep% correlating r=0.82 and sleep latency r=0.90 with PSG (Cole et al., 1992).
  • Sadeh (1994) uses four features over an 11-minute window centered on each epoch (mean activity, an SD term, a count-of-active-epochs term, and a log-count term) in a linear discriminant; score above zero = sleep. Validated on 20 adults and 16 adolescents, it hit 91-93% epoch agreement with PSG (Sadeh et al., 1994).

There's a beautiful patch on top of these called Webster rescoring (Webster et al., described here, and implemented in pyActigraphy). Five heuristic rules that run after the scorer to fix actigraphy's habit of calling quiet wake "sleep": e.g. after 4+ minutes of wake, the first minute of "sleep" gets flipped back to wake; short sleep blocks marooned in a sea of wake get flipped too. It buys back specificity at a small cost to sensitivity.

Generation 2: raw accelerometer and arm angle. van Hees et al. (2015) threw out activity counts entirely. From raw tri-axial accelerometer data it computes your arm angle relative to horizontal, and calls any stretch where that angle doesn't change by more than 5 degrees for 5+ minutes a "sustained inactivity bout," a candidate for sleep. It's brand-agnostic because an angle is real physics, not a vendor's proprietary count unit. This is the SIB detector in GGIR, and it's gorgeous in its simplicity. The trade: against PSG it ran ~83% accuracy but overestimated sleep duration by about 31 minutes.

The limitation that haunts every single one of these

They all measure movement, not brain state. So lying perfectly still in bed, wide awake, staring at the ceiling, looks identical to sleep. The consequence is a signature failure mode: high sensitivity, low specificity. They catch sleep beautifully (usually >90% in healthy sleepers) and catch wake-within-sleep terribly. On a tough common benchmark (the Newcastle dataset), specificity sat around 47-50% across Cole-Kripke, Sadeh, and van Hees alike (Patterson et al., npj Digital Medicine, 2023). Net effect: actigraphy systematically overestimates total sleep time and degrades worst exactly where you'd want it most, in fragmented and disturbed sleep.

Hold onto that asymmetry. It's the secret villain of this whole story.

3. How the big players stage sleep, and how good they actually are

To go beyond "asleep vs awake" and actually call light / deep / REM, you need more than motion. The actigraphy state-of-the-art review (Patterson et al., npj Digital Medicine, 2023) makes the point plainly: four-level staging needs more than an accelerometer. You need PPG, the optical heart-rate signal, layered on top of motion.

That second sensor, PPG, is the green light on the back of your watch optically reading your pulse, giving heart rate and pulse-rate variability (a proxy for HRV). Each sleep stage carries an autonomic fingerprint: parasympathetic dominance and low, steady HR in deep NREM; more variable HR and sympathetic activation in REM. Fuse motion + HR/HRV, throw it at a machine-learning classifier in 30-second epochs, and now you can attempt 4-class staging. Some devices add skin temperature for circadian context.

So how good is it, really? The validation literature is humbling and worth knowing:

  • WHOOP (Miller et al., 2020): for sleep-vs-wake, 89% agreement, 95% sensitivity to sleep, but 51% specificity for wake (there's our villain again). For 4-stage, 64% overall agreement (light 62%, deep 68%, REM 70%, wake 51%), kappa 0.47.
  • Oura (de Zambotti et al., 2019): stage agreement 65% light, 51% deep, 61% REM; 96% sensitivity to sleep but 48% specificity for wake. It underestimated deep sleep (N3) by about 20 min and overestimated REM by about 17 min.
  • Seven devices head-to-head (Chinoy et al., 2021): sleep sensitivity uniformly ≥0.93, wake specificity a scattered 0.18-0.54, and stage agreement that swung wildly by stage and got worse on disrupted nights.

Notice the pattern repeating across every brand and price point: great at catching sleep, weak at catching wake, shaky at stage boundaries, worst when your night is messy. This isn't a knock on any one company. It's physics. You're inferring a brain state from a wrist.

Here's where I want to be completely straight with you: NOOP is in the actigraphy class. We estimate sleep from accelerometry + HR + HRV, same fundamental ingredients, same fundamental ceiling. And 6.0.2 did NOT touch stage classification. Your light/deep/REM split is unchanged in this release. I'm saying that loudly because it would be easy and dishonest to wave "new sleep algorithm" around and let you assume we cracked staging. We didn't. We fixed something else, something that was quietly wrong, and arguably more impactful for a lot of you.

4. The actual problem: which block is your night?

Here's a thing nobody warns you about when you build a sleep tracker. Detecting a sleep block is solved-ish. But on a given day you might have several detected blocks: a real night, a long afternoon crash after a brutal shift, a couch nap, an early-evening doze. The detector finds all of them. Then somebody has to answer: which one do we call your main sleep for the day?

Get that wrong and everything downstream lies to you. Your recovery anchors to a nap. Your "last night" card shows a 90-minute afternoon doze. Your trends wobble. The staging could be flawless and you'd still be furious, because we pinned the wrong block.

And here's the lovely part: this is not really a sleep-detection question at all. It's a circadian-phase question. Which block is your night depends on when your body thinks night is.

Chronobiology has a clean handle for that: mid-sleep, the clock-time midpoint of your main sleep. It's the core variable in the Munich ChronoType Questionnaire (MCTQ); your chronotype basically is your habitual mid-sleep, and the mismatch between your workday and free-day mid-sleep is literally how "social jetlag" is defined. A night owl and a lark can both sleep 8 hours and have completely different mid-sleeps. So the right question isn't "which block is biggest," it's "which block sits where your night usually sits?"

What we had before, and why it was wrong

The old NOOP used a hard "evening-onset wins" gate: whichever block started in the evening was your night. One fixed circadian phase, baked in, assumed for every human on Earth.

You can already see who that fails. Night-shift workers. New parents. Anyone whose real main sleep starts in daylight. For them, a long, genuine, daytime-onset sleep got branded a nap, and some flimsy evening doze got crowned the night. That's not a tuning issue. It's the wrong model of a human. So we deleted it.

5. The new algorithm: score on duration + circadian alignment

The new selector is a scored model, and the whole idea fits on a napkin:

score(block) = asleep_minutes + alignment_bonus

Pick the highest-scoring block as your main sleep. Two ingredients:

1. Duration (asleep_minutes). Real nights are usually long. This is the honest, boring base, and it does most of the work. It's also our nod to the literature: duration is the one thing actigraphy-class detection is genuinely good at.

2. Circadian alignment (alignment_bonus). This is the chronobiology. A block earns up to 90 bonus minutes for sitting near where your night usually sits. It decays linearly with the circular distance between the block's midpoint and your learned habitual mid-sleep: full 90 within ±2 hours, fading to zero by ±5 hours. A block landing dead-on your usual mid-sleep gets the full nudge; a 3pm nap gets essentially nothing.

The bonus is deliberately bounded at 90 minutes, and that cap is the entire safety mechanism. It's big enough to rescue a slightly-shorter, perfectly-timed real night over a longer-but-badly-placed block. It is too small to ever let a nap outrank a genuine night. A 25-minute power nap parked exactly on your mid-sleep maxes out at 25 + 90 = 115; your 7-hour night, even an hour off-phase, crushes it. We proved that bound holds (more in the validation section).

Learning your mid-sleep (this is the chronobiology part I'm proudest of)

The bonus is only as good as the "where your night usually sits" it points at. So we learn your habitual mid-sleep from your own history, and we do it with textbook directional (circular) statistics, because time-of-day is an angle on a 24-hour circle, not a number on a line. Naively averaging clock times is a classic bug: the mean of 23:00 and 01:00 is "midnight," but arithmetic on the raw hours screams "11am." You have to do it on the circle.

So here's the recipe:

  • Take the longest block per day over a trailing ~14 days (longest-per-day means naps are excluded automatically, no heuristics needed).
  • Crucially, learn from the raw detected blocks, not from our own prior picks. This is on purpose: if we learned from yesterday's decisions, a single bad call would feed itself forever. Learning from raw signal breaks that feedback loop. 🔁🚫
  • Map each midpoint to an angle, sum the sines and cosines, and take atan2(Σsin, Σcos) to get the circular mean. That's your habitual mid-sleep.
  • The resultant length R (how tightly those vectors bunch) falls out for free as a regularity score: high R = a metronome sleeper, low R = all over the map. We special-case the degenerate R≈0 sleeper so a near-random history can't produce a confidently-wrong phase.
  • Cold start: new users with no history fall back to a broad population night window as a weak prior, just enough to be sane on day one, light enough to get out of the way the moment your real pattern emerges.

And one consolidation nicety: brief sub-hour wake gaps get bridged, so a 4am bathroom trip doesn't shatter one night into two competing fragments.

That's it. Duration you can trust, plus a bounded circadian nudge learned from your own clock, on the circle, naps auto-excluded, no feedback loop. Nothing exotic. Every piece is something a chronobiologist would recognize on sight, which is exactly the point. We didn't invent new science here. We just stopped pretending everyone's night starts at 11pm.

6. How we validated it

I don't ship sleep changes on vibes. This one went through:

  • An exhaustive nap-vs-night sweep, a regression test that hammers the scoring across block lengths and phase offsets and proves the 90-minute bound holds: no nap configuration can outscore a real night. That test is now permanent, so the bound can never silently regress.
  • Replay on real WHOOP exports, running the new selector over actual messy nights (including the daytime-onset and multi-block days that broke the old gate) and checking it picks the human-obvious answer.
  • Bit-for-bit Swift/Kotlin numerical parity. The same night must produce the same pick on iOS/Mac and Android, down to the libm/floating-point edge cases. Circular math has sharp corners (atan2 quadrants, the R≈0 degeneracy); we pinned them on both platforms.
  • An adversarial review pass whose entire job was to break it, and which caught real defects before any of you saw them.

7. What we honestly do NOT claim 🙅

Trust is the only currency I care about here, so the limits, plainly:

  • We did not improve stage classification. Light/deep/REM is untouched in 6.0.2. Same ceiling as section 3. Same as everyone.
  • We do not reconstruct WHOOP's cloud scores. NOOP recomputes from raw signal on your device. It is its own thing, not a mirror of WHOOP's numbers.
  • "Repeated Rest across days" is not the scorer. If you saw the same sleep show up on multiple days, that's an imported row winning the per-day merge, not the selection algorithm. We now surface that with a measured-vs-imported badge so you can see exactly which it is.
  • We're still actigraphy-class. We catch sleep well and wake imperfectly, like every device in section 3. The new selector makes us pick the right block; it does not repeal physics.

8. You can see the why, right in the app

This isn't a black box. For each day NOOP now shows you which block it picked and why: the candidate blocks, the duration each contributed, the alignment bonus each earned, and your current learned habitual mid-sleep with its regularity (R). If we picked a block you disagree with, you can see the arithmetic instead of guessing. And the measured-vs-imported badge tells you instantly whether a given night came off your strap or from an import. Explainability isn't a nice-to-have for health data. It's the whole deal.

9. Help us make it better 🙏

Here's where you come in, and it genuinely matters. Edge cases live in your sleep, not mine. If NOOP picked the wrong main sleep on any day, I want it.

Please open a GitHub issue (or add to the pinned one) with:

  1. Your strap log, and
  2. The specific date(s) it got wrong, and what you believe the correct main sleep was.

Pinned issue: #555. Release notes and download: https://github.com/NoopApp/noop/releases/tag/v6.0.2

Night-shift folks, new parents, polyphasic sleepers, anyone with a beautifully chaotic schedule: you are the best testers on Earth for exactly this feature. Send me your weirdest nights. 🌗

Sleep is the one number that quietly drives every other number in this app, and "which block was your night" was the unglamorous bug sitting under all of it. Now it's a real model, learned from your clock, on the circle, with a bound we can prove. Thanks for reading the whole thing. Go to bed. 😴

reddit.com
u/TheNoopApp — 6 days ago
▲ 17 r/NOOPApp

Why NOOP exists — open code, less e-waste, and your right to your own body's data...

NOOP is a small thing: a free app, made by one person, that reads a strap you already own. But the reasons it exists are old, big, and worth saying out loud — because they're the same reasons a lot of you found your way here. Grab a coffee; this one's a bit from the heart, but it's got receipts.

Your body's data should be yours

You bought the strap. It reads your heartbeat, your sleep, your recovery. The idea that you should pay a monthly subscription, hand the most intimate data you have to a company's cloud, and log into an account just to look at your own pulse — NOOP quietly refuses that.

NOOP runs entirely on your device. No account. No cloud. Nothing leaves your phone — not because we promise we won't peek, but because there's no server for it to go to. Your data stays yours because it never travels. Health data is as personal as information gets, and the ability to see and understand your own body shouldn't sit behind a paywall or a login. That's not a feature. It's a line.

Open code is trust you can actually check

The free-software movement has been making this argument for forty years. Richard Stallman's framing — software should be "free as in freedom, not free as in beer" — was about exactly this: the right to see what a program does, and change it. Eric Raymond's "Linus's Law" (from The Cathedral and the Bazaar) put the engineering case simply: "given enough eyeballs, all bugs are shallow." Linus Torvalds gave Linux away, and it now quietly runs most of the internet, every Android phone, and the world's supercomputers. Tim Berners-Lee invented the web and released it royalty-free — no patent, no toll booth. The most important tools we have were given, not sold.

NOOP stands in that tradition: it's source-available. You — or any developer you trust — can read every line, build it yourself, and verify that "offline" really means offline and that the science is really the science. You don't have to believe a marketing page. You can read the code. (It's licensed for non-commercial use, so it's "source-available" rather than the strict OSI definition of open source — but open in the ways that count: readable, buildable, checkable.)

Aaron Swartz, in his 2008 Guerilla Open Access Manifesto, argued that locking knowledge away from the people it could help is a kind of theft from the future. Health is knowledge too. The tools to understand your own body shouldn't be gated either.

Less e-waste: keep good hardware alive

Here are the hard numbers. The UN's Global E-waste Monitor 2024 found the world threw out 62 million tonnes of electronics in 2022 — and less than a quarter (22.3%) was properly collected and recycled. It's rising about 2.6 million tonnes a year, on track for 82 million tonnes by 2030.

A massive share of that is gear that still works perfectly. It got bricked by a dead subscription, a sunset cloud service, or a company that simply moved on. When a wearable only works while you keep paying, and only talks to a server the maker controls, the day that stops — it's landfill.

NOOP turns a subscription-locked band into a device you actually own. It keeps working, offline, free, for as long as the hardware lives. The right-to-repair folks have a line for this — iFixit's manifesto: "If you can't fix it, you don't own it." Same spirit. The greenest gadget is the one you already have and get to keep using.

One person can still matter

This whole project is one developer, in their spare time — no company, no funding, no team. That's not a complaint; it's kind of the whole point. Standing on open research ("if I have seen further, it is by standing on the shoulders of giants" — Newton), with open tools and a community willing to test, a single motivated human can build something that goes toe-to-toe with a funded product on the things that actually matter: honesty, privacy, ownership.

Cory Doctorow coined a word for the opposite path — "enshittification" (2022; it was literally named Word of the Year) — the way platforms rot as they squeeze users harder and harder for growth. A free, offline, no-account app has nothing to enshittify. No ads, no growth team, no data to sell. It just has to be good, or you'll leave. That's a healthier deal for everyone.

Why this community matters more than you think

Honest mechanics: one dev can't own every phone, every WHOOP, every weird Bluetooth stack on Earth. The only reason NOOP improves week after week is you — the person who pastes a strap log, who says "this looks off," who tests a fix on the one phone that breaks everything. (This week alone, a single detailed log cracked a pairing bug that'd been haunting a specific Android phone for ages.)

Open source has always been a commons — many hands, shared benefit. Every bug you report quietly improves the app for everyone else using it, people you'll never meet. That's not a transaction; it's a gift economy, and it genuinely works. You're not the audience here. You're the other half of the project.

It does take money (the honest part)

NOOP will never charge you, never paywall your data, never run an ad. But it isn't free to run — there's hosting, infrastructure, and a lot of unpaid hours behind every release. If NOOP has saved you a subscription, or you just believe in the idea of health tools that respect you, chipping in keeps the lights on. It's optional, never expected, and even a few dollars goes further than you'd guess — it's the difference between this being sustainable and being a thing one person burns out on.

  • BTC: bc1qn2gkl7wslwpws06mvazjn2uu689zlkv7kg3kf5
  • ETH: 0xd64D508b531c4b1297Ca4023C774e0E97aA67B7F
  • (or the Support option in the app)

The bigger picture

NOOP is small, built by one person, and rough in places. But the idea underneath it is large and old and good: the tools to understand your own body should be yours — open, repairable, private, and not for sale. Less waste. More ownership. Knowledge that isn't gatekept. A future we'd actually want.

Thanks for being here, for kicking the tyres, and for proving a small thing made with care can matter. That's the whole project. ❤️🔧

reddit.com
u/TheNoopApp — 7 days ago

The science behind NOOP — what we actually compute, the research it's built on, and why you can't 1:1 compare our numbers to anyone else's

There's a fair question that comes up: "How does NOOP get its numbers, and how do they line up with [other app]?" The honest answer to the second half is they don't line up, and they're not supposed to — and once you see how NOOP works, that'll make sense. Here's the whole thing, with the actual algorithms and the published research behind each one. None of this is a black box: the code is source-available, and every calculation cites its sources right in the file.

The core idea: raw signals in → our own math out

NOOP never reads anyone's cloud scores and never reproduces a proprietary algorithm. It can't, and it wouldn't. What it does instead: take the raw signals your strap actually produces — heart rate, beat-to-beat timing (R-R intervals), motion, skin temperature — and run published, open, peer-reviewed methods on them, on your device.

That's why our scores have our own names — Charge, Effort, Rest. They're our own computations, with our own inputs and weights, defined by us out of open science. So:

>

⚡ Effort — your cardiovascular load (0–100)

How hard your heart actually worked, computed from every heartbeat across the day:

  1. Heart-Rate Reserve — HRR = HRmax − resting HR (Karvonen, 1957). Max HR is estimated from your own observed history, or Tanaka et al. (2001) 208 − 0.7×age as a fallback.
  2. Per-second intensity as % of your HRR.
  3. Training load (TRIMP) accumulated via Edwards' (1993) 5-zone method, or Banister's (1991) exponential model.
  4. Log-compressed onto 0–100 so easy days sit low and genuinely all-out days are rare.

📄 Read it: StrandAnalytics/StrainScorer.swift — the four references are right in the header.

🔋 Charge — your recovery (0–100)

How recovered you are, weighted toward the most evidence-backed signal — heart-rate variability:

  • HRV (RMSSD) vs your personal baseline — 55%
  • Resting HR — 20% · Sleep (your Rest score) — 15% · Respiration — 5% · Skin-temperature deviation — 5%

Each input is turned into a robust z-score against your own rolling baseline, summed, and squashed through a logistic curve. The HRV math follows the Task Force of the ESC/NASPE (1996) standard.

📄 Read it: StrandAnalytics/RecoveryScorer.swift

😴 Rest — your sleep (0–100)

Sleep is detected and staged from motion + cardiac signals (no EEG on a wrist strap):

  • In-bed/asleep detection: gravity-vector stillness via the Cole–Kripke actigraphy index (te Lindert 30-second weights), confirmed against your heart rate.
  • Staging (light/deep/REM/wake): percentile bands over 5-minute features — mean HR, HR variability, RMSSD, and a respiration estimate.
  • The score blends duration-vs-your-need (50%), efficiency (AASM definition, 20%), restorative share = deep+REM (20%), and timing consistency (10%).

We're upfront about the ceiling here: EEG-free wrist staging tops out around 65–73% epoch agreement (Walch et al., 2019) — that limit is cited in the code itself. It's good for trends, not a lab study.

📄 Read it: StrandAnalytics/SleepStager.swift

💓 HRV, done properly

RMSSDSDNNpNN50 per the Task Force (1996) definitions, after a real cleaning pipeline: physiologic range filter + Malik et al. (1989) ectopic-beat rejection, requiring ≥20 clean intervals before it'll trust a reading. The code even documents which reference classifier it substitutes and why (on-device constraints).

📄 Read it: StrandAnalytics/HRVAnalyzer.swift

🏃 Fitness Age & VO₂max

  • VO₂max from the Nes et al. (2011), HUNT Study non-exercise model (Med Sci Sports Exerc 43(11):2024–2030) — the original coefficients are reproduced verbatim in the code, and we deliberately use the validated waist-circumference variant, not an unconfirmed secondary version.
  • The activity input is reconstructed from your measured training (Kurtze et al., 2008 PA-Q scale), not a questionnaire.
  • Fitness Age inverts that to "what age would a reference person with your fitness be?" — shown in a ±5-year band, never false precision.

📄 Read it: StrandAnalytics/FitnessAgeEngine.swift · docs/FITNESS_AGE.md

🧬 Vitality & Body Age

Built on published all-cause-mortality hazard ratios for things wearables can measure (resting HR, fitness, sleep duration & regularity, HRV, daily steps) from large cohorts (UK Biobank, FRIEND, step- and sleep-mortality meta-analyses), converted to a "years of aging" offset via the classical Gompertz mortality model (~doubling every 8 years). Coefficients are deliberately conservative and clamped, and it's framed as a wellness trend — not a biological or clinical age.

📄 Read it: StrandAnalytics/VitalityEngine.swift

🫁 Breathe — real HRV biofeedback

A closed loop: it sweeps breathing paces (4.5–7 breaths/min), measures your respiratory sinus arrhythmia to find your resonance frequency (Lehrer & Gevirtz), then paces you with the strap's haptic motor and measures your HRV response before/after. Measure → act → re-measure, all on-device.

📄 Read it: StrandAnalytics/ResonanceEngine.swift

🟡 The honest limits (this is the point, not the fine print)

  • Wrist sleep staging isn't lab EEG — ~65–73% ceiling, as above.
  • VO₂max / Fitness Age live in a ±5-year band on purpose.
  • Body Age is a wellness trend, not a clinical/biological age.
  • SpO₂: we do not compute it from the raw optical data — that needs proprietary calibration to be trustworthy, so we only ever show it if your own export already contains it. We don't fabricate a number.
  • Steps on the WHOOP 4.0 are a per-user-calibrated estimate, not a true pedometer.
  • None of this is medical advice or a medical device.

✅ Don't take my word for it — verify it

That's the whole ethos. Everything above is checkable:

  • Plain-English methodology: docs/ANALYTICS.md
  • The actual formulas: the StrandAnalytics package — each scorer file lists its references in the header.
  • In the app: Settings → "How your scores work."
  • All of it: https://noop.fans/NoopApp/noop

Open methods, open code, honest limits, our own identity. That's why NOOP is its own thing — and why the right comparison isn't our number vs theirs, it's can you see how the number was made? With NOOP, you can. 🔧

reddit.com
u/TheNoopApp — 7 days ago
▲ 32 r/NOOPApp

NOOP V5! Probably the biggest release to date - 'the raw-signal release' 🛜

NOOP v5.0.0 — the raw-signal release

Everyone else shows you a score their cloud computed, behind a subscription. NOOP reads your strap's raw signals — beat-to-beat timing, red/IR PPG, motion, skin temperature — and does all the maths on your own device, free and offline. And it's the only one that can actually breathe you back down.

This is the biggest release NOOP has ever shipped. v5 turns NOOP from a WHOOP companion into a raw-signal platform: it reasons from the signals your strap already produces, computes everything on your device, private and free, and — uniquely — can act on your body through the strap's haptic motor. Seven new pillars, a private logbook for your own health numbers, and a tidy new home that puts everything under five places instead of a long flat list.

A quick note on what's not new: your data, your history, your scores. Internal data keys are unchanged, so every night, import and backup you already have keeps working exactly as before. v5 just gives it all a coherent home — and a lot more to do.

>NOOP is independent and unofficial. It is not the WHOOP app and is not affiliated with WHOOP. It reads a strap you own, on a device you own, fully offline — no account, no cloud, no subscription.

Why v5 is different

The whole wearable category sells you the same shape of thing: a band that streams to a company's servers, which compute a score and rent it back to you. NOOP is the local-first, signal-first alternative, and v5 makes that the entire story:

  • Reads the raw signal — red/IR PPG, beat-to-beat R-R, 3-axis motion, skin temperature — not a cloud verdict.
  • Computes on your device — no account, no cloud, no subscription, fully offline.
  • Can act on your body — the haptic motor paces your breathing and trails your heart rate down. The only one of these apps that can breathe you back down.
  • Fuses every band you own, locally — WHOOP + a second band + Apple Health / Health Connect, on your device, with the source named on every number.
  • Honest about limits — Calibrating / Building states, "approximations, not a clinical reading", never a diagnosis.

For context on cost: WHOOP's own app runs around $200–480/yr in membership depending on tier, and gates features like ECG / irregular-rhythm notifications to its top hardware and plan. NOOP is free and offline.

The new home (five places, not twenty-three)

The most-repeated piece of feedback was that features were "spread across navigations without clear separation." v5 collapses everything into five hubs — every screen survives, it just gets a clear home:

  • Today — what's true right now.
  • What Moves You — your own patterns, the dose-response insights, the Coach.
  • Health — your body's longer arc: heart, sleep, skin temperature, Lab Book, Your Data Fused.
  • Devices & Sources — your bands and everything you've imported.
  • Settings — automations, notifications, appearance, the disclaimer.

Live HR and Breathe are actions on the centre button, not destinations. Any feature is at most two taps away.

1. Haptic biofeedback — "the strap that breathes you down"

What it is. NOOP already measures your nervous system from your heart's beat-to-beat timing. v5 closes the loop: it can now act on it, pacing your breathing through the wrist motor with the screen off, then showing you the measured change. No other strap/ring app does this — theirs don't buzz, don't expose raw R-R locally, or don't compute on-device.

Why it's different. It's the proof that NOOP doesn't just report — it intervenes. A felt cue on your wrist means you can close your eyes and pocket the phone. It's three layers, each off by default and opt-in, and all built on the breathing trainer and buzz path NOOP already ships.

How to use it

  1. Find your calm pace (one time). Open Breathe, switch to the Resonance mode, and tap "Find your resonance pace." Pick Full sweep (~13 min) or Quick sweep (~7 min). NOOP paces you through a handful of breathing rates and reads which one your heart responds to most — your resonance pace — and locks it (you'll see "Your locked pace · 5.5 br/min" and an "RSA response by pace" curve). If it can't read enough clean beats, it says "Couldn't lock today" and you just try again rested.
  2. Breathe to it. Back in Breathe, your sessions now pace to your locked pace. Inhale on the light buzz, exhale on the double buzz, screen off if you like. At the end you get the measured outcome line ("+18% vs start · peak 64 ms").
  3. "Calm me" in a stressed moment. On the Stress screen (or the stress check-in card), tap "Calm me · 3 min." NOOP reads your live heart rate and buzzes a felt metronome a few beats below it, recomputing as your heart follows down. You'll see "HR 78 → settling." If your HR doesn't drop, it tells you honestly and offers a paced breath instead — no fake win.
  4. Let it check in on you (optional). Settings → Automations → "Stress check-ins (haptic)" (off by default). When your HRV dips while you're still — not exercising — NOOP offers a one-minute breathing cue with a single buzz and a dismissible card ("Your HRV dipped while you were still — want a minute to breathe?"). Sub-toggles let you set quiet hours and whether it uses your resonance pace.

Read it honestly. WHOOP's R-R is PPG-derived, not ECG, so HRV/RSA here are estimates. This is guided breathing and relaxation — not a treatment, not a medical device. "Stress" is an autonomic estimate from your own baseline, never a diagnosis. The buzz-below-HR cue is a rhythm to relax toward, bounded and auto-stopping — not cardiac control.

2. What Moves You — your own n-of-1 insights

What it is. A personal engine that ranks what actually moves your recovery, plus a personalised alcohol/caffeine dose-response and an evening "what will one more cost me?" forecast.

Why it's different. WHOOP's Behaviors and Oura's tags show you population averages — "alcohol typically lowers recovery." NOOP computes the effect on your own data, on-device, is lag-aware (today's drink → tomorrow's recovery), and — crucially — is honest when your data disagrees with the population ("in your data so far, this doesn't move your Charge"). No competitor can match the evening forecast, because it needs both your per-user data and an on-device recovery model. NOOP has both.

How to use it

  1. Open "What Moves You" (the wand-and-sparkles entry in the sidebar, or via Insights).
  2. Read "What moves your Charge." Each card is a behaviour you log, ranked by its real effect, with a with/without comparison, a lead/lag chip ("next morning" / "same day"), and a confidence pill — Solid / Building / Calibrating — so a thin behaviour reads honestly instead of shouting.
  3. Log alcohol and late caffeine with an amount. When you answer those journal questions, add the dose (e.g. 0 / 1 / 2 / 3+ drinks; for caffeine, how late). NOOP fits a personal dose-response curve — until you've logged enough nights it leans on typical patterns and says so ("based mostly on typical patterns — not yet yours"); once it has your nights, the curve becomes truly yours.
  4. Check tonight's forecast. In the evening, Today shows a damage-forecast card — "a 2nd drink tonight tends to line up with about −7 on tomorrow's Charge for you (−3 to −11)" — with a stepper to preview 1 vs 2 vs 3. In the morning it shows the realised effect instead.

Read it honestly. Everything is "patterns in your own data" — an association, never a cause, never advice to drink or abstain. Population priors are labelled as priors and are always overridden by your own data once it exists. Wide bands mean low confidence; that's the point.

3. Skin-temperature suite — three features off one underused signal

What it is. WHOOP streams skin temperature every night and NOOP already banks it. v5 reasons from it three ways: cycle awareness, a Body clock jet-lag/shift helper, and a confounder-suppressed illness Heads-up — all on-device, free.

Why it's different. These are some of the most-requested wearable features, and everyone who ships them ships them as a cloud, paywalled, account-bound product (Oura sells cycle tracking on a subscription). Reproductive-health and illness signals are the most sensitive data a person owns — and NOOP's structural answer is the one a cloud product can't give: this data is physically incapable of leaving your device.

How to use it

  1. Skin temperature lives in Health. Open Health → Skin temperature.
  2. Cycle awareness (opt-in). Tap "Turn on cycle awareness." Over a cycle or two NOOP learns your nightly pattern and shows a coarse phase — Follicular / Peri-ovulatory / Luteal — with a confidence chip. You can optionally tap "Log period start" to sharpen it. A period estimate is always a window, never a hard date.
  3. Body clock. See an estimate like "About 25 min later than your schedule," then "Plan a trip or shift" for a day-by-day light + sleep-timing plan to close a jet-lag or shift gap.
  4. Heads-up (illness early-warning). Toggle Settings → Automations → "Illness early-warning." When several of your signals drift in the illness direction, NOOP shows a calm banner with the why ("RHR +6, HRV −22%, skin temp +0.7 °C") and what it ruled out — and if you logged alcohol, a sauna, stress or travel, it downgrades to "Probably not illness" and tells you so, instead of crying wolf.

Read it honestly. Cycle awareness is awareness only — not contraception, not a fertility predictor, not a medical service. Body clock is light + sleep timing only — never supplements. Heads-up is "a heads-up to rest," never names a condition, and always carries "On-device estimate — not a diagnosis." When a signal is flat or irregular, NOOP says "no clear pattern" rather than inventing one.

4. Your Data, Fused — one honest record across your bands

What it is. If you wear more than one device, NOOP fuses them into a single record on your device — picking the best source per metric, naming that source on every number, and flagging disagreement instead of hiding it.

Why it's different. The market splits two ways: single-vendor apps that won't read a competitor's band, and cloud aggregators that normalise everyone's data by routing your raw biometrics through their servers. NOOP sits in the third corner — it fuses many bands locally. A cloud aggregator structurally can't promise "nothing leaves the device." That's the whole point.

How to use it

  1. Open "Your Data, Fused" from Health (or Data Sources).
  2. Each core metric shows the winning value, a provenance pill ("from WHOOP", "from Mi Band"), and a one-line reason when "best signal" needs justifying ("counts directly", "best stager").
  3. Where two bands agree, you'll see a quiet parenthetical ("Apple Health agrees: 53"). Where they differ materially, NOOP flags it — "Sleep 7h 12m · from WHOOP · ⚠ Apple Health says 6h 40m — tap to compare" — and the Compare sources sheet shows every source side by side and which one NOOP is using, and why. It never silently averages a conflict.
  4. A single WHOOP with nothing else just shows a clean plain record — no manufactured multi-source noise.

Read it honestly. "Best signal" means higher-trust for this metric, with a stated reason — never "accurate", "correct", or "clinical". A disagreement is a transparency note, not a claim that either reading is medically wrong. It introduces no new data collection; it only re-presents what you already imported, and nothing leaves the device.

5. Lab Book — your own private health logbook

What it is. A private place to keep the health numbers you already own — bloods, blood pressure, scan values, body measurements, doctor's-visit notes — typed in (or imported from a CSV), with each marker's trend and the option to line a marker up against your wearable signals. Entirely on your device.

Why it's different. It's the inverse of a "labs" subscription. WHOOP/Function/Superpower sell you blood tests and store the results in their cloud, behind a subscription, where the company reads them. NOOP's pitch is the opposite, and it's structurally impossible for them to copy without dismantling their model: you bring numbers you already own, and they never leave the device. No test to buy, no lab partner, no server.

How to use it

  1. Open Health → Lab Book. Read the one-time "A private notebook, not a medical service" note (tap "Got it").
  2. Add a marker. Tap "Add a reading", search the marker list (e.g. "LDL", "ferritin") or "Add a custom marker" with your own name + unit. Enter the value, the date/time taken, an optional note, and — if you like — the reference range from your own report. Blood pressure is entered as a systolic + diastolic pair.
  3. See the trend. Each marker shows its reading history and a plain trend line ("3 readings, trending down").
  4. Compare with a signal. On a marker, tap "Compare with a signal", choose a wearable metric (resting HR, HRV, sleep, Charge…) and a 7/14/30-day window. NOOP lines the two up and, when there are enough readings, gives a restrained "when X is higher, Y tends to be…" sentence. Below the floor it shows the dots but withholds a conclusion.
  5. Import a CSV (optional) from the Markers CSV card in Data Sources.

Read it honestly — this one matters most. Lab Book is a private notebook, not a medical service. NOOP stores and lines up the numbers you enter yourself. It does not test you, read your results, decide whether a value is "normal", "high" or "low", or diagnose anything — any reference range shown is exactly what you typed from your own report. Anything you see, including a side-by-side trend, is your own information shown back to you: an association, never a medical finding. Your records never leave your device; because NOOP is an independent app you run yourself — not a healthcare provider — it is not "HIPAA-covered", and the protection here is that the data is local-only and yours. Always rely on your doctor, pharmacist or a qualified professional to interpret results.

6. Rhythm (experimental) — a picture of your beat-to-beat timing

What it is. On every strap (4.0 and 5/MG), NOOP can draw a Poincaré scatter of your beat-to-beat intervals during quiet rest, with plain descriptive stats (SD1, SD2, the SD1:SD2 ratio) and a calm categorical read.

Why it's different. It's honest about being a picture, not a verdict. WHOOP gates ECG and irregular- rhythm notifications to its top hardware and a ~$359/yr tier; a WHOOP 4.0 owner has no path to even a rough look at their own beat timing. NOOP gives them that look — descriptively, conservatively, on-device — while making zero clinical claims.

How to use it

  1. Settings → Rhythm → "Turn on Rhythm." Read the consent screen ("Before you turn on Rhythm"), which spells out that it's experimental, not a medical device, and tick the box to proceed. It stays off if you back out.
  2. Read the picture. After a quiet resting window, the Rhythm screen shows your beat-to-beat scatter ("tight comet" vs "diffuse cloud"), the descriptive stats, and a plain state — Rhythm — steady / Some occasional extra or skipped beats / Your rhythm varied more than usual — plus an honest confidence line ("Building — one short window").

Read it honestly. It is a visualisation, not a verdict: not an ECG, not a diagnosis, not a medical device, and it cannot detect, rule out or monitor any heart condition. Variation in beat-to-beat timing is normal and often completely benign. There are no alarms, no red, no condition names, and no 3 a.m. notifications — by design. If you ever feel unwell or are worried, contact a qualified professional; in an emergency, your local emergency service.

7. A smarter — and still completely private — AI Coach

What it is. NOOP's opt-in, bring-your-own-key Coach can now optionally reason over your on-device patterns (recovery drivers, your discovered correlations) and your Lab Book markers, and tell you which of your numbers it actually read.

Why it's different. Other apps' assistants run in their cloud over their scores. NOOP's Coach runs under your key, with your choice of provider, orchestrated on your device — and the privacy line is a hard invariant: only a compact text summary of computed values is ever sent, never your raw R-R, PPG or motion.

How to use it

  1. Open Coach, pick a provider and paste your own API key (or point a custom provider at a local server).
  2. Turn on "Let the coach use my data" (off by default) to let it read your core metrics.
  3. For the deeper context, also turn on "Also share my patterns & Lab Book." Off by default — your bloods are more sensitive than a recovery score, so they're a separate, explicit choice.
  4. Ask a question. The Coach reads only the summaries it needs and shows a "based on…" footer naming them, so you can verify every number yourself.

Read it honestly. The Coach is the only place NOOP touches AI, and only as your own choice of provider under your own key. It gives wellness and lifestyle suggestions — it does not diagnose, does not name conditions, and always defers to a professional. Nothing leaves your device until you've added a key, switched consent on, and asked a question.

Install

Everything is on the Releases page and at noop.fans.

macOS (Apple silicon + Intel universal build):

  • Homebrew:
  • Or download NOOP-v5.0.0-macOS.zip, unzip, and drag NOOP to Applications. (NOOP isn't notarized — on first launch, right-click → Open to get past Gatekeeper.)

iPhone / iPad — sideload NOOP-v5.0.0-iOS.ipa with AltStore or SideStore. Add the NOOP source from noop.fans so updates flow automatically. (A free Apple ID can't grant Apple Health access; use the file-import path if you sideloaded that way.)

Android — download and install NOOP-v5.0.0.apk (you'll need "install unknown apps" enabled for your browser/files app).

Already on NOOP? Your data, history and backups carry straight over — internal keys are unchanged.

The honest small print

  • Independent and unofficial. NOOP is not the WHOOP app and is not affiliated with WHOOP.
  • WHOOP 4.0 is the supported path. 5/MG live heart rate works; deeper 5/MG metrics are still being figured out. NOOP always tells you what's live vs still building.
  • Experimental features are labelled. Resonance detection, the haptic-paced wake, skin-temp estimates and Rhythm are explicitly experimental and sharpen over a week or two of wear. Under-promise, over-deliver.
  • Not medical. Nothing in NOOP is a diagnosis or medical advice. Lab Book is your own logbook (it ships no reference ranges and isn't HIPAA-covered — the protection is that it's local-only). Rhythm is a visualisation, not a verdict. Cycle awareness is awareness, not contraception.
  • Your data stays on your device. No account, no cloud, no sync. The only place NOOP touches AI is the opt-in, bring-your-own-key Coach.

Thank you

v5 is the work of a community as much as the app itself. To everyone on r/NOOPApp and every contributor who filed an issue, sent a strap log, reverse-engineered a frame, caught a bug, or just told us when something looked wrong — thank you. You shaped every one of these features.

Keeping NOOP online and free costs real money. WHOOP's own app runs roughly $200–480/yr in subscriptions; NOOP is free and offline. If it's useful to you, a small tip keeps it going. #KeepNOOPAlive

noop.fans
u/TheNoopApp — 7 days ago
▲ 16 r/NOOPApp

Server back up!

Sorry about that, ran out of space so throwing some more money at it. You should all have a working repo now.

Thanks

reddit.com
u/TheNoopApp — 8 days ago
▲ 20 r/NOOPApp

NOOP has a new home — and it needs you now more than ever! Time to step up...

NOOP has a new home — and it needs you now more than ever 🖤

TL;DR: GitHub suspended the entire NOOP account today with no warning — repo, releases, the Homebrew tap, the iOS source, all of it gone at once. Nothing was lost: NOOP is already back up on independent infrastructure at https://noop.fans. But staying independent costs real money now, and NOOP has no company, no ads, and no investors behind it — it runs on donations alone. Without them, it can't stay online. It's that simple.

What happened

Earlier today GitHub suspended the NoopApp account — the code, every release download, the Homebrew tap, and the AltStore/iOS source all went dark at once, no warning and no real explanation (most likely an automated bot/abuse flag). An appeal is in. But NOOP is too important to too many people to leave its survival sitting on one platform's say-so.

So it's been moved to where no single company can switch it off: its own independent home.

The new home: https://noop.fans

Everything is already there and live:

  • 💻 Code — full history, every version tag, both branches
  • 📦 Downloads — macOS, iOS and Android, for the current release and the back-catalogue
  • 📖 Wiki — the complete guides, tutorials and protocol docs
  • 🐛 Issues — open and ready

Get the app:

  • macOS: download the .zip from the releases page, or brew tap noopapp/noop https://noop.fans/NoopApp/homebrew-noop && brew install --cask noop
  • Android: grab the .apk from releases
  • iOS: add the AltStore/SideStore source from the new home (link in the wiki)

If you already have NOOP installed, it keeps working — nothing on your device changed. You only need the new home for updates and to take part.

If/when GitHub comes back

An appeal has been filed. If GitHub reinstates the account, NOOP will resume there too — and keep noop.fans permanently mirrored to it. Either way, nothing gets lost again: from now on NOOP lives in more than one place by design. noop.fans is the home; GitHub (if it returns) becomes a mirror, not a single point of failure.

How to contribute — same as before, just a new address

The aim is to make this seamless for everyone who's been helping out. It all works exactly like it did on GitHub:

  • Report a bug / request a feature → open an issue at https://noop.fans/NoopApp/noop/issues. For bugs, please attach a strap log (Settings → Export log) — it's the difference between a fix and a guess.
  • Send code → make an account at noop.fans (sign-ups are open; new accounts are approved manually to keep bots out — drop a comment here if yours is waiting), then fork → branch → Pull Request against main, same as GitHub.
  • Discuss / ask questions → use an issue with the discussion or question label, or just post here on r/NOOPApp.
  • Read the dev guideDeveloping & Releasing walks through building all three platforms and the contribution flow.

Everyone who contributed before: thank you, and please come back — your issues and PRs are exactly as welcome here as they were there.

Why donations matter — and why they matter now

NOOP has always been completely free. No subscription, no ads, no selling anyone's data — while the strap it talks to costs $300–$480 a year to keep "official."

That free ride just got more expensive to keep running. Independence isn't free: there's a server and a domain to pay for every month now, and NOOP has no company, no investors and no income behind it — donations are the only thing keeping it online.

So here's the honest truth: if the people who use NOOP don't chip in, NOOP doesn't survive. There's no backup plan and no one else footing the bill — it's the community, or it's nothing. Even a few dollars from a fraction of you keeps the lights on indefinitely.

If NOOP has saved you a subscription, helped your sleep, or just earned a place on your wrist — please help keep it breathing:

  • Bitcoin: bc1qn2gkl7wslwpws06mvazjn2uu689zlkv7kg3kf5
  • Ethereum: 0xd64D508b531c4b1297Ca4023C774e0E97aA67B7F

#KeepNOOPAlive

Every update from here gets posted in this thread and on the new home. Thank you for sticking with it. 🖤

noop.fans
u/TheNoopApp — 9 days ago
▲ 36 r/NOOPApp+6 crossposts

NOOP v4 — use your WHOOP band with no subscription, no account, fully offline (Mac · iPhone · Android) Now supports more than just WHOOP 4/5!

Short version: if you own a WHOOP, the band is dead weight without a ~$199–$359/year membership, and all your data lives on their cloud. NOOP is a free, open-source app that talks to your WHOOP directly over Bluetooth and gives you recovery, strain, sleep and a lot more — on your own device, no account, no cloud, no subscription. Your data never leaves your phone or Mac.

It's independent and unofficial (not affiliated with WHOOP). It's been going a while — 171 releases, 10,000+ downloads, 1,600+ GitHub stars — and v4 is the biggest update yet.

⭐ Standout features (the stuff that makes people switch)

  • No subscription, ever. Every feature unlocked, no account, no nag. Free forever.
  • 100% offline & private. No cloud, no sign-up — your raw heart-rate and sleep data physically stay on your device. You can export all of it whenever you want.
  • It runs on a Mac. WHOOP doesn't even make a Mac app. NOOP gives you a full desktop dashboard and a menu-bar live-HR readout.
  • NEW in v4 — a longevity engine: your Fitness Age, a Vitality score (0–100) and a Body Age in years, computed from data you already have.
  • Your strap can buzz back. NOOP uses the band's own haptic motor for HRV breathing biofeedback (it paces your breath with felt cues) and a silent HIIT interval timer (buzzes every work/rest transition — train hands-free, no screen).
  • Turn your strap into a remote. Double-tap the band to lock your Mac, mark a moment, or run any macOS Shortcut.
  • Bring your WHOOP history across in ~1 minute by importing your official export — then it's yours.

🆕 What v4 adds — the "Age & Longevity" engine

Three new on-device numbers, all framed honestly as wellness estimates (never a clinical age):

  • 🫀 Fitness Age — how fit your heart is vs your actual age, from resting HR + recent activity, built on the published Nes/HUNT VO₂max research. A "How accurate is this?" panel shows exactly which inputs went in.
  • ✨ Vitality (0–100) + Body Age — your longevity read, the way WHOOP's "Healthspan" works: resting HR, sleep duration + regularity, HRV and activity each weighed against published all-cause-mortality research. It even names the one habit helping you most and the one holding you back.
  • 🏃 Optional VO₂max estimate — add a waist measurement and NOOP shows it alongside your Fitness Age.

(v4.0.1, out today, also makes Today's Effort update live through the day instead of lagging, and fixes a sleep-time-edit bug.)

📋 The full feature list

Daily scores — NOOP's own, all out of 100 to go head-to-head with WHOOP:

  • Charge (recovery) from HRV / resting HR / skin temperature / sleep quality
  • Effort (strain), now computed live as your day builds
  • Rest (sleep) composite, with full sleep staging

The screens:

  • Today — home dashboard: recovery ring, a "today's synthesis" insight, stat tiles (recovery, strain, sleep, HRV, RHR, SpO₂, respiratory, steps, weight, calories) each with a 14-day sparkline, live strap battery %, HR trend and recent workouts.
  • Readiness — a "should you push today?" call built on real sports science: HRV vs baseline (Plews/Buchheit), resting-HR drift (Lamberts), respiratory drift, training-load balance (acute:chronic, Gabbett) and monotony (Foster) → one headline (Primed / Balanced / Strained / Run down) with the reasons.
  • Sleep — hypnogram, stage breakdown, efficiency, resting HR & HRV from the on-device sleep stager. Browse back through past nights, and edit bed/wake times.
  • Stress — day-level autonomic-load view. Health — full biometric overview (HR, HRV, SpO₂, skin temp, respiratory rate). Trends — long-range trends across everything.
  • Workouts — detected sessions with strain + HR detail, plus GPS workout tracking with route map, HR zones and a post-session summary. Live — real-time HR/frame stream.
  • Breathe — HRV haptic breathing biofeedback with pre/post HRV outcome (Relax 4-6, Coherence 5.5, Box 4-4). Intervals — silent haptic HIIT timer.
  • Mind — a daily mood check-in correlated against your own recovery/sleep/HRV (on-device, non-clinical).
  • Explore / Compare / Insights — interrogate any metric over time, plot two together, and surface correlations from your own data.
  • Data Sources — one-tap import of a WHOOP CSV export, an Apple Health export, or a nutrition CSV (Cronometer / MacroFactor).
  • Automations — double-tap → Mac action/Shortcut, lock-on-wrist-off, HR-zone haptic coaching, and a smart alarm that arms the strap's own firmware to buzz you awake even if the app's closed.
  • Coach — an optional AI coach you can ask about your data in plain language. It's off until you add your own key (Anthropic, OpenAI, or any OpenAI-compatible endpoint including a fully local model via Ollama / LM Studio) — and it only ever sends a short text summary + your question, never raw data. With a local model the conversation never leaves your machine.
  • Settings — profile, step calibration, units, the in-app What's new changelog, and an opt-in Experimental section.

Also in the box: Apple Health + Health Connect (reads in, writes your workouts back out), steps, strap battery alerts, rename your strap, a live-HR widget / Dynamic Island / Live Activity, raw sensor CSV export, a menu-bar extra on Mac, a first-run onboarding wizard, and a built-in scoring guide that explains every number and how it differs from WHOOP's.

📱 What devices are supported

Platforms — one feature set across all three:

  • macOS (13+) — full app + menu-bar extra.
  • Android (8+) — full app, install the APK.
  • iPhone / iPad — sideload the unsigned .ipa with AltStore / SideStore and sign it with your own free Apple ID (no App Store, no developer account). Newer and a little less battle-tested than Mac/Android.

Straps:

  • WHOOP 4.0 — ✅ the fully supported path: live HR, recovery, strain, sleep, full history offload.
  • WHOOP 5.0 / MG — 🧪 live heart rate works on real hardware; deeper overnight metrics (recovery, strain, sleep) are still being reverse-engineered, and the app tells you straight which ones aren't ready yet. (Note: pairing a 5/MG means closing the official WHOOP app first so it isn't holding the Bluetooth bond — there's a guide in-app.)
  • Multiple WHOOPs — manage several straps, switch between them, and see what each band can do.
  • Generic Bluetooth heart-rate straps (Polar and friends) — early support, with a Devices screen and guided pairing wizards.

💡 Why it beats the official setup

Feature NOOP WHOOP app
Cost Free, forever ~$199–$359 / year
Account None Required
Your data On your device, offline Their cloud
Mac app ✅ Yes ❌ No
Export raw data ✅ Yes Limited
Open source ✅ Yes ❌ No

📰 As featured in

AOL · Yahoo · Android Authority · TechRadar · BGR · Android Central · Android Police · Notebookcheck · Trusted Reviews

⬇️ Download (free)

https://github.com/NoopApp/noop/releases/latest

  • macOS: the .zip, or brew install --cask noopapp/noop/noop
  • iPhone/iPad: the .ipa (sideload + sign with your free Apple ID)
  • Android: the .apk

Questions, setup help & release news → r/NOOPApp.

♥ Keeping NOOP alive

Full honesty: NOOP is free forever, every feature unlocked, no nag — and it's built and maintained by one person, out of pocket. Keeping up with WHOOP's hardware and firmware takes real time and real test gear. The project continues if the people who use it help fund it.

Donations are crypto-only, on purpose — it keeps the project (and you) anonymous, no names attached. If even a small fraction of those 10,000+ downloads chipped in $50 (a fraction of one year's WHOOP membership), NOOP's future is secure for a long time:

  • BTC: bc1qn2gkl7wslwpws06mvazjn2uu689zlkv7kg3kf5
  • ETH: 0xd64D508b531c4b1297Ca4023C774e0E97aA67B7F

New to crypto? Cash App / Coinbase / Kraken will have you sending in ~2 minutes. Thank you for keeping an independent, no-subscription project alive. 🙏

github.com
u/TheNoopApp — 2 days ago