Facebook Instagram Twitter Youtube
  • Get Started
    • Create Zwift Account
    • How To Get Started On Zwift
    • Zwift Course Maps
    • How to Race on Zwift (Setup, Strategy, and More)
    • Women’s Racing on Zwift
    • Links Every Zwifter Must Have
    • More “Get Started” Posts
  • Tips & Tricks
    • Training & Nutrition
    • Racing
    • Zwift Hacks
  • Reference
    • How Zwift Works
    • Course Calendar
    • RoboPacer Calendar
    • Weekly Challenges Calendar
    • Climb Portal Calendar
    • Upcoming Events
    • Game Updates
    • Smart Trainer Index
      • Current Models
      • Exhaustive Trainer List
    • Achievements & Unlocks
      • XP Basics for Riders
      • XP Basics for Runners
      • Kit Unlock Codes
      • Master List of Badges
    • Frames & Wheels
    • Routes & Maps
      • Master List: Routes
      • Master List: Climb Portal
      • Master List: KOMs
      • Master List: Sprints
      • Master List: Rebel Routes
      • Downloadable Watopia Map
      • Printable List of Routes by Difficulty
    • Speed Tests
    • Tiny Races
  • Women
    • Race Calendar
    • Why race?
    • Women’s Teams
    • Racer Spotlights
    • More Women’s Racing posts
  • Shop
    • Watopia Map and Other Posters
    • ZI Indoor Cycling Kit
Search
Logo
Logo
  • Get Started
    • Create Zwift Account
    • How To Get Started On Zwift
    • Zwift Course Maps
    • How to Race on Zwift (Setup, Strategy, and More)
    • Women’s Racing on Zwift
    • Links Every Zwifter Must Have
    • More “Get Started” Posts
  • Tips & Tricks
    • Training & Nutrition
    • Racing
    • Zwift Hacks
  • Reference
    • How Zwift Works
    • Course Calendar
    • RoboPacer Calendar
    • Weekly Challenges Calendar
    • Climb Portal Calendar
    • Upcoming Events
    • Game Updates
    • Smart Trainer Index
      • Current Models
      • Exhaustive Trainer List
    • Achievements & Unlocks
      • XP Basics for Riders
      • XP Basics for Runners
      • Kit Unlock Codes
      • Master List of Badges
    • Frames & Wheels
    • Routes & Maps
      • Master List: Routes
      • Master List: Climb Portal
      • Master List: KOMs
      • Master List: Sprints
      • Master List: Rebel Routes
      • Downloadable Watopia Map
      • Printable List of Routes by Difficulty
    • Speed Tests
    • Tiny Races
  • Women
    • Race Calendar
    • Why race?
    • Women’s Teams
    • Racer Spotlights
    • More Women’s Racing posts
  • Shop
    • Watopia Map and Other Posters
    • ZI Indoor Cycling Kit
