Skip to content

hivrich/vdot-calculator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VDOT Calculator

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.

What is VDOT?

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

Install

npm install vdot-calculator

Usage

Calculate VDOT from a race result

import { 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);
// => 39

Get training paces

import { 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"

Get race predictions

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"

Full lookup (VDOT + paces + predictions in one call)

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)

API Reference

Core functions

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.

Utility helpers

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

Types

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;
}

VDOT range

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

Related tools

About

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.

Data source

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.

License

MIT

About

VDOT Calculator based on Jack Daniels' Running Formula — training paces and race predictions

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors