Rowing Workout Notation (RWN)

This page follows the same flow used in Logbook Companion: learn the specification clearly, then move into playground-driven examples and validator usage.

RWN Reference

Version 0.1.0-draft • Request for Comment

RFC Status

Why RWN

Rowing already has strong informal workout shorthand, but teams and apps still use slightly different syntax. RWN keeps the notation coaches already understand while making it predictable enough for software to parse, validate, and execute.

Shared language across teams

Use one readable format for athletes, coaches, and planners instead of rewriting workouts per tool or spreadsheet.

Reliable tooling and automation

Structured syntax enables parser validation, canonical names, and template workflows in Logbook Companion.

Interoperability as a standard

A lightweight open standard makes it easier to share plans between apps, communities, and future integrations.

Quick before/after example

Informal: 4 by 500, 1 minute rest, 2k pace ish

4x500m/1:00r@2k

1. Basic Structure

Standard Intervals

[Repeats] x [Work] / [Rest]r

  • 4x500m/1:00r
  • 8x1:00/1:00r
  • 500m/1:00r

Steady State

[Duration] or [Distance]

  • 10000m
  • 30:00

2. Components

ComponentExamplesNotes
Work Unit500m, 1:00, 500calDistance, time, or calories.
Rest Unit1:00r, 3:30rUses trailing rest suffix.
Guidance@r20, @2:05..2:10, @UT2Execution intent metadata.

3. Extended Guidance (@)

Stroke Rate
@r20
or @18..22spm
Pace Target
@1:45
or @2:05..2:10
Relative Pace
@2k+10
PR + offset
Zone
@UT2
Intensity zones

Block Tags (Semantic Structure)

[w]10:00Warmup (10 min)
[c]5:00Cooldown (5 min)
[t]2000m@2kTest segment

3b. Advanced Guidance Features

@open Keyword

For intentionally unrestricted segments — sprints, athlete discretion, or "go as hard as you want."

0:30@open

500m@open

Distinct from omitted guidance — @open means intentional freedom, not a missing value.

Chained Guidance

Combine multiple guidance modifiers on a single work unit.

30:00@UT2@r20

Zone + rate applied together.

Sub-interval Guidance (+ segments)

Split a piece into segments with individual guidance using + inside repeats.

10x(2:30@r24..26 + 0:30@open)/30sr

First 2:30 controlled, last 30s open sprint.

3x(4:00@UT2 + 1:00@open)/2:00r

4 min steady + 1 min sprint per rep.

Input Tolerance / Shorthand

Flexible input forms that normalize to standard RWN notation.

InputNormalizedRule
3'3:00Minute shorthand
30"0:30Second shorthand
3'30"3:30Combined
30:00r2030:00@r20Rate shorthand
4 x 500m4x500mWhitespace tolerance
@18-22spm@18..22spmDash tolerance

4. Advanced Syntax

Segmented Workouts

Use + to chain blocks with clear flow.

[w]10:00 + 4x2000m/3:00r + [c]10:00

Grouped Repeats

Nest interval sets for ladders and compound blocks.

3x(750m/3:00r + 500m/3:00r)

PM5 Splits

10000m [2000m]

Undefined Rest

Use /...r for open or coach-defined rest periods.

4x2000m/...r

5. Machine Types & Mixed Modalities

Use modality prefixes for non-rowing activities and mixed circuits.

Bike: 15000m

Ski: 8x500m/3:30r

[w]Row: 5:00 + Row: 2000m + Bike: 5000m + Ski: 2000m + [c]Row: 5:00

6. Session Orchestration Draft

Experimental extensions for multi-athlete and non-erg session structures. These are under active design and may change.

Partner Workouts

Alternating athlete pairs with partner(on=[core], off=[task]).

partner(on=4x1000m/...r, off=wait)

Passive off-task — partner waits.

partner(on=4x1000m/...r, off=circuit(...))

Active off-task — partner does a circuit.

Relays

Team relay format with relay(leg=[distance], total=[distance]).

relay(leg=500m, total=6000m)

Basic relay — team size inferred from total ÷ leg.

relay(leg=500m, total=6000m, team_size=6)

Explicit team sizing.

Station Rotation

Circuit rotation with rotate(stations=[n], switch=[time], rounds=[n], plan=[...]).

rotate(stations=4, switch=5:00, rounds=3, plan=[Row: 5:00, Bike: 5:00, Ski: 5:00, circuit(...)])

Off-erg Circuit

Non-erg activities with circuit([exercise], [exercise], ...).

circuit(20 burpees, 20 pushups, 20 situps, 1:00 plank)