lift.md format
lift.md format is a small, markdown-based format for strength training workouts (formerly "LMWF"). It is designed to be readable and editable by humans, and trivially parseable by tools — including LLMs asked to generate or modify workouts. The format is an open specification licensed under CC BY-SA 4.0, independent of any particular app.
At its simplest, a workout is a header, an exercise, and a list of sets:
# Bench Day
@units: lbs
## Bench Press
- 135 x 5
- 185 x 5
- 225 x 5
That's a valid lift.md format document. Most real programs need more — warmup and cooldown blocks, programming guidance, per-set rest targets, time-based sets, tags, and supersets. All of it stays in plain markdown:
# Push Day
@tags: strength, push
@units: lbs
Focus on bar path on bench. Keep rest strict — don't pad between sets. Stop if bar speed dies on the top set.
## Warmup
### Band Pull-Aparts
- x 20
### Light Bench Press
- 45 x 10
- 95 x 5
## Bench Press
Build to a top set, then back off. Stop the top set if bar speed dies — no grinders.
- 135 x 5 @rest: 120s
- 185 x 5 @rest: 180s
- 225 x 5 @rest: 180s Aim for RPE 7
- 245 x 3 Target RPE 8, leave 2 in the tank
## Overhead Press
Strict press, no leg drive. If the last set feels easy, add 5 lbs next session.
- 95 x 8 @rest: 90s
- 115 x 8 @rest: 90s
- 135 x 6
## Arms Superset
### Cable Triceps Pushdown
- 50 x 12
- 50 x 12
- 50 x 10
### Dumbbell Curl
- 30 x 10
- 30 x 10
- 30 x 8
## Cooldown
### Chest Stretch
- 60s
### Foam Rolling
- 2m
A lift.md format document describes a workout plan — what you
intend to do, not a record of what happened. A few things to notice:
@tags and @units are workout-level metadata;
prose between a header and its sets is preserved as a note, and is the
right place for programming intent, cues, and stop conditions (see the
notes under Push Day, Bench Press, and
Overhead Press); @rest is the main per-set
modifier, and any trailing text after the set and its modifiers becomes
a freeform note on that set — the preferred way to express descriptive
targets like RPE or tempo; sets without a weight (- x 20)
are bodyweight; sets expressed as a duration (- 60s,
- 2m) are time-based; and Arms Superset
demonstrates the superset convention — a parent header with its
exercises nested one level deeper.
See the full spec for the complete set of modifiers, metadata fields, validation rules, and edge cases.
Try it
Edit or paste a lift.md format workout below and click Validate. The
request is sent to the live validator API at POST /validate.
Links
- Full specification (also available as raw markdown)
- GitHub repository
-
Validator API:
POST https://getlift.md/validatewith JSON body{"markdown": "..."} - llms.txt — machine-readable index for LLMs