More
    RacingZwift Hacks

    ZwiftPower ZRS Browser Extension Updated: ZRS History, Power Curves, + More

    Eric Schlange
    By Eric Schlange
    December 16, 2025
    LAST UPDATED December 16, 2025
    8

    A few months ago, I wrote about the ZwiftPower ZRS Browser Extension. Since then, it has undergone substantial upgrades, including an incredibly detailed new profile page that charts your ZRS history! So I reached out to the creator (who goes by the pseudonym “int” on socials) for a look at what has changed, including a detailed list of new features. Here’s what I received…

    From the Creator

    Since the last Zwift Insider article, the extension has grown quite a bit.

    The very first version took only a few hours to build. I probably spent almost the same amount of time writing my response to Zwift Insider when he first reached out. It was just a simple script to inject ZRS scores into ZwiftPower event pages. Nothing fancy.

    Back then, I mentioned the article may “give the project new life.” Well, it did. The article brought in more users, and with them came requests. Profile page support. History graphs. More detailed analytics. Each feature request led to another and the codebase went from a few hundred lines to… well, something more substantial.

    So here we are again, writing another response after Eric reached out asking if I had any “juicy details” to share.

    Recent Development

    The active users of the extension already know that not everything went smoothly.

    The first major update went live and didn’t last long. Users started processing their lifetime event histories, and some corrupt Zwift events from years ago triggered an infinite fetching loop.

    The combination—hundreds of users processing thousands of events each, plus the bug causing endless retries—created an API spike. I fixed the bug immediately after it was reported, but the damage was already done. Zwift decided to enforce authentication requirements, breaking the extension for everyone.

    I reached out to Zwift, acknowledged I should have coordinated beforehand, and didn’t hear back. So a few days later I implemented a workaround that captures the user’s Zwift token (with the user’s permission, of course) to get things going again.

    Besides restoring functionality, authentication unlocked additional API endpoints that made most of the newly added features possible. In the end, the authentication enforcement turned out to be a good thing.

    Looking Forward

    The extension serves a niche within the Zwift community, and I’m glad people find it useful. There’s still plenty to improve—I won’t be running out of ideas anytime soon. I appreciate everyone who’s taken the time to report bugs, suggest features, or simply tell your buddy about it. And special thanks to the testers.

    Hopefully, Eric will have a reason to check in again down the road.

    If you have thoughts or ideas, feel free to reach out.

    (That goes for Zwift, too. It would be cool if we could implement proper OAuth2 authentication and you could relax your CORS restrictions a little bit.)

    ZRS Extension: Technical Overview

    What ZRS Extension Does

    The ZRS extension enhances ZwiftPower.com by adding ZRS (Zwift Racing Score) data, performance analytics, and racing statistics to profile and event pages. The extension operates as a fully decentralized system, running entirely within the browser environment. All data processing, storage, and analytics occur locally on the user’s device, with no external servers or databases involved.

    Key Capabilities

    • ZRS Score Integration: Adds ZRS scores and changes directly into ZwiftPower event tables
    • Performance Analytics: Power analysis, phenotype detection, activity tracking
    • Racing Statistics: Head-to-head comparisons, ranking points visualization, ZRS history graphs

    The Profile Dashboard

    Layout Overview

    The extension redesigns the ZwiftPower profile page with a three-column dashboard layout:

    • Left Column: Athlete profile, Zwift stats, and power analysis
    • Middle Column: Activities, and context-aware panels (power curve for personal profiles, head-to-head for opponents)
    • Right Column: ZRS score history and race ranking points

    Left Column: Athlete Profile & Performance

    Main Profile Panel

    Identity Section:

    • Profile picture (or ZRS logo placeholder if no picture)
    • Zwift in-game name
    • Country flag and name (or “Zwifterland” fallback)
    • Team name (clickable link if available)
    • Platform links: Zwift.com, ZwiftRacing.app, Strava.com
    • Follower count button (links to Zwift follower page)
    • Bio button (displays rider biography in modal)
    • Refresh button (navigates to ZwiftPower profile update page)

    Overlays (on profile picture):

    • Online indicator (if currently riding)
    • Signup indicator (if upcoming registered events exist)

    Athlete Stats Section:

    • Profile: Gender and age (e.g., “M45”, “F33”)
    • Height (cm) with variation tooltip
    • Weight (kg) with variation tooltip
    • Power source (Smart Trainer, Power Meter, zPower)

    Racing Stats Panel:

    • Category: Shows racing category with color-coded circle (Mixed and Women’s categories for female riders)
    • ZRS: Current racing score (dual badge showing both current and MAX30 score for personal profiles)
    • ZPoints and Ranking Points (metrics from ZwiftPower)
    • zFTP: Functional threshold power in watts and W/kg
    • Race count with win and podium rate in tooltip

    All sections use category-based color theming (A+ = black, A = red, B = green, etc.).

    Zwift Stats Panel

    Progression Subpanel:

    • Level with progress bar showing percentage to next level
    • XP (experience points)
    • Current bike frame model
    • Drops

    Riding Stats Subpanel (toggleable between 30d/Year/Total):

    • Distance (km)
    • Elevation climbed (m)
    • Longest ride (km)
    • Highest climb (m)

    Header: Shows total hours and “since [year]” (year joined Zwift)

    Power Panel

    Power Radar Chart:

    • Spider web visualization for 7 durations (5s, 15s, 30s, 1min, 2min, 5min, 20min)
    • Shows both 90-day recent bests and all-time bests
    • Overlays intervals.icu distribution data (toggle between gender or gender-age data)
    • Interactive hover tooltips for exact values
    • Toggle between watts and W/kg display modes

    Duration Power Table:

    • Numerical values for all durations plus FTP

    Power Skills:
    Three skill categories rated 0.0-10.0 based on percentile vs. intervals.icu distribution data:

    • Sprint (5s, 15s, 30s)
    • Attack (1min, 2min, 5min)
    • Endurance (20min)
    • General average score

    Phenotype Detection:
    Analyzes power distribution to classify rider into one of six types:

    • Sprinter: Explosive short-duration power specialist (example: Mark Cavendish)
    • Puncheur: 1-5 minute effort specialist (example: Mathieu van der Poel)
    • Time Trialist: High sustained raw watts (example: Stefan Küng)
    • Climber: High sustained W/kg (example: Nairo Quintana)
    • Allrounder: Balanced across all durations (example: Tadej Pogačar)
    • Pursuiter: High sprint and endurance, weak middle durations (example: Dan Bigham)

    Middle Column: Context-Aware Analytics

    The middle column displays different panels depending on whether viewing your own profile or an opponent’s profile.

    Activity Panel

    4-Week Calendar Grid:

    • Last 28 days displayed as 4 weeks × 7 days
    • Activity type icons color-coded by type (race, TT, group workout, group ride, etc.)
    • Signup indicator (calendar icon) for upcoming registered events
    • Weekly totals column

    Scrollable Activity List:

    • Chronological list of recent activities
    • Background colors match activity type
    • Clickable rows link to detailed activity page on zwift.com

    1v1 Head-to-Head Panel (Opponent Profile)

    Summary Metrics:

    • Total shared events (same category races)
    • Win/loss record
    • Win rate percentage
    • Average position advantage/disadvantage (% of field size)

    Match History List:

    • Scrollable list of all shared events
    • Each row shows: event name, category circle, zwift ingame name, date
    • Win/loss indicator (green/red)
    • Clickable to view full event results

    This feature requires complete lifetime event processing for the user’s own profile. First-time processing may require a few minutes depending on race history volume.

    Power Curve Panel (Personal Profile Only)

    Power Curve Graph:

    • Line chart of best power outputs across all durations
    • X-axis: Duration (logarithmic scale, 5s to 60min)
    • Y-axis: Power (toggle between watts and W/kg)
    • Shows only 90-day best (all-time data from Zwift API is unreliable)

    Power Zone Background:

    Shaded regions showing Zwift’s 7 power zones based on FTP percentage:

    • Z1 Recovery (<60% FTP) – Gray
    • Z2 Endurance (60-75%) – Cyan
    • Z3 Tempo (75-89%) – Green
    • Z4 Threshold (89-104%) – Yellow
    • Z5 VO2 Max (104-118%) – Orange
    • Z6 Anaerobic (118-200%) – Red
    • Z7 Sprint (>200%) – Magenta

    Interactive hover shows exact values at specific durations.

    Right Column: Racing Performance

    ZRS Graph Panel

    Dashboard Metrics (7 cells):

    • Current ZRS score
    • Lowest score in last 90 days
    • Highest score in last 90 days
    • Net change (total gains/losses)
    • Average change per event
    • Worst single event loss
    • Best single event gain
    • Eligible race categories (hexagon badges, clickable to show upcoming events in that category)

    Score History Graph:

    • Time-series line chart showing ZRS progression (last 90 days)
    • X-axis: Time with month labels
    • Y-axis: ZRS score (0-1000)
    • Background diagonal stripe patterns show category boundaries:
    • Range 1: E (0-159), D (160-269), C (270-389), B (390-509), A (510-649)
    • Range 2: E (0-209), D (210-329), C (330-449), B (450-569), A (570-724)
    • Advanced: A+ (650-1000)
    • Data points colored by category of event
    • Trophy icons displayed to highlight podium finishes
    • Hover tooltips show event name, date, score change, rank, field size
    • Smooth connecting lines show trajectory

    Race Ranking Panel

    Ranking Points Bar Chart:

    • X-axis: Chronological event sequence (oldest to newest)
    • Y-axis: Ranking points earned (0-100)
    • Each bar represents one ranked event
    • Bar height = points earned
    • Bar color = event category
    • Top 5 events highlighted with filled background (these count toward ranking)
    • Hover tooltips: event name, category, exact points, rider’s position

    ZwiftPowers’s ranking system uses top 5 events from last 90 days. This visualization shows which races currently contribute to the ranking score.

    Event Pages & Table Enhancements

    ZwiftPower Table Enhancement

    New ZRS Columns

    • “ZRS” column displaying current score
    • “±” column showing score change from the event
    • Score change type indicators (floor increased, at floor)

    ZRS Prediction Accuracy

    The extension calculates how accurately ZRS scores predicted the actual race results using Spearman’s rank correlation coefficient (ρ):

    • Compares predicted finishing order (based on pre-race ZRS scores) vs. actual results
    • Calculated per category, then weighted by field size for overall accuracy
    • Displayed as percentage: +100% = perfect prediction, 0% = random, -100% = inverse
    • Color-coded indicator: green (≥60%), yellow (30-59%), red (<30%)

    This metric provides insight into whether the race results aligned with pre-race ZRS expectations (an objective way of determining how well ZRS is actually working).

    Non-ZRS Event Detection

    Events where no ZRS changes occurred (workouts, group rides, etc.) are identified and labeled with a “Non-ZRS Event” indicator, preventing confusion when no scores appear.

    Under the Hood: Data Sources & Integration

    The extension aggregates data from multiple sources to provide comprehensive racing analytics:

    ZwiftPower

    Profile and event metadata is extracted from ZwiftPower.com through two complementary methods:

    Scraping: The extension reads visible event tables directly from the rendered page HTML to extract:

    • Event IDs and dates
    • Race categories and results
    • Rider rankings and positions
    • Event names and metadata

    Interception: When ZwiftPower loads profile data via API calls, the extension intercepts these requests to capture:

    • Complete event history
    • ZwiftPower-specific metadata (race types, categories)
    • Signup information
    • Event results

    Zwift Official API

    ZRS scores and detailed race results come directly from Zwift’s official API.

    Race Results Endpoint:

    • ZRS scores (current and change)
    • Score change types (floor increased, etc.)
    • Subgroup assignments
    • Field sizes and rankings

    Profile Endpoint:

    • Rider name and basic info
    • Weight, height, FTP
    • Country and platform data

    Activities Endpoint:

    • Recent ride history
    • Activity types (races, group rides, workouts)
    • Performance metrics

    Max30 Endpoint: (personal profile only)

    • Only accessible for the authenticated user’s own profile

    Power Curve Endpoint:

    • Complete power profile data across all durations
    • Recent best efforts (5s, 15s, 30s, 1min, 2min, 5min, 10min, 20min, 60min, etc.)
    • Only accessible for the authenticated user’s own profile

    Intervals.icu Power Data

    Benchmark power data embedded directly in the extension from Intervals.icu’s analysis of thousands of real cyclist power files:

    Coverage: Age/gender-specific percentile data for:

    • Multiple age brackets (Under 23, 30-34, 40+, 50+, 60+, etc.)
    • Male and female categories
    • Seven key durations (5s, 15s, 30s, 1min, 2min, 5min, 20min)

    Questions or Comments

    Share your thoughts below!

    Related Posts

    Facebook
    Twitter
    Pinterest
    ReddIt
      Eric Schlange
      Eric Schlangehttp://www.zwiftinsider.com
      Eric runs Zwift Insider in his spare time when he isn't on the bike or managing various business interests. He lives in Northern California with his beautiful wife, two kids and dog. Follow on Strava

      8 COMMENTS

      Subscribe
      Notify of
      guest

      guest

      8 Comments
      Oldest
      Newest Most Voted
      Inline Feedbacks
      View all comments
      wpdiscuz   wpDiscuz

      Get Started on Zwift

      Sign Up (Free Trial)
      Buy Zwift Ride
      Buy KICKR CORE One
      Read More...

      Newest Featured Posts

      Zwift Update Version 1.104 (156617) Released

      Game Updates

      Zwift Racing League 2025/26 Round 3 Details: Routes, Rules, Registration + More

      Events

      Support This Site

      Write a post, shop through us, donate or advertise. Learn more

      NEWSLETTER SIGNUP

      Zwift tips and news every 2 weeks! Click to subscribe.

      More Posts

      Upcoming Events from Flamme Rouge Racing

      Events

      How the Race Was Lost: Maxing Out the VO2 Max (Empire Elevation)

      Racing

      Using Zwift as a Lifeline: My Rehabilitation Journey After a Cycling Accident

      Interviews

      All About the 2025 Rapha Festive 500 on Zwift

      Events

      This community-driven site is maintained by Eric Schlange and a team of Zwift enthusiasts. Zwift Insider is independent of Zwift corporate (www.zwift.com), although Zwift does provide funding to help defray site costs.

      This site contains affiliate links to Amazon, Wahoo, and other brands. Zwift Insider makes a small commission on purchases made from these links, so please shop through them to support our efforts.

      Terms of Use/DMCA Copyright Policy

      Privacy Policy | Privacy Consent

      [email protected]

      Latest articles

      Nowhere Fast Episode 61 – Same As It Ever Was

      Zwift Update Version 1.104 (156617) Released

      Zwift Racing League 2025/26 Round 3 Details: Routes, Rules, Registration + More

      Popular Categories

      • Racing1587
      • Events1102
      • News841
      • Training & Nutrition743
      • Interviews569
      • Routes & Maps480
      Comment Author Info
      8
      0
      Would love your thoughts, please comment.x
      ()
      x
      | Reply
      You are going to send email to

      Move Comment

    • Related Posts