Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 35 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,30 +20,30 @@

## What is OpenProgression?

OpenProgression (OP) is a **free, open standard** for classifying athletic ability across functional fitness. It provides a common language for coaches, athletes, and software to describe fitness levels from first-day beginner to elite competitor.
OpenProgression (OP) is a **free, open standard** for classifying athletic ability across functional fitness. It provides a common language for coaches, athletes, and software to describe fitness levels -- from first-day beginner to elite competitor.

<table>
<tr>
<td>

**Open** Free to use, implement, and contribute to
**Open** -- Free to use, implement, and contribute to

</td>
<td>

**Research-backed** Every benchmark traces to peer-reviewed studies or public-domain data
**Research-backed** -- Every benchmark traces to peer-reviewed studies or public-domain data

</td>
</tr>
<tr>
<td>

**Gym-agnostic** Works for any functional fitness facility, not tied to any brand
**Gym-agnostic** -- Works for any functional fitness facility, not tied to any brand

</td>
<td>

**Community-driven** Standards improve through open contribution
**Community-driven** -- Standards improve through open contribution

</td>
</tr>
Expand All @@ -67,6 +67,18 @@ OpenProgression (OP) is a **free, open standard** for classifying athletic abili

> Levels are determined by the **weakest-link principle**: your overall level equals your lowest category level. This encourages well-rounded fitness rather than specialization.

### Foundation Milestones

For athletes below the Beginner benchmarks, **Foundation Milestones** provide early progress markers:

| Milestone | Name | Description |
|:---------:|------|-------------|
| F1 | **Foundation** | Chair sit-to-stand, wall push-up, farmer's carry, walking -- no gym needed |
| F2 | **Moving** | Air squats, incline push-ups, band rows, plank holds |
| F3 | **Ready** | Full push-up, dead hang or farmer's carry, running a mile |

Foundation Milestones are not levels -- they are optional pre-level markers for applications that serve untrained or deconditioned populations. F1 requires only a chair and household items. Full spec: [`spec/progressions.md`](spec/progressions.md)

## [The 8 Categories](https://openprogression.org/categories)

| Category | Key Movements |
Expand Down Expand Up @@ -97,9 +109,9 @@ An 80kg male who can:
| Push-ups | 40 reps | Intermediate+ |
| Fran | 4:30 | Intermediate+ |

**Overall level: Intermediate+** all categories at INT+ or above.
**Overall level: Intermediate+** -- all categories at INT+ or above.

But if their pull-ups were only 4 (Intermediate), their overall level drops to **Intermediate** the weakest link determines the chain.
But if their pull-ups were only 4 (Intermediate), their overall level drops to **Intermediate** -- the weakest link determines the chain.

## Repository Structure

