Indoor Cycling with Garmin: Zwift, ERG Mode, and Power Zones

Sport Guides

Indoor Cycling with Garmin: Zwift, ERG Mode, and Power Zones

April 16, 2026

Indoor cycling should be simple. You get on the bike, spin for an hour, and your data appears in Garmin Connect. But if you've ever ended up with two versions of the same ride, a power number that doesn't match what Zwift reported, or training load that looks completely wrong after a hard block — you know it isn't.

The reason is that indoor cycling involves three systems that all want to own your data: your smart trainer, your cycling platform (Zwift, TrainerRoad, or a standalone app), and your Garmin device. Getting them to cooperate — without duplicating or losing rides — takes a deliberate setup.

This guide covers the right way to configure Zwift or TrainerRoad with Garmin, how ERG mode actually works (and when it fights you), how to run an FTP test indoors, and how to make sure your power zone structure is consistent everywhere it needs to be.


Why Indoor Cycling Data Gets Messy

The core problem is that every recording device thinks it's the authoritative source.

Your Garmin watch will record a ride if it has the sensors paired. Zwift records its own ride file. TrainerRoad does the same. If you sync all of them to Garmin Connect, you end up with duplicates — or worse, conflicting TSS and training load numbers that make the rest of your analytics meaningless.

Power readings can also diverge. If your trainer uses ERG mode to hold 250W but you also have a crank-based power meter paired to Garmin, you may see slightly different numbers between the two sources. Neither is wrong — they measure different things at slightly different points in the drivetrain. But you need to pick one as your reference and use it consistently across platforms, or your FTP-relative zone work stops making sense.

The fix is straightforward: designate one source as the primary recorder for each ride, and let everything else follow.


The Right Setup for Zwift + Garmin

Zwift should be the primary recorder for Zwift rides. That means Zwift writes the .fit file, syncs it to Garmin Connect via the Zwift → Garmin Connect connection, and Garmin Connect treats it as the ride of record.

Here's how to configure it cleanly:

Step 1 — Connect Zwift to Garmin Connect. In the Zwift companion app, go to Settings → Connected Apps and link your Garmin Connect account. Once connected, completed Zwift rides will auto-sync to Garmin Connect, usually within a few minutes of saving.

Step 2 — Pair sensors once in Zwift, not on your Garmin watch. Your smart trainer should broadcast power to Zwift over Bluetooth or ANT+. Zwift records power, cadence, and speed. Your heart rate monitor can pair to both Zwift (for display) and your Garmin watch (if you want HR recorded on the watch side) — but this is the only sensor that should be shared.

Step 3 — Do not start a ride activity on your Garmin watch. This is the most common mistake. If your Garmin is also recording the ride, you'll get a duplicate in Garmin Connect. Wear the watch for the day's activity tracking and heart rate, but don't press start on a cycling activity.

Step 4 — Verify the sync. After a ride, check Garmin Connect. The activity should appear with power data, a normalized power figure, and Training Stress Score. If it arrives with no power, check that the Garmin Connect connection in Zwift is still authorized — tokens expire.

