Sport / Fitness Data DSLs Family Index
type: language-family-index family: sport-fitness languages_catalogued: 31 tags: [language-reference, family-index, sport-fitness, tcx, fit, gpx, statsbomb, opta, healthkit, health-connect]
Sport / Athletics / Fitness Data — Family Index
Family overview
Sport and fitness data interchange is a fragmented landscape that splits along two axes: personal activity / workout files (what one human did on one device for one session) versus sports event / play-by-play feeds (what happened in a professional match). The personal-activity side is dominated by Garmin’s twin formats — TCX (Training Center XML, 2007) and FIT (Flexible and Interoperable data Transfer, binary, currently SDK 21.202.0 released 2026-04-28). TCX is portable, human-readable XML; FIT is a compact binary protocol with a typed message schema (the “FIT Profile”) and is the de facto modern standard for cycling and running hardware. The 20-year stalemate between the two is the family’s defining identity story: TCX persists because every web tool can parse it; FIT persists because it carries 10× more data per kilobyte and is what watches and head-units actually write.
Underneath both sits GPX (geospatial’s GPS Exchange Format, 2002, Topografix), which is the lingua franca for “where did I go” track data. GPX has been extended ad-hoc by Strava, Garmin, and others with vendor namespaces for heart rate, cadence, and power — none of which is standardised, all of which is interoperable enough in practice. Indoor trainer prescription is its own niche: ERG and MRC (CompuTrainer-era, ~2000), PWX (TrainingPeaks Workout Exchange), and ZWO (Zwift Workout, XML) all express “do 5 minutes at 75% FTP, then 30 seconds at 110% FTP” but with different unit conventions (watts vs %FTP) and different XML grammars.
The wearable-platform layer is where the modern action is. Apple HealthKit (HKWorkout, HKWorkoutSession, HKWorkoutRoute, HKQuantitySample) is the schema vocabulary every iOS fitness app speaks; iOS 19 (WWDC 2025) added HKExportSession for bulk XML/JSON export up to 10 GB and made workout-session APIs uniform across iPhone, iPad, and Watch. Google Health Connect (Jetpack 1.1.0 stable, on-device, Android 14+ built-in) is Android’s successor to Google Fit — the Fit REST API is scheduled for full end-of-service by end of 2026, and the Fitbit app is being rebranded as “Google Health” on 2026-05-19. Health Connect added FHIR-formatted medical records in Android 16. WHOOP, Oura, Stryd, and the various wearable cloud APIs each ship their own JSON schemas; aggregator services (Spike API, Validic, Terra, Open Wearables) wrap them in a unified schema as a commercial value-add.
The sports-event-data ecosystem is a separate world driven by media rights, fantasy sports, and the global sports-betting industry. Opta (Stats Perform’s flagship brand, celebrating 30 years in 2026) ships the F-series feeds (F7 squads, F9 match summary, F24 the granular event feed — every pass, tackle, shot, card). Sportradar and Genius Sports compete in the same multi-sport feed space. StatsBomb open-data JSON (Hudl StatsBomb since the 2024 acquisition) is the family’s most influential open-data release: free event-level football JSON with xG, freeze frames, and 360-tracking — over 3,400 events per match across the FA WSL, 2023 Women’s World Cup, selected La Liga and Champions League seasons, last refreshed 2026-02-22. League-specific tracking systems (MLB Statcast, NFL Next Gen Stats on AWS/Zebra, NBA play-by-play, F1 timing) each define proprietary schemas that consortia of media partners, fantasy operators, and bettors all consume in real time.
In our deep library
None catalogued. Sport/fitness data DSLs do not have standalone deep-library notes; they are file/feed formats consumed and produced by general-purpose languages.
Cross-reference:
- geospatial — sibling family; GPX is dual-classified here (fitness-track format) and there (universal GPS exchange). GeoJSON, KML, and the broader location-data stack live there.
- healthcare-clinical — Apple HealthKit and Google Health Connect straddle this boundary: workout/activity types are sport-fitness, but the same APIs expose blood oxygen, HRV, cycle tracking, and (Android 16+) FHIR-formatted immunization records. Health Connect’s FHIR-medical-data path is the explicit bridge to that note’s clinical-data world.
- api-description — every wearable cloud (WHOOP, Oura, Strava, Garmin Connect, Zwift) ships an OpenAPI-described REST API; aggregator unified schemas (Spike, Open Wearables, Terra) are essentially federated OpenAPI normalizations.
- scientific — soccer-analytics on StatsBomb open data, baseball-analytics on Statcast, and running-power analytics on Stryd all flow into pandas/R/Polars notebooks; the consuming side is general-purpose data-science tooling.
- network-protocol-dsls — ANT+, ANT-FS, and Bluetooth GATT Heart Rate / Cycling Power profiles are wireless transport DSLs adjacent to the file formats they ultimately serialise into.
Tier 3 family table — Workout / activity files
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| FIT (Flexible and Interoperable data Transfer) | 2010 (Garmin/ANT+); SDK 21.202.0 released 2026-04-28 | Garmin / Dynastream / ANT+ Alliance | Binary, typed message protocol; FIT Profile schema generates SDKs in C, C#, Java, Python, JavaScript, Rust, Objective-C | Very active, the de facto modern workout standard; SDK 21.200.0 (2026-04-09) added Python encoder; profile updates ongoing | https://developer.garmin.com/fit/ |
| TCX (Training Center XML) | 2007 | Garmin (TrainingCenterDatabasev2.xsd) | XML, schema-defined; carries activities, laps, tracks, heart rate, cadence | Active legacy, still widely supported by every training platform for portability but rarely the native write format | https://www8.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd |
| GPX (GPS Exchange Format) | 2002 | Topografix (open spec) | XML; tracks, routes, waypoints; vendor namespace extensions for HR/cadence/power | Very active, universal interchange — also catalogued in geospatial | https://www.topografix.com/gpx.asp |
| Strava GPX extensions | ~2012 | Strava (vendor namespace) | XML extension elements on GPX (<gpxtpx:hr>, <gpxtpx:cad>) — never standardised | Active de facto; emitted by Strava export and parsed by most third-party tools | https://developers.strava.com/docs/reference/ |
| PWX (Peaksware Workout Exchange) | ~2004 | Peaksware / TrainingPeaks | XML; both completed-workout records and structured workout prescriptions | Active, primary TrainingPeaks interchange; less common outside Peaksware ecosystem | https://help.trainingpeaks.com/hc/en-us/articles/115001844087-Structured-Workout-Export-FAQs |
| Polar HRM / .hrm | 1990s | Polar Electro | Plain-text section-based; heart-rate sample stream + lap data | Legacy, modern Polar devices write FIT and use Polar Flow API/JSON | https://www.polar.com/en/support |
| Suunto SML / vendor binary | 2000s | Suunto | Proprietary; Suunto App and Suunto Cloud now expose FIT and JSON | Legacy native; cloud surface is JSON | https://www.suunto.com/Support/Apps-and-services/ |
| Wahoo proprietary + FIT | 2013+ | Wahoo Fitness | Writes FIT natively; Wahoo Cloud API in JSON | Active, FIT-first | https://api.wahooligan.com/ |
| GoldenCheetah database / .json | 2005 | GoldenCheetah open-source project | SQLite + per-activity JSON; imports ~30 input formats (FIT, TCX, GPX, PWX, SRM, etC.) | Active, the reference open-source desktop analytics tool | https://www.goldencheetah.org/ |
Tier 3 family table — Wearable / health platform
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
Apple HealthKit (HKWorkout, HKQuantitySample, HKWorkoutRoute) | 2014 (iOS 8); HKExportSession added iOS 19 (2025) | Apple | Objective-C/Swift type hierarchy; on-device store; export via XML/JSON | Very active; iOS 19 unified workout-session APIs across iPhone/iPad/Watch, added 10 GB bulk export | https://developer.apple.com/documentation/healthkit/hkworkout |
| Google Health Connect | 2022 GA; Jetpack 1.1.0 stable; built into Android 14+; FHIR medical records added Android 16 | Kotlin/Java SDK over on-device store; data-type catalog mirroring Google Fit | Very active, Google’s strategic successor to Google Fit | https://developer.android.com/health-and-fitness/health-connect | |
| Google Fit REST API | 2014 | REST/JSON cloud API | Retiring: new signups closed 2024-05-01; full end of service scheduled end-of-2026; migrate to Health Connect or Google Health API | https://developer.android.com/health-and-fitness/health-connect/migration/fit | |
| WHOOP API | 2021 | WHOOP | REST/JSON; recovery score, strain, sleep stages, HRV, RHR, respiratory rate, workout | Active, OAuth2; available via Spike, Open Wearables aggregators | https://developer.whoop.com/api/ |
| Oura cloud API | 2018 | Oura Health | REST/JSON; sleep, readiness, activity, daily summaries | Active | https://cloud.ouraring.com/docs/ |
| Strava API | 2013 | Strava | REST/JSON over OAuth2; activities, segments, athlete | Active, the primary social-fitness data integration | https://developers.strava.com/docs/reference/ |
| Garmin Connect IQ + Health/Activity APIs | 2015 (Connect IQ); Health API 2019 | Garmin | Monkey C device-side; cloud REST/JSON via partner programme | Active | https://developer.garmin.com/connect-iq/overview/ |
| Stryd Power Center API | ~2018 | Stryd | REST/JSON; running power, leg-spring stiffness, form-power | Active, the dominant running-power vocabulary | https://stryd.com/powercenter |
| Fitbit Web API / Google Health (Fitbit-rebrand 2026-05-19) | 2010 (Fitbit) | Fitbit → Google | REST/JSON; activity, sleep, heart, body | Transitioning: Fitbit app being rebranded as Google Health 2026-05-19; cross-platform ingest (Apple Watch, Garmin, WHOOP, Oura) rolling out later 2026 | https://dev.fitbit.com/build/reference/web-api/ |
Tier 3 family table — Sports event / play-by-play data
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| Opta F-series feeds (F7, F9, F24, F40, etc.) | 1996 (Opta founded); F-series productised 2000s | Opta → Perform → Stats Perform | XML over HTTP push/pull; F24 = full event-by-event match feed | Very active, the dominant football event-data feed; Opta marks 30 years in 2026 | https://www.statsperform.com/opta-feeds/ |
| StatsBomb Open Data JSON | 2018 | StatsBomb (acquired by Hudl 2024) | JSON; competitions, matches, events, lineups; xG, freeze frames, 360 tracking; >3,400 events per match | Very active, last refresh 2026-02-22; FA WSL, 2023 Women’s World Cup, selected La Liga / Champions League; the open-data baseline for soccer analytics | https://github.com/statsbomb/open-data |
| Sportradar feeds | 2000s | Sportradar AG | Multi-sport real-time feeds (XML and JSON variants); core supplier to sports books | Very active | https://developer.sportradar.com/ |
| Genius Sports feeds | 2000s | Genius Sports | Multi-sport feeds, official data partner for NFL, NCAA, Premier League | Very active | https://developer.geniussports.com/ |
| NFL Next Gen Stats schema | 2014 (Zebra partnership); ongoing | NFL + Zebra Technologies + AWS | Player/ball tracking JSON; ~10 Hz position, speed, acceleration; AWS-hosted | Active proprietary; partial release via NGS public website, full data NFL-internal | https://nextgenstats.nfl.com/ |
| MLB Statcast schema | 2015 (Hawk-Eye since 2020) | MLB Advanced Media | Pitch/event-level tracking; per-pitch, per-game, per-player CSV/JSON via Baseball Savant | Very active; Baseball Savant is the de facto open query surface | https://baseballsavant.mlb.com/statcast_search |
| NBA Stats / play-by-play JSON | 2010s | NBA / Stats LLC | JSON via stats.nba.com endpoints; play-by-play, shot charts, box scores | Active, semi-public (rate-limited) | https://stats.nba.com/ |
| ESPN game-feed JSON | 2010s | ESPN | Internal JSON consumed by ESPN apps; reverse-engineered widely | Active, undocumented | https://site.api.espn.com/ |
| Formula 1 Live Timing / F1 timing data | 1990s onwards; SignalR stream current | Formula One Management | Real-time SignalR-WebSocket protocol; car position, timing, race control messages | Active, the reference real-time motorsport feed (semi-public) | https://www.formula1.com/en/timing/f1-live |
Tier 3 family table — Indoor trainer / training prescription
| Format | First appeared | Origin | Type | Status (2026) | URL |
|---|---|---|---|---|---|
| ZWO (Zwift Workout) | 2015 | Zwift | XML; intervals as <SteadyState>, <IntervalsT>, <Ramp>, etc.; power as decimal fraction of FTP | Very active, the dominant virtual-cycling workout grammar | https://github.com/h4l/zwift-workout-file-reference |
| ERG (CompuTrainer/PerfPRO) | ~1995 | RacerMate CompuTrainer | Plain-text; absolute watts targets per interval | Active legacy, still emitted/consumed by TrainerRoad, TrainingPeaks, Zwift, PerfPRO | https://perfprostudio.com/FileInfo.aspx?ID=PS |
| MRC (Monark / CompuTrainer) | ~1995 | RacerMate | Plain-text; percent-FTP targets per interval (vs ERG’s absolute watts) | Active legacy, paired with ERG in every trainer ecosystem | https://perfprostudio.com/FileInfo.aspx?ID=PS |
| ANT+ / ANT-FS device profiles | 2003 (ANT); ANT+ ~2006 | Dynastream / Garmin / ANT+ Alliance | Wireless transport DSL; per-device-class profiles (HR, power, cadence, FE-C trainer control) | Active, still the wireless transport that becomes FIT on disk | https://www.thisisant.com/developer/ant-plus/device-profiles |
| Bluetooth GATT Heart Rate / Cycling Power profiles | 2011 (BT 4.0 / BLE) | Bluetooth SIG | GATT service+characteristic schemas; UUID-keyed binary records | Active, the dominant BLE-side counterpart to ANT+ | https://www.bluetooth.com/specifications/specs/ |
Notable threads
-
TCX vs FIT — the 20-year coexistence. TCX (2007, XML, schema-validated) was Garmin’s first attempt to make workout data portable; FIT (2010, binary, schema-generated) was its successor designed for device-side efficiency. Neither has retired the other. TCX persists because anything that can read XML can read TCX; FIT persists because watches and head-units are size- and battery-constrained, and FIT carries far more data per byte. SDK 21.202.0 (2026-04-28) is the current FIT release; TCX’s
TrainingCenterDatabasev2.xsdhas been unchanged since the late 2000s. The practical reality of 2026: devices write FIT, web tools accept both, exports default to TCX or GPX for portability, and the FIT Profile (the typed message schema generated into SDKs in seven languages) is the format spec everyone but Garmin’s own users actually reads. -
StatsBomb open data reshaped soccer analytics. Before 2018, soccer event data was paywalled behind Opta, Wyscout, and Stats LLC at enterprise-only prices. StatsBomb’s open-data release — full event JSON for selected WSL, World Cup, and Champions League seasons, including the unique freeze-frame and 360-tracking fields — gave researchers, bloggers, and small clubs a real dataset for the first time. The downstream effect is enormous: the
socceractionPython package, themplsoccervisualisation library, thestatsbombpyandstatsbombRSDKs, and dozens of Kaggle competitions all emerged around the schema. Since Hudl’s 2024 acquisition the data is officially “Hudl StatsBomb” but the open-data repo (last refreshed 2026-02-22) continues to grow. -
Apple Health Connect convergence and the Google Fit sunset. Two parallel platform stories are converging in 2026. Apple consolidated
HKWorkoutSessionacross iPhone, iPad, and Watch in iOS 19 (WWDC 2025) and addedHKExportSessionto make bulk export tractable. Google is finalising the Google Fit REST API end-of-service by end-of-2026 and moving everything to Health Connect (Jetpack 1.1.0 stable, Android 14+ built-in, Android 16 added FHIR-formatted medical data). The Fitbit app rebrands as “Google Health” on 2026-05-19, with promised cross-platform ingest (Apple Watch, Garmin, WHOOP, Oura) rolling out later in 2026. The net effect: by end of 2026 there will be exactly two dominant on-device wearable schema vocabularies — HealthKit on iOS and Health Connect on Android — and the cloud aggregator layer (Spike, Open Wearables, Terra, Validic) survives only by normalising over the long tail of vendor-cloud APIs. -
Sports-betting drives sports-data velocity. The Opta / Sportradar / Genius Sports feed ecosystem is funded primarily not by media or fantasy but by regulated sports betting. Latency requirements are sub-second (a goal must reach the trading desk before bets are placed on the next event), accuracy requirements are absolute (data is collateral for billions of dollars of liquidity), and the formats are correspondingly real-time-streaming-first: Opta’s F-feeds run as XML over HTTP push/pull and via push-stream variants, Sportradar uses both REST and SignalR-style streams. The 2018 US Supreme Court ruling (Murphy v. NCAA) opened US sports betting and made the data layer suddenly geographically global — partly explaining the consolidation around Stats Perform (Opta), Sportradar, and Genius Sports as the three commercial heavyweights.
-
Indoor trainers and the ERG/MRC/ZWO grammar problem. Indoor cycling has three coexisting workout-prescription formats — ERG (watts), MRC (%FTP), and ZWO (XML with %FTP-as-decimal) — because each platform has its own preferred unit convention but they’re all expressing the same primitive: a sequence of intervals with power targets, durations, and (sometimes) cadence/heart-rate targets. Converters between the three are a cottage industry. The 2020-era convergence is toward ZWO because Zwift dominates virtual-cycling mindshare, but TrainerRoad, Rouvy, and IndieVelo still consume ERG/MRC. ANT+ FE-C (Fitness Equipment Control, ~2014) and Bluetooth FTMS (Fitness Machine Service, BT SIG 2017) are the wireless protocols that the workout files ultimately drive — translating a
<SteadyState Duration="300" Power="0.75"/>into a 75%-FTP resistance command to the trainer. -
Strava as the de facto social-fitness data hub. Strava sits where it does — central, almost-essential, and chronically grumbled-about — because it solved the cross-vendor problem first: GPX/TCX/FIT in from Garmin, Wahoo, Polar, Suunto, COROS, Apple Watch, and Zwift, and a single social feed + segment-leaderboard layer on top. Strava’s GPX extension namespace (heart rate, cadence, power in vendor-prefixed XML elements) became a de facto cross-vendor convention even though it was never standardised. The 2024 API restrictions (anonymising activity data for third-party apps) reshuffled the integration landscape, pushing aggregators toward direct vendor-cloud connections via Garmin Connect Developer Program, WHOOP API, Oura cloud, and Health Connect/HealthKit instead of going through Strava.
Citations
- Garmin FIT SDK (current 21.202.0, 2026-04-28): https://developer.garmin.com/fit/
- Garmin FIT protocol: https://developer.garmin.com/fit/protocol/
- Garmin FIT Python SDK: https://github.com/garmin/fit-python-sdk
- Garmin TCX schema: https://www8.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd
- Topografix GPX: https://www.topografix.com/gpx.asp
- Strava API: https://developers.strava.com/docs/reference/
- Apple HealthKit
HKWorkout: https://developer.apple.com/documentation/healthkit/hkworkout - Apple HealthKit
HKWorkoutSession: https://developer.apple.com/documentation/healthkit/hkworkoutsession - Apple WWDC 2025 on workout APIs: https://developer.apple.com/videos/play/wwdc2025/322/
- Google Health Connect: https://developer.android.com/health-and-fitness/health-connect
- Google Fit migration guide: https://developer.android.com/health-and-fitness/health-connect/migration/fit
- WHOOP Developer API: https://developer.whoop.com/api/
- Oura Cloud API: https://cloud.ouraring.com/docs/
- StatsBomb Open Data: https://github.com/statsbomb/open-data
- Hudl StatsBomb: https://www.hudl.com/products/statsbomb
- Stats Perform Opta feeds: https://www.statsperform.com/opta-feeds/
- Sportradar Developer Portal: https://developer.sportradar.com/
- NFL Next Gen Stats: https://nextgenstats.nfl.com/
- MLB Statcast / Baseball Savant: https://baseballsavant.mlb.com/statcast_search
- TrainingPeaks PWX / structured-workout export: https://help.trainingpeaks.com/hc/en-us/articles/115001844087-Structured-Workout-Export-FAQs
- Zwift workout (.zwo) reference: https://github.com/h4l/zwift-workout-file-reference
- GoldenCheetah: https://www.goldencheetah.org/
- ANT+ device profiles: https://www.thisisant.com/developer/ant-plus/device-profiles
- Bluetooth SIG specifications: https://www.bluetooth.com/specifications/specs/