Calculate your VDOT from race results, get Daniels training paces, and predict race times — based on Jack Daniels' Running Formula.
Try the online calculator — no install needed.
VDOT is a measure of your current running fitness, developed by coach Jack Daniels. Enter a recent race result, and it gives you:
- Training paces for 5 zones: Easy, Marathon, Threshold, Interval, Repetition
- Race predictions for distances from 1500m to marathon
npm install vdot-calculatorimport { calculateVDOT } from "vdot-calculator";
// 5K in 20:54
const vdot = calculateVDOT(5, 1254);
// => 40
// Half marathon in 1:43:00
const vdot2 = calculateVDOT(21.0975, 6180);
// => 37
// Marathon in 3:30:00
const vdot3 = calculateVDOT(42.195, 12600);
// => 39import { getTrainingPaces, formatPace } from "vdot-calculator";
const paces = getTrainingPaces(45);
// paces.E => 368 (Easy: 6:08/km)
// paces.M => 333 (Marathon: 5:33/km)
// paces.T => 312 (Threshold: 5:12/km)
// paces.I => 283 (Interval: 4:43/km)
// paces.R => 257 (Repetition: 4:17/km)
console.log(`Easy pace: ${formatPace(paces.E)}/km`);
// => "Easy pace: 6:08/km"import { getRacePredictions, formatTime } from "vdot-calculator";
const predictions = getRacePredictions(50);
// predictions["5K"] => 1043 (17:23)
// predictions["10K"] => 2163 (36:03)
// predictions.HM => 4758 (1:19:18)
// predictions.M => 10380 (2:53:00)
console.log(`Marathon: ${formatTime(predictions.M)}`);
// => "Marathon: 2:53:00"import { lookupVDOT } from "vdot-calculator";
const result = lookupVDOT(10, 50 * 60); // 10K in 50:00
// result.vdot => 37
// result.trainingPaces.E => 420 (7:00/km)
// result.racePredictions.HM => 6180 (1:43:00)| Function | Description |
|---|---|
calculateVDOT(distanceKm, timeSeconds) |
Calculate VDOT from a race result. Returns 30–85 or null. |
getTrainingPaces(vdot) |
Get training paces (sec/km) for 5 zones. |
getRacePredictions(vdot) |
Get predicted race times (seconds) for 8 distances. |
lookupVDOT(distanceKm, timeSeconds) |
All-in-one: VDOT + paces + predictions. |
| Function | Description |
|---|---|
formatPace(secondsPerKm) |
Format pace: 312 → "5:12" |
formatTime(totalSeconds) |
Format time: 6180 → "1:43:00" |
parsePace(paceString) |
Parse pace: "5:12" → 312 |
parseTime(timeString) |
Parse time: "1:43:00" → 6180 |
interface TrainingPaces {
E: number; // Easy (sec/km)
M: number; // Marathon (sec/km)
T: number; // Threshold (sec/km)
I: number; // Interval (sec/km)
R: number; // Repetition (sec/km)
}
interface RaceTimes {
"1500": number; "3000": number; mile: number;
"5K": number; "10K": number; "15K": number;
HM: number; M: number;
}Supported VDOT values: 30 to 85 (covers most recreational to elite runners).
| VDOT | ~5K time | ~Marathon time | Level |
|---|---|---|---|
| 30 | 26:09 | 4:14:00 | Beginner |
| 40 | 20:54 | 3:26:00 | Recreational |
| 50 | 17:23 | 2:53:00 | Competitive |
| 60 | 14:58 | 2:28:00 | Advanced |
| 70 | 13:13 | 2:10:00 | Elite |
| 80 | 11:54 | 1:58:00 | World class |
- VDOT Calculator — interactive online calculator
- Running Pace Calculator — convert between pace, speed, and race times
- HR Zone Calculator — calculate heart rate training zones
- How to connect your watch to an AI running coach — use VDOT data with ChatGPT
This calculator is extracted from STAS.run — an open data pipeline that connects your running watch to ChatGPT. STAS automatically calculates your VDOT from race results, builds a pace journal using Daniels zones, and feeds everything to a Custom GPT that acts as your personal running coach.
Tables are from Daniels' Running Formula, 3rd edition by Jack Daniels. The VDOT concept and training pace system are his work — this library is an implementation of the published tables for programmatic use.
MIT