Releases: saksham2001/PulseLoopiOS
Release list
v2.6.0-beta.1
PulseLoop v2.6.0-beta.1
This release lets the AI Coach run on a local server, adds support for two more wearable
families, fills in missing calorie totals on-device, and makes sleep history much easier to explore.
β¨ New Features
- Local / self-hosted AI Coach: Connect PulseLoop to Ollama, llama.cpp, vLLM, SGLang,
LM Studio, or another OpenAI-compatible Chat Completions server. Server detection can discover
models and configure tool calling and structured output; API keys are optional. Requests go
directly to the server you configure. (#133) - On-device calorie estimates: Rings that do not report calories now get a daily estimate from
your profile, workouts, all-day heart rate, and step cadence, without double-counting. A value
reported by the wearable always wins. (#98) - Interactive sleep stages: Press and hold the hypnogram, then drag to inspect the exact stage
and time range. Stage labels and bars now share the same alignment. (#131)
π Wearable Support Added
- RWfit-app rings: New experimental support for rebranded RWfit rings using either the legacy
0x7Eor JieLi0xABprotocol. Baseline support includes heart rate, SpOβ, steps, sleep with REM,
and battery; additional sensors are enabled when the ring reports them. (#130) - Colmi R11 with the Da Rings app: A dedicated CRP driver fixes the connect-then-hang path for
this R11 firmware and adds steps, HR, SpOβ, HRV, stress, sleep, battery, spot measurements, and
history sync. Choose Colmi R11 (Da Rings app) when pairing. (#93)
π Fixes & Polish
- Sleep charts are aligned, empty sleep days are cleaner, and the new stage scrubber works with
haptics and accessibility. - Sync progress and connection animations are smoother and no longer refresh entire tabs for every
incoming packet. (#131) - Local models can execute coach tools without response-format conflicts, tolerate omitted optional
fields, and understand common 12- and 24-hour times. (#133) - CRP measurements fail quickly with a useful βwear the ring snuglyβ message when the ring reports
that it is not being worn. (#93)
π§ͺ Beta Notes
- RWfit and Da Rings/CRP support are marked Limited support while device validation continues.
- RWfit testers can enable Settings β Privacy & Data β Capture Bluetooth diagnostics, reproduce
a pairing or sync issue, then include the exported diagnostics with their report. - The local coach has been exercised with Ollama; other engines and model templates still need beta
coverage. Tool calling quality depends heavily on the selected model.
Install
Sideload: download the IPA from the Assets below (see the sideloading docs).
Build from source: see the README.
Thanks to @foureight84 and everyone testing new rings, sleep tracking, and the AI Coach on TestFlight.
v2.5.0-beta.1
PulseLoop v2.5.0-beta.1
This release connects PulseLoop to the rest of your fitness life: Strava uploads, shareable workout cards, calorie & macro tracking, and full data export/import, plus a new ring, configurable HR zones, and background syncs that finally work.
β¨ New Features
- Strava integration: connect in Settings β Strava, then push workouts manually from the workout summary or switch to Automatic so they upload as they finish. Your GPS route uploads merged with ring heart rate, and re-pushing a workout won't duplicate it. (#100, closes #86)
- Shareable stat cards: share any workout as a Story (9:16) or Square (1:1) card. Your route is drawn as glowing line art from your own GPS points and rendered on-device β no map tiles, nothing uploaded. Indoor workouts get concentric pulse rings instead. (#100, closes #86)
- Calorie & macro tracking (opt-in, off by default): a Nutrition page with Open Food Facts search, barcode scanning, and AI photo analysis, with per-entry provenance so numbers are never silently guessed. Surfaces as an Activity card, a Today tile, and a widget. (#96)
- Export & import all your data: Settings β Privacy & Data β Backup writes everything to one JSON file you can save, AirDrop, or analyze, and importing restores it. API keys are never included. (#99)
- Heart Rate Zones β a new settings screen with Standard, Auto (personalizes from your learned resting HR), and Custom modes. (#95)
- Unpair ring & Reset app data: confirmation-gated reset actions in Privacy & Data.
π Wearable Support Added
- LittleMeatball R10M: a new ring family with its own capability set, pairing flow, and ring art. It shares the YCBT protocol stack with the TK5 and SmartHealth-app Colmi rings but pairs on its own. (#97)
π Bug Fixes
- Background syncs didn't run: ring history now re-syncs in the background from all-day BLE events, and coach check-ins are gated on fresh data instead of whatever was last loaded at app open. (#94, fixes #92)
- HR chart read red β yellow β red: the High zone color was nearly indistinguishable from the accent used for Normal. New colorblind-checked palette, and literature-based defaults (Low <50, Normal 50β90, Elevated 90β120, High β₯120). (#95)
- YCBT ring fixes (TK5 / SmartHealth Colmi / R10M): records shifted an hour across DST, one malformed sleep record could blow up the sleep timeline, yesterday's cumulative step count could pin today's total, and short BLE frames published activity rows with zeroed distance and calories. (#97)
- Phantom history: rings are no longer asked to run sensors they don't declare, so hidden cards stop accumulating readings the ring never measured. Half-subscribed connections fail cleanly instead of hanging. (#97)
- Nutrition: Open Food Facts search no longer fails on unexpected field shapes; settings rebuilt on the app's glass idiom and the Today tile redesigned as a macro fuel bar.
π§Ή Under the hood
- Nutrition context flows into coach chat, check-ins, and daily summaries when sharing is enabled.
- Additive SwiftData migrations only: existing databases upgrade in place.
- The in-app version now reads from the bundle instead of a hardcoded string.
Install
Sideload: download the IPA from the Assets below (see the sideloading docs).
Build from source: see the README.
Thanks to everyone testing on TestFlight - the HR-zone color rework and the background-sync fix both came straight out of beta feedback.
Screenshots
| Share card β Story 9:16 | Share card β Square 1:1 |
|---|---|
![]() |
![]() |
| Nutrition β calories & macros | Heart Rate Zones |
![]() |
![]() |
v2.4.0-beta.1
PulseLoop v2.4.0-beta.1
This release adds two more rings and a from-scratch TK5 rebuild, Apple Health sync, split sleep sessions with day-by-day browsing, a redesigned vitals measurement flow, and a batch of coach/UI correctness fixes.
Wearable Support Added
- LuckRing / TK18 support: new driver for the Shenzhen Coolwear/Kewo "K6" family (service
F618), reverse-engineered. Spot HR/SpOβ/HRV, battery, pairing, and history sync tested on hardware. - TK5 Support Expanded: the TK5 driver was rebuilt on the manufacturer's Yucheng YCBT SDK after a byte-by-byte comparison showed history sync was fundamentally broken. Now: a proper history state machine, GATT fragment reassembly, all 9 record types (HR, SpOβ, BP, HRV/stress/fatigue, steps, temperature, blood sugar), device-push ACKs, ring-declared capabilities, and periodic re-sync.
- Colmi/Yawell Ring with SmartHealth app: Earlier we only supported Colmi rings working with the QRing app. Colmi rings that ship with the SmartHealth app join now, with a pairing-screen app picker and a one-tap "try the other app" retry. (#82)
β¨ New Features
- Apple Health sync: HealthKit integration with a master toggle (default off), per-type toggles (HR, SpOβ, HRV, temperature, sleep, steps/activity), a dedicated workout-export toggle with GPS routes, and an ask-on-first-enable choice between full-history backfill and new-data-only. Idempotent writes (no duplicates on re-export), a read-only profile import (age/sex/height/weight), an "advanced calories" toggle, and a "Remove PulseLoop data from Apple Health" action. Builds on @hoveeman's #16. (#80)
- Split sleep sessions + Day carousel: days with more than one sleep (a nap plus the main night) are now split into distinct sessions instead of one broken ~16 h block. Page between a day's sessions on the Sleep β Day view; Week/Month/Year still count each day once so naps don't skew the nightly average. (#83, fixes #59)
- Sleep day navigation: browse previous days on the Sleep β Day view with a
βΉ βΊdate stepper and a tappable date picker; the 4 AM "last night" flip is preserved at every offset, with a directional transition, selection haptics, and VoiceOver announcements (#84) - Redesigned Measure HR/SpOβ: a determinate 30s (HR) / 40s (SpOβ) countdown that animates off wall-clock time (works under Reduce Motion), live bpm ticks, and a hardened measurement that discards the ring's stale cached-bpm echo and rered samples instead of a snap reading. A disconnected ring now errors instead of fabricating a mock value. (#66)
- Reworked onboarding: every step scroll on every iPhone (SE/mini β ProMax), fixed feature-tile copy, clearer button hierarchy, and a celebratory "You're all set" finale with a success medallion and a glass Today. (#75)
- Contributor recognition: an auto-generated contributor grid in the README and docs, refreshed weekly. (#81)
π Bug Fixes
- Colmi step undercount: activity buckets dropped their within-hour quarter, collapsing all four
quarter-hour buckets ontoHH:00so odercounting steps/distance by up to~75% on a normally-worn ring. (#87) - Stale screens after edits: three coach edit to today's workout now updates Today/Activity and the daily rollup (not just the workout card), goal edits re-fill Today's rings immediately, and Metric Detail rsync while open. (#88)
- Settings changes apply immediately: toggling a tile's visibility or chart detail in Settings now updates Today/Vitals right away, insteated sync to force a rebuild. (#70)
- Coach forgot recent messages: conversations past ~40 messages replayed the oldest 40 (frozen at messages 31β40) instead of the newest,t all recent turns; now replays the newest. (#69)
- Coach weekly step average: was (zero-filled missing days),understating the average early in the week or on sparse sync; now divides by days with data. (#68)
- **Year trends current-month average*was divided by its full calendarlength, understating the current-month steps/day bar by up to ~3Γ; now divides by elapsed days. (#79)
- **Liquid Glass correctness (iOS 26)*g inside glass, flat nested glass-on-glass, and workout cards bleeding into each other; the activity/log-past pickers get one consistent selection grammar (shape + color alone), full VoiceOver/DynamicType support, and a cached Today-summary path that stops the glass tiles white-flashing. (#89)
π§Ή Under the hood
RingBLEClientnow picks the BLE wrristic's properties(write-without-response chars were silently dropped). (#90)- Dev-only demo seed data now includesfor exercising the Day carousel. (#85)
- New unit-test coverage across the ring drivers, sleep segmentation, Apple Health mappings, and the Colmi decoder; full suite green.
Closed issues: #59
Install
Sideload: download the IPA from the Assets below (see the sideloading docs).
Build from source: see the README.
Note for release: HealthKit integratiine 5.1.3 requires a privacy policy.
Thanks to @rgvxsthi, @hoveeman, and everyone testing on TestFlight!
v2.3.0-beta.1
PulseLoop v2.3.0-beta.1
This release adds two new rings, an iOS 26 Liquid Glass redesign, a major AI-coach upgrade, major fixed for 56ff/Jring and a batch of reliability fixes.
β¨ New Features
- TK5 ring support β new SmartHealth-protocol driver with heart rate, SpOβ, HRV, blood pressure, sleep (deep/light/REM), steps, and battery, all verified against the vendor app. On-demand HR/SpOβ/HRV via the Vitals "Measure" buttons. (#56)
- Colmi R08 β added to the ring catalog with proper identity and product art in the pairing carousel. (#71)
- Liquid Glass UI for iOS 26+ β glass card surfaces, a native Liquid Glass tab bar, Settings moved into the tab bar, and Coach as a floating glass chat bubble. Graceful Material/solid fallback on iOS 18β25 (and a solid surface when Reduce Transparency is on). (#62)
- Reorder & hide cards β long-press any Today tile or Vitals card to drag-reorder (home-screen style) or hide/restore cards; order and visibility persist per screen. Reduce Motion and VoiceOver supported. (#64)
- AI coach overhaul β per-message tool-call traces, token & cost tracking with a usage sheet, opt-in location + weather context (WeatherKit), workout cards logged from chat, and more varied notifications/check-ins. (#65)
- Apple on-device coach by default β the AI Coach now defaults to Apple's on-device foundation model, so it works out of the box with no API key; existing users' settings are preserved. (#76)
- On-demand blood pressure for the 56ff ring β plus a calibration reading.
π Bug Fixes
- 56ff / JRing protocol parity β fixed timezone/timestamp drift, time-sync, background monitoring startup, measurement-frequency control, and history deduplication by diffing against the decompiled vendor app. (fixes #8, #14) (#77)
- Coach reliability β sleep summaries no longer generate from partial nights, workout logging before noon no longer fails, on-device history no longer truncates mid-sentence, and failed weather fetches now back off with a cooldown. (#65)
- Glass polish β Activity/ring tile numbers no longer clip (e.g.
8,401), removed the box behind the record buttons, and tightened chat composer spacing. (#62) - Measure Vitals β single sweep, larger result cards, and future-dated history entries dropped.
π§Ή Under the hood
- Measurement Frequency moved into the General settings group (under Physiology). (#74)
- SwiftLint / CI fixes.
v2.2.0-beta.1
PulseLoop v2.2.0-beta.1
This release is mostly a big overhaul of activity recording, plus a new AI-coach provider and a batch of UI/reliability fixes.
β¨ New Features
- Manual activity logging β you can now log a workout by hand in the UI, no live recording required. (#57)
- MiniMax AI coach β added MiniMax as a coach provider alongside OpenAI, Gemini, and OpenRouter, with its own model catalog (default MiniMax-M3), Keychain-stored key, and image input on M3. (#54)
- Pause during recording β pause and resume an activity while it's in progress. (#57)
- Post-recording editing β edit a completed activity, including changing its recorded time. (#57)
- Low-battery alerts β get notified at <20% and <10% ring battery (on by default). (#61)
- Battery drainage graph β visualize your ring's battery drain over time. (#61)
- Workout history grouped by date β past workouts are now organized under date headers. (#61)
π Bug Fixes
- Activity recording rehaul β fixed GPS data recording, fixed HR recording across connection dropouts and background syncs, and fixed Live Activity issues (HR/SpOβ not showing, and the Live Activity never ending). (#57)
- No more duplicate coach card on Today β the coach summary was rendering twice when it fell back to hero text; the coach now owns the single top card. (#42)
- Coach card placement β the AI coach card moved to the bottom of the Sleep page, under the sleep data. (#61, #42)
- Ring card values no longer truncate to "10,β¦", and garbage values can no longer render. (#61)
- Coach notifications now wait for sync before firing. (#61)
- Consistent ring labels β the jring model now shows HR instead of Heart rate, matching every other ring. (#63)
Performance β fixed UI lag on the new activity pages and reduced dropout bugs. (#57, #61)
##π§Ή Under the hood
- CI fixes for missing idiom and test errors.
v2.1.0-beta.1
A quick follow-up to v2 with new Home Screen widgets, a reworked onboarding and settings experience, automated IPA builds for easy sideloading, and a batch of fixes from the beta.
New Features
Home Screen widgets: glanceable metrics right on your Home Screen. (@saksham2001)
Redesigned settings screen: new ring cards and a cleaner, reorganized layout for all settings. (@rgvxsthi)
Reworked onboarding: a new intro walkthrough of the app's features, a ring selection page with photos, and setup for your personal info, activity goals, and baseline. (@rgvxsthi, @saksham2001)
Automated IPA releases: every release now auto-builds a sideloadable IPA, with docs to match. (@rgvxsthi)
Bug Fixes
Fixed Colmi rings being identified as the wrong model.
Fixed weight entry in locales that use a comma as the decimal separator.
Fixed a broken GitHub link that returned a 404.
The Imperial/Metric unit setting is now applied consistently across the app.
Fixed an invalid OpenRouter model slug that could break the coach.
Install
Sideload: download the IPA from the Assets below (see the sideloading docs).
Build from source: see the README.
Test Flight: release within 24/48 on approval
Thanks to @rgvxsthi and everyone in the beta for the reports and fixes.
v2.0.0-beta.2
PulseLoop 2.0.0 First Public Beta π
PulseLoop turns a cheap Bluetooth smart ring into a private, conversational health tracker β no vendor cloud, no account, no subscription. This is our first public release, and it's a big one.
π² Join the TestFlight beta: Sign up here to request an invite, or ask in our Discord.
π€ A smarter AI Coach
The Coach grew from a single-provider assistant into a flexible, grounded health companion:
- Bring your own provider: choose between OpenAI, Google Gemini (#9), OpenRouter (#22), or Apple's on-device Foundation Models (#30), which runs entirely on your phone with no key required.
- Send it a photo: the Coach now takes image input, so you can show it a meal, a nutrition label, or anything else and ask about it (#31).
- Richer daily check-ins: improved notifications generated from your recent trends (#30).
π More rings, more reliable data
- Colmi R02 support landed behind a device-agnostic driver layer, so adding future wearables is straightforward (#6).
- Ported the 56ff low-level protocol from the Android project for better decoding on the generic Chinese ring (#32).
- Fixed a heart-rate setup bug that was preventing automated HR readings from ever starting (#17).
π Redesigned experience
- A major UI re-haul across the app for a cleaner, more polished feel (#35).
- Redesigned Settings tab, including measurement-frequency controls (#19).
- New Dance activity category for workout tracking (#11).
π Sleep & stability fixes
- Fixed sleep sessions splitting across the midnight boundary and cleaned up duplicate session data: sleep tracking is now accurate through the night (#15).
- Fixed a background crash in the Coach's background-task handler (#24).
- Performance re-architecture for smoother data updates throughout the app (#20).
π Project & docs
- New MkDocs Material documentation site at saksham2001.github.io/PulseLoopiOS (#28).
- iOS vs Android comparison and README/getting-started refreshes (#23, #37).
- Open-source setup: automated tests, contribution guides, and code of conduct (#7).



