# Feature request: Native Heart Rate Reserve (%HRR / Karvonen) heart-rate zones

**URL:** <https://forum.intervals.icu/t/feature-request-native-heart-rate-reserve-hrr-karvonen-heart-rate-zones/132356>\
**Category:** Feature Requests\
**Created:** [9 September 2026 19:42 UTC](https://forum.intervals.icu/t/feature-request-native-heart-rate-reserve-hrr-karvonen-heart-rate-zones/132356 "2026-09-09T19:42:02Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![JanHuniche](https://forum.intervals.icu/letter_avatar_proxy/v4/letter/j/22d042/32.png) [@JanHuniche](https://forum.intervals.icu/u/JanHuniche)\
**Post date:** [9 September 2026 19:42 UTC](https://forum.intervals.icu/t/feature-request-native-heart-rate-reserve-hrr-karvonen-heart-rate-zones/132356/1 "2026-09-09T19:42:02Z")

</div>

Hi David,

Would you consider adding **Heart Rate Reserve (%HRR / Karvonen)** as a native option for calculating the standard heart-rate training zones?

Garmin, for example, allows HR zones to be based on:

- % Max HR
- % HRR
- % LTHR

I currently use Garmin’s 5-zone **%HRR** system with:

**Max HR: 185 bpm**  
**Resting HR: 49 bpm**

This gives me:

Z1: 117–130 bpm  
Z2: 131–143 bpm  
Z3: 144–157 bpm  
Z4: 158–170 bpm  
Z5: 171–185 bpm

I can manually reproduce these boundaries in Intervals.icu, which works, but they are effectively entered as percentages of LTHR rather than being calculated from HRR.

The Karvonen calculation is:

**Target HR = Resting HR + (% × (Max HR − Resting HR))**

A native option such as **“HR zones based on: %HRR”** would therefore be very useful, especially since Intervals.icu already stores Max HR and resting-HR data.

One advantage would be that athletes whose resting HR changes significantly as fitness improves could update their HRR zones without manually recalculating all of the boundaries.

I don’t necessarily think the zones should automatically change every day with normal daily resting-HR fluctuations. Perhaps the user could choose a fixed resting HR, a longer-term resting-HR value, or manually trigger an update.

**A second, smaller suggestion:** it would be useful if the lowest standard HR zone could have a configurable lower boundary. At present Z1 starts at 0 bpm. In my example, Garmin Z1 is 117–130 bpm. This isn’t particularly important for training, but it would make time-in-zone reporting between platforms more consistent.

My practical reason for requesting this became very obvious today. I completed a 60-minute elliptical workout targeting Garmin Z2. Garmin recorded **54:30 (90%) in Z2**, with an average HR of **136 bpm**. With my previous Intervals.icu LTHR-based zones, almost the entire workout was classified below Z2.

I have now manually changed Intervals.icu to match my Garmin HRR zones, so there is a workaround. But native **%HRR/Karvonen support** would make this much easier and would keep the calculation methodology consistent between Garmin and Intervals.icu.

Thanks for considering it — and thanks for all the continued development of Intervals.icu.

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [9 September 2026 19:46 UTC](https://forum.intervals.icu/t/feature-request-native-heart-rate-reserve-hrr-karvonen-heart-rate-zones/132356/2 "2026-09-09T19:46:35Z")

</div>

You can create Custom zones with any anchor you want.

> [@Custom zones work started](https://forum.intervals.icu/t/custom-zones-work-started/112132):
>
> Edit: This is live now: We have started work on custom zones, a new premium feature: Zones for any activity stream (not just power, HR and pace) Overlapping and non-contiguous zones Zones based on any standard anchor (FTP, LTHR etc.) as well as custom activity fields and absolute values Custom colours User defined zone ID (not just Z1, Z2 etc.) Time in zones Workout prescription (only for power, HR and pace streams) e.g. “- 4m ZC-VM” Configurable per sport in /settings and shareable like c…

---

<div class="post-metadata">

**Author:** ![Yeroon](https://forum.intervals.icu/user_avatar/forum.intervals.icu/yeroon/32/29366_2.png) [@Yeroon](https://forum.intervals.icu/u/Yeroon)\
**Post date:** [19 September 2026 22:37 UTC](https://forum.intervals.icu/t/feature-request-native-heart-rate-reserve-hrr-karvonen-heart-rate-zones/132356/3 "2026-09-19T22:37:49Z")

</div>

> You can create Custom zones with any anchor you want.

Correct, but this involves manual recalculation of the zones when min or max HR change. The convenience of the feature requested is just to register min and max HR, together with the zone percentages, so that Intervals calculates the zones automatically when you register a new value of min or max HR after they have changed.

---

<div class="post-metadata">

**Author:** ![MedTechCD](https://forum.intervals.icu/user_avatar/forum.intervals.icu/medtechcd/32/40383_2.png) [@MedTechCD](https://forum.intervals.icu/u/MedTechCD)\
**Post date:** [20 September 2026 14:09 UTC](https://forum.intervals.icu/t/feature-request-native-heart-rate-reserve-hrr-karvonen-heart-rate-zones/132356/4 "2026-09-20T14:09:01Z")

</div>

> [@Custom zones for sports](https://forum.intervals.icu/t/custom-zones-for-sports/114875/1):
>
> - Zones based on any standard anchor (FTP, LTHR etc.) as well as custom activity fields and absolute values

Make a Custom field that calculates HRR based on HRmax and HRrest for the day of the activity and then use that Custom activity field as anchor.  
Any change in HRmax and/or HRrest will be accounted for.  
Look at the script of underneath Custom Field to get you started

 ![image](https://forum.intervals.icu/uploads/default/original/3X/4/2/4278dbd7fd4c84e23a48208fe81cf48ebbef7247.png)

---

<div class="post-metadata">

**Author:** ![Yeroon](https://forum.intervals.icu/user_avatar/forum.intervals.icu/yeroon/32/29366_2.png) [@Yeroon](https://forum.intervals.icu/u/Yeroon)\
**Post date:** [20 September 2026 21:28 UTC](https://forum.intervals.icu/t/feature-request-native-heart-rate-reserve-hrr-karvonen-heart-rate-zones/132356/5 "2026-09-20T21:28:26Z")

</div>

> Make a Custom field that calculates HRR based on HRmax and HRrest for the day of the activity and then use that Custom activity field as anchor. Any change in HRmax and/or HRrest will be accounted for.

Thanks for your suggesstion. Would that also save the HRR zones in the activity history just like with MaxHR and LTHR based zones?

However: that is not the low threshold and accessible way of working that I am looking for. I second this request.

---

<div class="post-metadata">

**Author:** ![R2Tom](https://forum.intervals.icu/user_avatar/forum.intervals.icu/r2tom/32/50144_2.png) [@R2Tom](https://forum.intervals.icu/u/R2Tom)\
**Post date:** [21 September 2026 02:43 UTC](https://forum.intervals.icu/t/feature-request-native-heart-rate-reserve-hrr-karvonen-heart-rate-zones/132356/6 "2026-09-21T02:43:35Z")

</div>

> [@Yeroon](#):
>
> Thanks for your suggesstion. Would that also save the HRR zones in the activity history just like with MaxHR and LTHR based zones?

Yes it would.

> [@Yeroon](#):
>
> that is not the low threshold and accessible way of working that I am looking for.

It’s a one time setup and just some clicks away
