Skip to main content

Entities

OpenSet documents follow a strict hierarchical structure. This hierarchy is also how macro/meso/micro training cycles are represented (see Program, phases, and training cycles and ACSM-style Mapping).

PROGRAM
PHASE
WORKOUT <-- minimum valid standalone document
BLOCK
SERIES
EXERCISE
SET

Order of series within a block, exercises within a series, and sets within an exercise is given by array index (first element is first). There is no separate order field.

Metadata

Workout and Program documents may include an optional metadata object for versioning and attribution (e.g. when selling programs). All fields are optional.

FieldDescription
versionContent version (e.g. "1.0.0", "2024.02"); distinct from openset_version (spec version).
authorPerson or handle; attribution.
providerOrganization or brand publishing the content (same meaning as in libraries).
licenseLicense identifier or URL (e.g. "MIT", "proprietary", "CC-BY-4.0").
created_atISO 8601 date-time.
updated_atLast modification time (ISO 8601 date-time).

Document Types

A valid OpenSet document is one of:

  1. Workout document — A single training workout with type: "workout" (schema: WorkoutDocument)
  2. Program document — A multi-phase training plan with type: "program" containing phases and workouts (schema: ProgramDocument)
  3. Exercise Library — A collection of exercise definitions with type: "exercise_library"
  4. Workout Library — A collection of reusable workout templates with type: "workout_library"
  5. Workout Execution — Records what was done for a workout instance with type: "workout_execution" (schema: workout-execution); see Workout execution.

Levels

Program

Top-level container for a multi-workout training plan.

FieldRequiredDescription
openset_versionYesSpec version (e.g. "1.0")
typeYesMust be "program"
nameYesProgram name
descriptionNoProgram description
sportsNoTarget sports (freeform; common values include strength, running, cycling, swimming, fitness, yoga)
durationNoProgram duration object with numeric value and unit from `s
phasesYesArray of Phase objects
metadataNoDocument metadata (see Metadata)
mediaNoOptional instructional or marketing videos and photos — same shape as Exercise library (videos, photos with url and label; videos may include language)

Program, phases, and training cycles

Coaches and apps can represent classic macro/meso/micro cycles using the existing hierarchy:

  • Macrocycle — The overall plan (e.g. multi‑month or year‑long season) is modeled as a single Program document.
  • Mesocycle — Each Phase within program.phases typically represents a focused block of several weeks (e.g. hypertrophy, strength, peaking, deload).
  • Microcycle — Weekly patterns of Workouts within a phase (e.g. push/pull/legs over one week) form a microcycle; progression comes from how workouts and set targets evolve week to week.

Phases already support time-bounded blocks via week_start and week_end, so a periodized program is usually:

Program (macrocycle)
Phase 1 — e.g. "Hypertrophy 1" (weeks 1–4)
Phase 2 — e.g. "Strength 1" (weeks 5–8)
Phase 3 — e.g. "Deload" (week 9)
Phase 4 — e.g. "Strength 2" (weeks 10–12)

Within each phase, individual workouts encode microcycle structure (e.g. PPL, upper/lower, full‑body) and progression using set‑level dimensions such as reps, load, rpe, duration, and rest_after. See Extensions for optional metadata fields that can label mesocycles and microcycles more explicitly.

flowchart TD
macro["Program (macrocycle)"] --> meso1["Phase (mesocycle)"]
macro --> meso2["Phase (mesocycle)"]
meso1 --> micro1["Workouts (microcycle week)"]
meso1 --> micro2["Workouts (microcycle week)"]
micro1 --> block["Block"]
block --> series["Series"]
series --> exercise["Exercise"]
exercise --> set["Set"]

Phase

Groups workouts within a program by training focus or time period.

FieldRequiredDescription
nameYesPhase name
week_startNoStarting week number
week_endNoEnding week number
goalNoPhase objective
workoutsYesArray of Workout objects

Workout

The minimum valid standalone document. Represents a single training workout.

FieldRequiredDescription
openset_versionYesSpec version
typeYesMust be "workout"
nameNoWorkout name
dateNoISO 8601 date
sportsNoTarget sports (freeform; common values include strength, running, cycling, swimming, fitness, yoga)
levelNoDifficulty: beginner, intermediate, advanced, elite
durationNoEstimated workout duration object with numeric value and unit from `s
tagsNoOptional tags for filtering and discovery
metadataNoDocument metadata (see Metadata)
mediaNoOptional instructional or marketing videos and photos — same shape as Exercise library (videos, photos with url and label; videos may include language). Applies to standalone workouts and to each workout embedded under a program phase.
blocksYesArray of Block objects

Block

Groups related series within a workout (e.g., warm-up, main work, cooldown).

Blocks are the recommended way to model warm-ups, main work, and finishers:

  • A typical strength workout might use:
    • Block 0: "Warm-up" — ramp-up sets, mobility, activation work
    • Block 1: "Main work" — primary lifts and accessories
    • Block 2: "Finisher" or "Cool-down" — conditioning or recovery work
  • Warm-up sets are modeled as normal sets inside a "Warm-up" block; there is no special warm-up flag in the schema.
  • Consumers (apps, UIs) are free to present or aggregate warm-up vs main blocks differently (e.g., collapsed warm-up, separate volume stats) while using the same underlying structure.
FieldRequiredDescription
nameNoBlock name
seriesYesArray of Series objects

Series

A group of exercises performed with a specific execution mode.

FieldRequiredDescription
execution_modeYesHow exercises flow (see Execution Modes)
roundsNoWhen present, how many times the series is repeated (e.g. for CIRCUIT, SUPERSET, AMRAP)
rest_afterNoRest after the series
exercisesYesArray of Exercise objects

Exercise

A single exercise within a series.

FieldRequiredDescription
exercise_idOne requiredID from an exercise library
nameOne requiredFreeform exercise name
groupNoSub-group identifier (for CLUSTER mode)
setsYesArray of Set objects

Set

The atomic unit — a single prescribed effort.

FieldRequiredDescription
dimensionsYesArray of required dimension names (see Dimensions)
dimension fieldsVariesValues for each declared and optional dimension