GPX analytics for runners

Parse GPX files, compute running metrics, and render Chart.js dashboards — zero config.
npm versionmonthly downloadsMIT License
install npm install @alosha/stride
import { parse, analyze, paceChartConfig } from '@alosha/stride'
import { Chart } from 'chart.js/auto'

// Parse a GPX file from Garmin / Strava
const activity = parse('./morning-run.gpx')

// Compute all metrics in one call
const stats = analyze(activity)
console.log(stats.distanceM, stats.avgPaceSecPerKm, stats.hrZones)

// Render a pace chart — Chart.js config returned, you own the canvas
new Chart(canvas, paceChartConfig(activity, stats))

Everything you need to visualise a run

One package. No wrappers around wrappers.

GPX parser
Parse any GPX file — Garmin, Strava export, or raw XML — with full support for HR, cadence, and elevation extensions.
Running metrics
Distance, moving time, avg/best pace, elevation gain/loss, HR zones, cadence, and per-km splits — all in one call.
Chart.js configs
Five ready-made chart configs (pace, elevation, HR, HR zones, splits) that work in any environment — browser or Node canvas.
Heart rate zones
Automatic Z1–Z5 zone breakdown based on configurable max HR. Seconds in each zone, ready for a doughnut chart.
Metric & imperial
All formatters and chart labels switch between km/min·km and mi/min·mi via a single units option.
CLI included
Run `stride analyze run.gpx` to get a full activity summary in your terminal. No config needed.

CLI — analyze a run in seconds

$ npx stride analyze morning-run.gpx

🏃 @alosha/stride — Morning Run

  Distance:      10.24 km
  Moving time:   51:32
  Elapsed time:  52:14
  Avg pace:      5:02/km
  Best km pace:  4:44/km
  Elevation ↑:   142m
  Elevation ↓:   138m
  Avg HR:        158 bpm
  Max HR:        178 bpm

  Splits:
    km  1  4:55/km  ↑12m  HR 152bpm
    km  2  5:03/km  ↑8m   HR 156bpm
    km  3  4:58/km  ↑5m   HR 159bpm
    ...

Add Stride to your project

Open source, MIT licensed, zero config. Drop it in and start parsing GPX files in minutes.