WODCRAFT

An open language · version 1.1

Write the WOD
like on the
whiteboard.
The compiler
reads it back.

WODCraft is a small language for prescribing functional-fitness workouts — and the compiler that checks them. Strict where it matters (units, movements, score coherence, plausibility), forgiving where coaches need it.

CAP 10:00 00:00
fran.wod
# Fran
21-15-9 for time, cap 10:00
  Thruster 95/65 lb
  Pull-up

Scaled:
  Thruster 65/45 lb
  Pull-up -> Jumping pull-up
 
FRAN
21-15-9 for time · cap 10:00
  Thruster .......................... 95/65 lb
  Pull-up
Score: time (capped: reps)
Estimate: 3:22–6:14
Levels: scaled
01

Readable by athletes

Any valid file can be put on the wall of the box as is. No braces, no YAML: whiteboard syntax.

02

Checked by a compiler

A box jump takes a height, not a load. 1 m Run asks whether you meant 1 mi. An EMOM nobody can finish is flagged.

03

One exchange format

The compiled JSON follows a versioned schema: it is what timers, apps and AI agents exchange.

04

Converted for you

Loads carry kilos and pounds, with the equivalences boxes actually use: 95 lb ↔ 43 kg, 24 in ↔ 60 cm.

01

How it works

Text goes in, a structured document comes out. Click a stage to see what it really produces for Fran.

  1. .wodSourceThe coach's text
  2. lex · parseReadingOne line, one statement
  3. 223 movesCheckingCatalog, units, plausibility
  4. schema 1.1JSONThe compiled document
  5. → everywhereOutputsBoard, timer, calendar, apps
02

The compiler reads it back

Every diagnostic carries a code from the specification, an exact line and column — and a suggestion when there is one. Real output of wodc check.

tuesday.wod
# Tuesday
EMOM 10
  25 Thruster 43/30 kg
  10 Box jump 24 kg
  1 m Run
  15 Pul-up
03

Every format in the box

For time, AMRAP, EMOM, intervals, Tabata, Death by, strength sets, teams, there and back… On the left what the coach writes, on the right what the board shows.

fran.wod
# Fran
21-15-9 for time, cap 10:00
  Thruster 95/65 lb
  Pull-up

Scaled:
  Thruster 65/45 lb
  Pull-up -> Jumping pull-up
FRAN
21-15-9 for time · cap 10:00
  Thruster .......................... 95/65 lb
  Pull-up
Score: time (capped: reps)
Estimate: 3:22–6:14
Levels: scaled
04

One prescription, every athlete

The coach writes Thruster 95/65 lb once. The compiler resolves it for each athlete: category, level, units, language.

Category
Level
Units
Language

Output of wodc show fran.wod

FRAN
21-15-9 for time · cap 10:00
  Thruster ............................. 43 kg
  Pull-up
Score: time (capped: reps)
Estimate: 3:22–6:14
[men · rx · kg]
05

A session, minute by minute

The real session of 29 September: warm-up, AMRAP, team chipper, core work. wodc timer turns it into the timer's run sheet.

00:00
06

Try it — the real compiler, in your browser

No server: WODCraft's Python package runs right here thanks to Pyodide. Edit the WOD, break it, compile.

mon.wod
terminal
Press “Compile”: the compiler (≈ 10 MB with Python) loads the first time.
07

Wherever a WOD lives

One specification, one schema, one conformance suite — and two implementations that check each other.

Terminal

Check, display, format like gofmt, export to your calendar.

$ wodc check mardi.wod
$ wodc show girls/fran --me
$ wodc fmt --write mardi.wod
$ wodc export ics semaine.wod

Editor

Language server and VS Code extension: live diagnostics, movement completion, hover, quick fixes.

python -m wodcraft.lsp

AI agents

An MCP server exposes the compiler itself. The agent drafts a WOD, the compiler answers, the agent fixes it.

check_wod · compile_wod · show_wod
format_wod · timeline_wod
search_movements · library_get

iOS · macOS

WODCraftKit: the language ported to Swift, offline, validated by the same conformance suite.

import WODCraftKit

HTTP service

For clients that cannot embed the compiler. Docker image ready for Cloud Run.

POST /compile  /check  /format  /show
GET  /catalog  /library

The standard

Specification (CC BY-SA), versioned JSON Schema and conformance cases: WODCraft is meant to be reimplemented.

spec/SPEC.md
spec/workout.schema.json
spec/conformance/
0
movements in the catalog, in English and French
0
benchmark WODs: Girls, Heroes, Open
0
conformance cases
0
implementations, Python and Swift
0
runtime dependencies

3, 2, 1… go.

$ pip install git+https://github.com/Nicolas78240/WODCraft
$ wodc show girls/fran --lang fr

A collaboration: Nicolas Caussin set the course and had the idea, orchestrated, corrected and approved, and we iterated until this version. Most of the writing — specification, compiler, Swift port, tests, documentation and this site — was done by Claude (Anthropic) with Claude Code.