GPX analytics for runners
Parse GPX files, compute running metrics, and render Chart.js dashboards — zero config.
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.