All posts
Guides ·25 March 2027 · 8 min read

How to export a workout to your Garmin or Zwift (.zwo and .fit explained)

The Moveee team

Free coaching · a real route for every ride

You built (or were given) a structured workout in one app, and you want to ride it somewhere else — on your Garmin out on the road, or in Zwift on a rainy Tuesday. That trip happens through two file formats, .zwo and .fit, and the whole topic is less mysterious than the file extensions make it look. Here's what each format actually is, what opens where, and the exact steps to get a workout onto the two most common destinations.

The short version
  • .zwo is Zwift's XML workout file; .fit is Garmin's binary format, spoken by nearly every head unit.
  • The classic confusion: a .fit file can be a workout (a plan) or an activity (a recording). Same extension, different things.
  • Targets travel as % of FTP, so a workout stays correctly hard everywhere — as long as your FTP is set the same in each app.

The two formats, demystified

.zwo — the Zwift workout

A plain-text XML file describing a structured workout: warm-up, intervals, recoveries, each with a duration and a target as a percentage of FTP.

Human-readable — you can open one in a text editor and see the intervals. Understood by Zwift and by several other training apps.
.fit — Garmin's binary format

A compact binary format from Garmin, used across the whole industry. Not human-readable, but far more widely supported by hardware — head units speak .fit natively.

One file extension, two jobs: a .fit can be a WORKOUT (a plan to execute) or an ACTIVITY (a recording of a ride). Same extension, different contents.

The .fit confusion, cleared up once

Most head-scratching in this area comes from one fact: .fit is used for both workouts and activities. A workout .fit says "do 3 × 12 minutes at 90% FTP" — it's instructions, made before the ride. An activity .fit says "here's every second of power, heart rate and GPS from the ride you did" — it's a recording, made after. They share an extension because .fit is really a container format with many message types inside. So when an import fails with something like "not a valid workout," you've almost certainly fed a recording into a workout importer (or vice versa). Nothing is broken; you just have the other kind of .fit.

What opens where

Destination .zwo workouts .fit workouts
Zwift Native — its own format Activities only (not workout import)
Garmin head units No Yes — workouts via Connect or USB
Wahoo (ELEMNT / SYSTM) No (ELEMNT); SYSTM has its own library Yes — planned workouts sync to ELEMNT
MyWhoosh Yes — imports .zwo workouts Activities export
Hammerhead Karoo No Yes — workout .fit files

Support shifts with software updates — treat this as the current lay of the land, and check your device's import options if a row surprises you.

Getting a workout onto a Garmin

1

Via Garmin Connect (the tidy way)

Open connect.garmin.com → Training & Planning → Workouts → import the .fit workout file. It appears in your workout library.

2

Send to device

In Connect, choose "Send to device" — the workout syncs to your Edge or watch next time it connects (Wi-Fi, phone, or cable).

3

Or go direct over USB

Plug the Edge in and drop the file into the Garmin/NewFiles folder. On next boot the unit ingests it into Training → Workouts.

4

Ride it

Start the workout on the unit; it steps through your intervals with target alerts. Pair a trainer and newer Edges can even drive ERG.

Getting a workout into Zwift

1

Find the custom workouts folder

On the computer where Zwift runs: Documents/Zwift/Workouts/<your numeric rider ID>. That per-rider folder is the magic location.

2

Drop the .zwo in

Copy the file into that folder. No renaming needed — the workout's name lives inside the XML, not in the filename.

3

Restart Zwift and look under Custom Workouts

Open the workout picker; your file appears in the Custom Workouts category. Zwift reads the folder at launch, so restart if it was open.

One wrinkle: on iPad or Apple TV there's no accessible Workouts folder, so custom .zwo files need to go in via a computer that shares the same Zwift account — they'll then be available on your other devices.

Why the workout stays the right hardness everywhere

Here's the elegant part of both formats: interval targets are stored as a percentage of FTP, not as raw watts. The file says "12 minutes at 90%," and each destination multiplies that by its FTP setting for you at ride time. That's what makes a workout portable across a whole winter of changing fitness — but it's also the one thing that can silently go wrong. If your FTP is 260 W in the app that built the workout and still 230 W on the Garmin from last spring, the "same" workout is a different session on each device. Whenever your FTP changes, update it everywhere you ride. It's a two-minute chore that keeps every exported file honest.

Exporting from your plan

If your training plan lives in Moveee, any planned workout exports straight from the calendar as .zwo or .fit — so the session your plan scheduled for Thursday can be ridden on your Edge up a real climb, in Zwift, or in Moveee Indoor without leaving the browser. The plan doesn't care where you ride the intervals; it only cares that you do.

Ready to ride with a plan?

Connect Strava and get your first three-week block today — free.

Continue with Strava