Intervals.icu Workout Format
Syntax, rules, and examples for writing structured workouts.
Overview
The Intervals.icu workout format is a plain-text syntax that describes steps with duration or distance and intensity targets. It supports cycling (power), running (pace) and heart rate targets, and you can mix modes within a single workout.
Time & Distance
Time
hhours:1h-
mminutes:10m,5m -
sseconds:30s,90s - Combined:
1m30 -
Shorthand:
5'(5 min),30"(30 sec),1'30"
Distance
km:2km,10kmmi:1mi,4.5mi
m means minutes, not
meters. Use km or mi for distance
steps (e.g., 0.4km instead of 400m).
Intensity
Cycling (Power)
-
Percent of FTP:
75%,88%,95-105% - Watts:
220w,200-240w - Zones:
Z2,Z4
Heart Rate
-
Percent of max:
70% HR,75-80% HR -
Percent of threshold:
95% LTHR,90-95% LTHR - Zones:
Z2 HR,Z3 HR
Running (Pace)
- Percent of pace:
78-82% pace - Zones:
Z2 Pace,Z3 Pace
Ramps
Use ramp for gradual changes (case-insensitive):
- 10m ramp 50%-75%
- 15m ramp 60%-90% 85rpm
- 10m ramp 60-80% pace
freeride marks an ERG-off
step, e.g. - 20m freeride
Cadence (Cycling)
- 10m 75% 90rpm
- 5m 88% 70rpm
- 12m 85% 90-100rpm
Repeats
Two forms are supported:
- In a section header:
Main Set 5x - Standalone line before a block:
5x
nx define
repeats; occurrences inside descriptive text are ignored.
Text Prompts
- Any text before the first duration/intensity becomes the step cue.
-
Repeated blocks append
k/Nto the first step’s text (e.g., Main set 1/6).
- Recovery 30s 50% # cue: "Recovery"
Main Set 6x
- Low cadence 4m 100%
- 5m 50%
Timed Text Prompts
You can add text prompts that appear at specific times within a workout step. This is useful for in-workout instructions or reminders.
The syntax uses time^ to specify when a message should
appear, and <!> to separate the prompts from the
rest of the step definition.
# Syntax:
# - [prompt at 0s] [time1]^[prompt1] [time2]^[prompt2]... <!> [duration] [target]
# Example:
- First prompt at 0s 33^ 2nd prompt at 33s <!> 10m ramp 25-75%
<!> separator is
required if you have timed prompts.
Examples
Cycling VO2 Max
Warmup
- 10m 50%-65% 90rpm
Main Set 5x
- 3m 120% 100rpm
- 2m Z1 85rpm
Cooldown
- 8m ramp 50%-40% 80rpm
Running Long Run
Warmup
- 2km 70-75% pace
- 2km 75-78% pace
- 2km 78-82% pace
Main Set 2x
Marathon effort target 4:28-4:32/km.
- 6km 90-92% pace
- 2km 75-80% pace
Cooldown
- 2km 72-76% pace
Distance-based Intervals (Run)
Warmup
- 1mi Z1 HR
Main Set 4x
- 1mi Z4 Pace
- 0.5mi Z1 Pace
Cooldown
- 1mi Z1 Pace
Freeride Block (Bike)
Warmup
- 10m ramp 55-75% 90rpm
Main Set
- 20m freeride
- 5m 70%
Cooldown
- 8m 60%
Intensity Zones Reference
Cycling (% of FTP)
- Z1 Recovery: < 55%
- Z2 Endurance: 56–75%
- Z3 Tempo: 76–90%
- Z4 Threshold: 91–105%
- Z5 VO2 Max: 106–120%
- Z6 Anaerobic: > 120%
Running (% of Pace)
Higher percentages = faster pace.
- Z1 Recovery: 70–75%
- Z2 Easy: 76–80%
- Z3 Tempo: 81–88%
- Z4 Threshold: 89–95%
- Z5 VO2 Max: 96–105%
- Z6 Sprint: > 105%
Parsing Rules
-
Section headers: Lines without
-(e.g., Warmup, Main Set 2x). -
Repeats: Either
<Section> nxor a standalonenxline before a block. -
Steps: Lines starting with
-. - Sport type: Determined by workout metadata (Run → pace; otherwise power), but steps may use HR explicitly.
-
Intensity: Percentages (
%), watts (w),pace, zones (Z), HR (% HR/% LTHR). -
Ranges: Use
a-b(e.g.,85-90%,200-240w,70-80% HR). -
Ramps:
ramp a-b(case-insensitive). - Free text: Allowed anywhere in a step; everything before the first duration/intensity becomes the cue.
Notes
- Use blank lines between sections for readability (one is enough).
-
Keywords are case-insensitive (e.g.,
Rampvsramp). - Some integrations add “Press lap …” cues for lap-press endings (export feature, not syntax).