The Great vOutdoors

#OutsideIsFree they used to say, but it has become rather expensive these days, even criminal.
As such, many cyclists have turned to indoor cycling and the virtual world to replace the "outdoors."

While some PROs are more than happy to churn away on their indoor turbo trainers, other Professional riders I know said that they started racing professionally for the love of riding their bike; riding indoors on their trainers is not "riding their bike."
These Pro Athletes are having a tough time, especially mentally, as maintaining a Pro-level training volume indoors is undoubtedly a challenge if that's not your thing.
I won't mention the fact that WorldTour Pros are losing races on Zwift because of inexperience and noob mistakes, we'll leave that for a later post perhaps.

Anyway, these are all problems I'm sure we'd like to have - Pro level training volume, albeit indoors.

In today's post, I want to walk you through creating workout files for Zwift.
It has come up several times over the last few days - athletes on a structured training plan that have an "outdoor" ride scheduled but have to perform it indoors.

An app such as The Sufferfest has many of these sessions, and these are all "NoVid" sessions, meaning that you get to stare at blue graphs for a few hours if you indeed ride them indoors.
The alternative is to ride these outdoor sessions on Zwift (or something else if you like, but Zwift is the best option in my mind, so I'll just ignore the rest :)

Ok, here's how to ride an outdoor workout indoors on Zwift.
(This works for any training software that doesn't integrate with Zwift).


  1. Your workout schema
  2. (free)
  3. Zwift
  • Time: 5-10 minutes
  • Serves: 1-100 (100 riders max for a Zwift meetup)

Step 1:

Note down the workout structure.
In our example:

FTP/MAP Builds: 2 Sets 3 x 6 (3:00hr)
  • 20 minutes @ RPE 3 -- 55% of FTP -- HR <70%
  • 1 minute @ RPE 3.5 -- 65% of FTP -- HR <80%
  • 1 minute @ RPE 5 -- 75% of FTP -- HR <85%
  • 1 minute @ RPE 6 -- 85% of FTP -- HR <90%
  • 30 seconds @ RPE 7 -- 95% of FTP -- HR <95%
  • 30 seconds @ RPE 8 -- 90% of MAP (105-135% of FTP)
  • 5 minutes @ RPE 2 -- 45% of FTP -- HR <70%

Main Effort
  • Number of Sets: 2
  • Rest Between Sets: 30 minutes @ RPE 2.5 -- 50% of FTP -- HR <80%
  • Interval Repeats per Set: 3
  • Interval
    • FTP Effort: 4 minutes @ RPE 7.5 -- 100% of FTP -- HR <100%
    • VO2 Effort: 2 minutes @ RPE 9 -- 90-95% of MAP (105-130% of FTP)
    • Recovery: 5 minutes @ RPE 2 -- 45% of FTP -- HR <70%
Extra Volume
  • 50 minutes @ RPE 3 -- 60% of FTP -- HR <85%
Cool Down
  • 5 minutes @ RPE 1 -- <45% of FTP -- HR <70%

Step 2:

  1. Go to
  2. Hit the Gear Icon to set your FTP, or use absolute power if you're copying from a NoVid directly.
  3. Now, let's start to build the workout
    1. I will generally ignore HR targets, as those are mostly just irrelevant and "nice to have."
    2. Enter the name and other info you want for the workout
    3. For each interval, we'll use the blocks available above the edit window
    4. Here is the warmup:

      Note that there's one interval that is MAP based, so the value is "105-135% of FTP". So set this by FTP or: 
    5. If you know your MAP, then just use the right value using the percentage. In my example, MAP is 339W, so 90% is 305W.
    6. If you click the Gear Icon, you can select "Display Absolute Power" to see the actual value and that it makes sense for you within your capabilities.
    7. Ok, let's build the main effort using the Interval Blocks. In this case, because there are 3 blocks to each interval, we'll need to do a small bit of copy/paste to get the right structure. No prob.

      And adding the "30 min rest between sets" and the 2nd set:
    8. Lastly, the Extra Volume and cool down:

      and the sanity check that the total workout duration matches.
  4. "Save to my Workouts" will keep this workout in your account
  5. "Download .zwo file" to your computer

Step 3: copy the .zwo file to your Zwift workout directory.


Zwift workout files are saved under Documents/Zwift/Workouts/YourZwiftID as ".zwo" files.
If you have downloaded a new workout file and want to use it in Zwift, simply save it to Documents/Zwift/Workouts/YourZwiftID (where "YourZwiftID" is your Zwift ID number), then start up Zwift.
Your workout will appear under the "Custom Workouts" category in the workouts list.
To further organize your custom workouts, you can create directories under Documents/Zwift/Workouts/YourZwiftID and save your workouts to specific directories.
If you use Zwift on several devices, once uploaded, the workout will appear in all of them!


Download the file explorer software. e.g iFunbox
Connect your iDevice to your computer via USB and run iFunbox.
In iFunbox click "Managing App Data" then click on the Zwift app under "iTunes File Sharing" and choose "Open Sandbox."
Double Click the "Zwift" folder to open, then double-click "Workouts."
Click the folder with your Zwift userID.
This is the folder where you should place your custom workout files. Just drag and drop them in and you're set–run Zwift on your iDevice, select "Choose Workout," and your workouts will show up.

Last Step, when you're ready to ride:

Open Zwift and from the Lobby, click "Training" to open up the workout library.
Then, you'll find all your workouts under the "Custom Workouts" tab, separated by directories, if you chose to create any.
Select your session, and click "Workout" at the bottom.

When you start your session, you'll have your structured session all ready to go!

Ok, some more info:
You don't have to use Zwift for this.
You can find other alternatives to play an ERG file.
ERG files can also be exported from zwofactory.
For example

Also, zwofactory can add text prompts to your workouts, set cadence targets, and has another two cool options for individual interval blocks:

  1. Show average power - to show on your Zwift screen the average power for the interval. Great for tests
  2. Disable forced flat road - if you want to simulate an outdoor ride better, just make sure you choose a route that's more or less suitable for your session.

That's basically it.
Questions? Let me know in the comments. I will read and respond to each one.