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

FormatFirst appearedOriginTypeStatus (2026)URL
FIT (Flexible and Interoperable data Transfer)2010 (Garmin/ANT+); SDK 21.202.0 released 2026-04-28Garmin / Dynastream / ANT+ AllianceBinary, typed message protocol; FIT Profile schema generates SDKs in C, C#, Java, Python, JavaScript, Rust, Objective-CVery active, the de facto modern workout standard; SDK 21.200.0 (2026-04-09) added Python encoder; profile updates ongoinghttps://developer.garmin.com/fit/
TCX (Training Center XML)2007Garmin (TrainingCenterDatabasev2.xsd)XML, schema-defined; carries activities, laps, tracks, heart rate, cadenceActive legacy, still widely supported by every training platform for portability but rarely the native write formathttps://www8.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd
GPX (GPS Exchange Format)2002Topografix (open spec)XML; tracks, routes, waypoints; vendor namespace extensions for HR/cadence/powerVery active, universal interchange — also catalogued in geospatialhttps://www.topografix.com/gpx.asp
Strava GPX extensions~2012Strava (vendor namespace)XML extension elements on GPX (<gpxtpx:hr>, <gpxtpx:cad>) — never standardisedActive de facto; emitted by Strava export and parsed by most third-party toolshttps://developers.strava.com/docs/reference/
PWX (Peaksware Workout Exchange)~2004Peaksware / TrainingPeaksXML; both completed-workout records and structured workout prescriptionsActive, primary TrainingPeaks interchange; less common outside Peaksware ecosystemhttps://help.trainingpeaks.com/hc/en-us/articles/115001844087-Structured-Workout-Export-FAQs
Polar HRM / .hrm1990sPolar ElectroPlain-text section-based; heart-rate sample stream + lap dataLegacy, modern Polar devices write FIT and use Polar Flow API/JSONhttps://www.polar.com/en/support
Suunto SML / vendor binary2000sSuuntoProprietary; Suunto App and Suunto Cloud now expose FIT and JSONLegacy native; cloud surface is JSONhttps://www.suunto.com/Support/Apps-and-services/
Wahoo proprietary + FIT2013+Wahoo FitnessWrites FIT natively; Wahoo Cloud API in JSONActive, FIT-firsthttps://api.wahooligan.com/
GoldenCheetah database / .json2005GoldenCheetah open-source projectSQLite + per-activity JSON; imports ~30 input formats (FIT, TCX, GPX, PWX, SRM, etC.)Active, the reference open-source desktop analytics toolhttps://www.goldencheetah.org/

Tier 3 family table — Wearable / health platform

FormatFirst appearedOriginTypeStatus (2026)URL
Apple HealthKit (HKWorkout, HKQuantitySample, HKWorkoutRoute)2014 (iOS 8); HKExportSession added iOS 19 (2025)AppleObjective-C/Swift type hierarchy; on-device store; export via XML/JSONVery active; iOS 19 unified workout-session APIs across iPhone/iPad/Watch, added 10 GB bulk exporthttps://developer.apple.com/documentation/healthkit/hkworkout
Google Health Connect2022 GA; Jetpack 1.1.0 stable; built into Android 14+; FHIR medical records added Android 16GoogleKotlin/Java SDK over on-device store; data-type catalog mirroring Google FitVery active, Google’s strategic successor to Google Fithttps://developer.android.com/health-and-fitness/health-connect
Google Fit REST API2014GoogleREST/JSON cloud APIRetiring: new signups closed 2024-05-01; full end of service scheduled end-of-2026; migrate to Health Connect or Google Health APIhttps://developer.android.com/health-and-fitness/health-connect/migration/fit
WHOOP API2021WHOOPREST/JSON; recovery score, strain, sleep stages, HRV, RHR, respiratory rate, workoutActive, OAuth2; available via Spike, Open Wearables aggregatorshttps://developer.whoop.com/api/
Oura cloud API2018Oura HealthREST/JSON; sleep, readiness, activity, daily summariesActivehttps://cloud.ouraring.com/docs/
Strava API2013StravaREST/JSON over OAuth2; activities, segments, athleteActive, the primary social-fitness data integrationhttps://developers.strava.com/docs/reference/
Garmin Connect IQ + Health/Activity APIs2015 (Connect IQ); Health API 2019GarminMonkey C device-side; cloud REST/JSON via partner programmeActivehttps://developer.garmin.com/connect-iq/overview/
Stryd Power Center API~2018StrydREST/JSON; running power, leg-spring stiffness, form-powerActive, the dominant running-power vocabularyhttps://stryd.com/powercenter
Fitbit Web API / Google Health (Fitbit-rebrand 2026-05-19)2010 (Fitbit)Fitbit → GoogleREST/JSON; activity, sleep, heart, bodyTransitioning: Fitbit app being rebranded as Google Health 2026-05-19; cross-platform ingest (Apple Watch, Garmin, WHOOP, Oura) rolling out later 2026https://dev.fitbit.com/build/reference/web-api/