Expand All @@ -108,11 +120,14 @@ openprogression/
├── spec/ # The standard (human-readable)
│ ├── levels.md
│ ├── categories.md
│ └── methodology.md
│ ├── methodology.md
│ └── progressions.md
├── data/ # Machine-readable benchmark data
│ ├── levels.json
│ ├── categories.json
│ ├── sources.json
│ ├── progressions.json
│ ├── milestones.json
│ └── benchmarks/
│ ├── squatting.json
│ ├── pulling.json
Expand Down Expand Up @@ -187,24 +202,25 @@ Build OP into your gym management software, workout tracking app, or coaching pl
- Clear schema with TypeScript-friendly structure
- Gender-differentiated standards across [25 benchmarks](https://openprogression.org/benchmarks)
- Source citations for every benchmark
- [MIT licensed](https://openprogression.org/license) use it however you want
- [MIT licensed](https://openprogression.org/license) -- use it however you want

## Contributing

We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide.

- **Review benchmarks** Are the numbers accurate for your experience?
- **Add movements** Help expand the movement library
- **Improve methodology** Suggest better research sources
- **Build integrations** Create packages for your language/framework
- **Review benchmarks** -- Are the numbers accurate for your experience?
- **Add movements** -- Help expand the movement library
- **Improve methodology** -- Suggest better research sources
- **Build integrations** -- Create packages for your language/framework

## Roadmap

- [x] **[Level Calculator](https://openprogression.org/calculator)** — Instant level assessment across all 8 categories
- [x] **[Scaled Programming](https://openprogression.org/programming)** — WOD library and daily sessions with 7-level scaling
- [ ] **Age-adjusted benchmarks** — Current standards target ~18-40 year-olds. Future versions may include age brackets.
- [ ] **Expanded bodyweight scaling** — Enhanced BW-relative benchmarks beyond the current reference weights.
- [ ] **Additional movements** — Expanding the movement library within existing categories.
- [x] **[Level Calculator](https://openprogression.org/calculator)** -- Instant level assessment across all 8 categories
- [x] **[Scaled Programming](https://openprogression.org/programming)** -- WOD library and daily sessions with 7-level scaling
- [x] **[Movement Progressions & Foundation Milestones](spec/progressions.md)** -- Regression chains and pre-Beginner progress markers for untrained populations
- [ ] **Age-adjusted benchmarks** -- Current standards target ~18-40 year-olds. Future versions may include age brackets.
- [ ] **Expanded bodyweight scaling** -- Enhanced BW-relative benchmarks beyond the current reference weights.
- [ ] **Additional movements** -- Expanding the movement library within existing categories.

## License

Expand All @@ -214,7 +230,7 @@ MIT License. See [LICENSE](LICENSE).

"OpenProgression", the OpenProgression logo, and the 7-level progression gradient mark are trademarks of the OpenProgression project. The trademarks are **not** licensed under the MIT license.

- **The standard, data, and code are fully open** use them freely in any project, commercial or not
- **The standard, data, and code are fully open** -- use them freely in any project, commercial or not
- **The name and logo require permission** for use on merchandise, commercial products, or anything that implies official endorsement

This is the same approach used by most major open source projects: the *work* is open, the *brand* is protected.
Expand Down
154 changes: 154 additions & 0 deletions data/milestones.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
{
"version": "1.1.0",
"description": "Foundation Milestones are trackable micro-achievements within the Beginner level. They provide progress feedback for athletes who are below the OP Beginner benchmarks. Milestones are NOT levels -- they are pre-level markers that apps can use to show early progress. Estimated timelines assume a healthy but sedentary adult training 3x/week. For deconditioned, frail, or post-injury individuals, timelines may be 2-3x longer (ICFSR consensus: 3-5 months for meaningful functional improvement).",
"milestones": [
{
"id": "F1",
"name": "Foundation",
"shortName": "F1",
"color": "#86EFAC",
"description": "Can perform basic human movements safely. Ready to start a bodyweight exercise program.",
"estimatedWeeks": "1-2",
"requirements": [
{
"movement": "chair_sit_to_stand",
"name": "Chair Sit-to-Stand",
"category": "squatting",
"criteria": { "type": "reps", "target": 10 },
"description": "Stand up from a standard-height chair 10 times without using hands"
},
{
"movement": "wall_push_up",
"name": "Wall Push-up",
"category": "pressing",
"criteria": { "type": "reps", "target": 10 },
"description": "10 push-ups against a wall with full range of motion"
},
{
"movement": "glute_bridge",
"name": "Glute Bridge",
"category": "pulling",
"criteria": { "type": "reps", "target": 10 },
"description": "10 glute bridges with full hip extension"
},
{
"movement": "farmers_carry_30s",
"name": "Farmer's Carry",
"category": "gymnastics",
"criteria": { "type": "time", "target": 30, "unit": "seconds" },
"description": "Carry two heavy bags or water bottles (approx. 5kg each) while walking for 30 seconds"
},
{
"movement": "walk_1km",
"name": "Walk 1km",
"category": "monostructural",
"criteria": { "type": "completion" },
"description": "Walk 1 kilometer without stopping"
}
],
"sources": ["rikli_jones_2013", "jones_rikli_1999", "nsca_essentials_2016", "bohannon_2019", "who_physical_activity_2020", "chodzko_zajko_2009"]
},
{
"id": "F2",
"name": "Moving",
"shortName": "F2",
"color": "#4ADE80",
"description": "Can perform bodyweight exercises with good form. Building functional capacity for daily activities and exercise.",
"estimatedWeeks": "2-4",
"requirements": [
{
"movement": "air_squat_partial",
"name": "Air Squat (Partial Depth)",
"category": "squatting",
"criteria": { "type": "reps", "target": 20 },
"description": "20 bodyweight squats to approximately parallel"
},
{
"movement": "incline_push_up",
"name": "Incline Push-up",
"category": "pressing",
"criteria": { "type": "reps", "target": 10 },
"description": "10 push-ups with hands on a bench-height surface"
},
{
"movement": "hip_hinge_pvc",
"name": "Hip Hinge (Broomstick)",
"category": "pulling",
"criteria": { "type": "reps", "target": 10 },
"description": "10 hip hinges with broomstick along spine maintaining 3 points of contact"
},
{
"movement": "plank_30s",
"name": "Plank Hold",
"category": "bodyweight",
"criteria": { "type": "time", "target": 30, "unit": "seconds" },
"description": "Hold a forearm plank for 30 seconds with neutral spine"
},
{
"movement": "walk_run_intervals",
"name": "Walk/Run 800m",
"category": "monostructural",
"criteria": { "type": "completion", "details": "800m of walk/run combination" },
"description": "Complete 800 meters of walking and running in any combination"
}
],
"sources": ["nsca_essentials_2016", "mcgill_2015", "strand_2014", "acsm_guidelines", "fragala_2019"]
},
{
"id": "F3",
"name": "Ready",
"shortName": "F3",
"color": "#22C55E",
"description": "Movement quality and base fitness sufficient for structured training with equipment. Ready for gym onboarding and barbell introduction.",
"estimatedWeeks": "4-8",
"requirements": [
{
"movement": "air_squat",
"name": "Air Squat (Full Depth)",
"category": "squatting",
"criteria": { "type": "reps", "target": 20 },
"description": "20 bodyweight squats below parallel with good form"
},
{
"movement": "push_up_single",
"name": "Full Push-up",
"category": "pressing",
"criteria": { "type": "reps", "target": 1 },
"description": "1 full push-up with chest to floor and full lockout"
},
{
"movement": "rdl_bodyweight",
"name": "Romanian Deadlift (Bodyweight)",
"category": "pulling",
"criteria": { "type": "reps", "target": 10 },
"description": "10 bodyweight Romanian deadlifts with neutral spine"
},
{
"movement": "dead_hang_or_carry",
"name": "Dead Hang OR Farmer's Carry",
"category": "gymnastics",
"criteria": { "type": "either", "options": [
{ "movement": "dead_hang_30s", "type": "time", "target": 30, "unit": "seconds" },
{ "movement": "farmers_carry_60s", "type": "time", "target": 60, "unit": "seconds" }
]},
"description": "Hang from a bar for 30 seconds, OR carry two heavy bags (approx. 8kg each) for 60 seconds"
},
{
"movement": "run_mile_any_pace",
"name": "Run 1 Mile",
"category": "monostructural",
"criteria": { "type": "completion" },
"description": "Run 1 mile (1609m) without walking breaks, at any pace"
},
{
"movement": "plank_60s",
"name": "Plank Hold (60 Seconds)",
"category": "bodyweight",
"criteria": { "type": "time", "target": 60, "unit": "seconds" },
"description": "Hold a forearm plank for 60 seconds with neutral spine"
}
],
"sources": ["nsca_essentials_2016", "mcgill_2015", "strand_2014", "acsm_guidelines", "bohannon_2019", "runninglevel", "fragala_2019"]
}
]
}
Loading