For structured workouts done inside Zwift (rather than Zwift's game environment), the same rule applies: Zwift records, Zwift syncs.


The Right Setup for TrainerRoad + Garmin

TrainerRoad follows the same principle. TrainerRoad is the primary recorder for TrainerRoad rides, and it has its own Garmin Connect sync that handles the upload automatically.

Enable this under TrainerRoad Settings → Connections → Garmin Connect. After each completed workout, TrainerRoad will push the ride to Garmin Connect with full power data included.

One advantage TrainerRoad has over Zwift here: its workout files are structured specifically for intervals, so Garmin Connect receives cleaner lap splits that map to your target power zones. This makes reviewing training load more meaningful because the effort breakdown reflects what you actually targeted.

If you use TrainerRoad's outside workout feature — pushing workouts to Garmin for outdoor execution — the Garmin device becomes the recorder for that specific ride. But indoors, TrainerRoad owns it.


ERG Mode vs Slope Mode

Smart trainers offer two fundamentally different resistance modes, and choosing the wrong one for the wrong session is one of the most common setup errors in indoor training.

ERG Mode

In ERG mode, the trainer adjusts resistance automatically to hold your power at the target. If you're supposed to hold 240W and you pedal faster, the trainer reduces resistance to keep output constant. Slow down, and it increases resistance. You spin; the trainer manages the work.

ERG is ideal for structured interval work — threshold repeats, VO2 max intervals, sweet spot blocks. You can focus entirely on cadence and execution without managing gears.

But ERG has a failure mode called the spiral of death. If you fall behind your target power and let your cadence drop, the trainer increases resistance to compensate. Lower cadence → more resistance → harder to push → cadence drops further. Within seconds you're grinding to a halt. The fix: keep cadence above 85 rpm in ERG mode. If you're struggling, shift to a lower virtual gear before your cadence collapses — some trainers allow this mid-interval.

Slope Mode

In slope mode (sometimes called resistance or sim mode), the trainer simulates a fixed gradient. You control power through gears and cadence just like riding outdoors. Zwift's game environment runs in slope mode — the terrain dictates resistance changes.

Use slope mode for free rides, races, and zone 2 aerobic sessions where you want natural power variability rather than a locked target.

Switching between modes is usually instantaneous in Zwift (entering a structured workout flips to ERG) but requires a manual change in TrainerRoad under the workout player settings.


FTP Testing Indoors: More Accurate Than You Think

Outdoor FTP tests are contaminated by variables you can't control — wind, terrain, traffic, temperature, road surface. Indoor tests eliminate all of them. A properly executed indoor FTP test gives you a cleaner, more repeatable number than most outdoor efforts.

See the full FTP testing guide for detailed protocols. The short version:

The 20-Minute Test

Warm up for 20 minutes including a few hard efforts to open the legs. Ride as hard as you can sustain for exactly 20 minutes. Record your average power.

Apply the 0.95 correction factor (your sustainable hour power is roughly 95% of your 20-minute max):

Example: 20-minute average = 245W → 245 × 0.95 = 233W FTP

This correction accounts for the fact that most athletes can't sustain their 20-minute power for a full hour.

The Ramp Test

TrainerRoad and Zwift both offer ramp tests — stepwise power increases until failure. Your FTP is estimated from the last completed step. Ramp tests are faster (about 25 minutes total) and less psychologically brutal, but some athletes find the result slightly inflated compared to sustained-effort protocols.

Set your new FTP in all three places: Garmin Connect (under Cycling → FTP), your training app (TrainerRoad or Zwift settings), and verify it matches what's being used for zone calculations. You can calculate your FTP and all 7 power zones from any test protocol here. Mismatched FTP values across platforms are the single biggest cause of inconsistent zone work.


Power Zones Setup Across Platforms

Once FTP is set, your power zones need to be consistent everywhere — otherwise a "Zone 4" in Zwift means something different than Zone 4 in your Garmin data, and reviewing training becomes meaningless.

The standard reference is the Coggan 7-zone model:

Zone Name % of FTP Purpose
1 Active Recovery < 55% Easy spinning, recovery
2 Endurance 56–75% Aerobic base, long rides
3 Tempo 76–90% Sustained moderate effort
4 Threshold 91–105% Lactate threshold work
5 VO2 Max 106–120% Short high-intensity intervals
6 Anaerobic 121–150% Hard short efforts
7 Neuromuscular > 150% Sprints, maximal power

In Garmin Connect, set these under your Cycling profile → Power Zones → Custom. In TrainerRoad, zones are set automatically from your FTP. In Zwift, check under Settings → Training → Power Zones.

Common mistake: Zwift and TrainerRoad default to different zone models. Zwift uses a 7-zone Coggan structure; some Garmin configurations default to a 5-zone model. Standardize on one model and manually configure the others to match. See how power zones compare to heart rate zones if you use both.


Getting Clean Data for Coaching and Analytics

The reason all of this setup matters is that Garmin Connect is where your training load actually lives. When Zwift and TrainerRoad sync correctly, Garmin Connect accumulates a complete picture: acute load, chronic load, load ratio, FTP-relative intensity. That data feeds everything downstream.

For athletes using AI coaching tools or platforms like TrainingPeaks, the Garmin Connect connection is what makes your indoor rides visible to the coaching layer. Without it, your hard trainer sessions are invisible — you look undertrained when you're not.

Gneta reads this unified Garmin Connect data — including indoor rides from any source — to surface training patterns, flag recovery gaps, and adjust recommendations when your FTP changes. If you've just retested and bumped your FTP, Gneta picks that up and recalibrates what your zone work should look like going forward. No manual entry. The data hub does the work.


A clean indoor setup takes about 20 minutes to configure correctly. After that, every ride — whether it's a Zwift race, a TrainerRoad threshold block, or a solo ERG session — lands in Garmin Connect with accurate power, zones, and load data. That's the foundation for training that actually compounds.


Related reading:

Keep Reading