The workout format
Simply Train workouts are lift.md files. Anything valid in the LiftMark Workout Format is valid here, and this page documents the small set of additions Simply Train makes in order to run a workout rather than merely record one.
A complete file
One workout per file. The first heading with exercise headings under it names the workout; headings one level below it are exercises; headings at that level with no sets of their own are sections. Each list item is exactly one set.
# Upper Body A strength, push kg 60s 90s Quick session focused on push strength. Keep core tight throughout. ## Warmup ### Arm Circles- 20- 20 ### Jumping Jacks- 60s ## Main ### Push-Ups- x 12- x 12- x 12 90s ### Sit-Ups 45s- x 20- x 20- x 20 ### Goblet Squat open- 12 kg x 10- 12 kg x 10- 12 kg x 10Read that file in any markdown viewer and it still looks like a sensible plan. That is the point of the format: it is a document first.
Set lines
One line is one set, and one set is one step in the player. The kinds are mutually exclusive — a line is reps, or time, or distance, not two of them.
| Written | Means | In the player |
|---|---|---|
| - x 12 | twelve reps, bodyweight | shows the target, waits for Next |
| - 12 | the same, written shorter | shows the target, waits for Next |
| - 100 kg x 5 | five reps at a hundred kilos | shows target and weight |
| - 225 lbs x 5 | pounds instead | shows target and weight |
| - x 8-12 | a rep range | shows “8–12 reps” |
| - x AMRAP | as many as possible | shows “MAX” |
| - 60s | a sixty-second set | counts down and advances itself |
| - 2m | two minutes — m is always minutes | counts down |
| - 1m30s | ninety seconds, compound | counts down |
| - 45 lbs x 60s | a loaded hold | counts down, weight shown |
| - 200 meters | a distance | shows the target, waits for Next |
| - 60s per leg | per-side | runs left, then right |
Weight is external resistance only: a pull-up with a 25 lb belt is 25 lbs x 8. Units are optional per set and default to the workout’s @units:. Anything trailing on the line that isn’t a modifier becomes that set’s note and is shown while you do it.
Modifiers
Appended to a set line, or placed on their own line directly beneath a heading to apply to everything under it.
| Key | Where | Meaning |
|---|---|---|
| @rest: 90s | set, exercise, workout | rest after the set |
| @rest: open | set, exercise, workout | user-paced rest — the clock counts up and waits |
| @exercise-rest: 2m | exercise, workout | rest between one exercise and the next |
| @countdown: 5s | workout | get-ready lead-in before each timed set |
| @units: kg | workout | default weight unit — kg or lbs |
| @tags: strength, push | workout | free-text tags |
| @perside | set | run the set left, then right |
| @dropset | set | marked on the work step |
Extensions to lift.md
Of the above, @rest at exercise and workout level, @rest: open, @exercise-rest, @countdown, compound durations such as 1m30s, and rep ranges such as x 8-12 are Simply Train’s additions. Everything else is the core format. A tool that only knows core lift.md reads the additions as unknown metadata and carries on, which is exactly what unknown keys are for.
How rest is decided
For the rest that follows a given set, the most specific rule wins:
- 1@rest: on the set line itself
- 2@rest: on the exercise
- 3@rest: on the workout header
- 4the default in Settings — 60s
Between the last set of one exercise and the first of the next, the rest is @exercise-rest: instead, falling back to its own Settings default of 90 seconds — unless that last set carries an explicit @rest:, which wins. No rest is ever added after the final set of a workout: a session ends on work. @rest: 0s is legal and means carry straight on.
What counts as an error
The format is strict about meaning and liberal about formatting. Prose, bold text and links under a heading are ignored, not flagged. Something suspicious but runnable — a rest of four seconds, a set of two hundred reps, a deprecated key — is a warning and never blocks you.
An error is a line that was clearly meant as a set and cannot be compiled: a weight with no reps, a distance combined with a weight, a rep range that counts backwards, two @rest keys on one line. Those block Start, because silently skipping a line you meant as a set is the one failure you would only discover mid-workout.
Supersets
A section heading whose text contains “superset” groups the exercises beneath it. Simply Train parses these per the specification and keeps the grouping, but this version runs them in order rather than interleaved, and says so with a warning when the session starts. Interleaved execution is the next planned change and affects only how the file is compiled, not how it is written.