Tier 3 family table — Sports event / play-by-play data

FormatFirst appearedOriginTypeStatus (2026)URL
Opta F-series feeds (F7, F9, F24, F40, etc.)1996 (Opta founded); F-series productised 2000sOpta → Perform → Stats PerformXML over HTTP push/pull; F24 = full event-by-event match feedVery active, the dominant football event-data feed; Opta marks 30 years in 2026https://www.statsperform.com/opta-feeds/
StatsBomb Open Data JSON2018StatsBomb (acquired by Hudl 2024)JSON; competitions, matches, events, lineups; xG, freeze frames, 360 tracking; >3,400 events per matchVery active, last refresh 2026-02-22; FA WSL, 2023 Women’s World Cup, selected La Liga / Champions League; the open-data baseline for soccer analyticshttps://github.com/statsbomb/open-data
Sportradar feeds2000sSportradar AGMulti-sport real-time feeds (XML and JSON variants); core supplier to sports booksVery activehttps://developer.sportradar.com/
Genius Sports feeds2000sGenius SportsMulti-sport feeds, official data partner for NFL, NCAA, Premier LeagueVery activehttps://developer.geniussports.com/
NFL Next Gen Stats schema2014 (Zebra partnership); ongoingNFL + Zebra Technologies + AWSPlayer/ball tracking JSON; ~10 Hz position, speed, acceleration; AWS-hostedActive proprietary; partial release via NGS public website, full data NFL-internalhttps://nextgenstats.nfl.com/
MLB Statcast schema2015 (Hawk-Eye since 2020)MLB Advanced MediaPitch/event-level tracking; per-pitch, per-game, per-player CSV/JSON via Baseball SavantVery active; Baseball Savant is the de facto open query surfacehttps://baseballsavant.mlb.com/statcast_search
NBA Stats / play-by-play JSON2010sNBA / Stats LLCJSON via stats.nba.com endpoints; play-by-play, shot charts, box scoresActive, semi-public (rate-limited)https://stats.nba.com/
ESPN game-feed JSON2010sESPNInternal JSON consumed by ESPN apps; reverse-engineered widelyActive, undocumentedhttps://site.api.espn.com/
Formula 1 Live Timing / F1 timing data1990s onwards; SignalR stream currentFormula One ManagementReal-time SignalR-WebSocket protocol; car position, timing, race control messagesActive, the reference real-time motorsport feed (semi-public)https://www.formula1.com/en/timing/f1-live

Tier 3 family table — Indoor trainer / training prescription

FormatFirst appearedOriginTypeStatus (2026)URL
ZWO (Zwift Workout)2015ZwiftXML; intervals as <SteadyState>, <IntervalsT>, <Ramp>, etc.; power as decimal fraction of FTPVery active, the dominant virtual-cycling workout grammarhttps://github.com/h4l/zwift-workout-file-reference
ERG (CompuTrainer/PerfPRO)~1995RacerMate CompuTrainerPlain-text; absolute watts targets per intervalActive legacy, still emitted/consumed by TrainerRoad, TrainingPeaks, Zwift, PerfPROhttps://perfprostudio.com/FileInfo.aspx?ID=PS
MRC (Monark / CompuTrainer)~1995RacerMatePlain-text; percent-FTP targets per interval (vs ERG’s absolute watts)Active legacy, paired with ERG in every trainer ecosystemhttps://perfprostudio.com/FileInfo.aspx?ID=PS
ANT+ / ANT-FS device profiles2003 (ANT); ANT+ ~2006Dynastream / Garmin / ANT+ AllianceWireless transport DSL; per-device-class profiles (HR, power, cadence, FE-C trainer control)Active, still the wireless transport that becomes FIT on diskhttps://www.thisisant.com/developer/ant-plus/device-profiles
Bluetooth GATT Heart Rate / Cycling Power profiles2011 (BT 4.0 / BLE)Bluetooth SIGGATT service+characteristic schemas; UUID-keyed binary recordsActive, 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.xsd has 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 socceraction Python package, the mplsoccer visualisation library, the statsbombpy and statsbombR SDKs, 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 HKWorkoutSession across iPhone, iPad, and Watch in iOS 19 (WWDC 2025) and added HKExportSession to 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