TCX file format
A TCX file stores a workout as XML text, with laps and their totals, and track points with time, position, heart rate and cadence. Garmin defined the format, and training services such as Strava still accept it.
- Full name
- Training Center XML
- Extension
- .tcx
- Type
- XML text
- Schema
- Garmin TrainingCenterDatabase v2
TrackLoupe does not open TCX files yet. The tools page lists what it opens today.
What a TCX file can store
| Data | TCX |
|---|---|
| Recorded tracks | Yes |
| More than one track | Yes |
| Track segments | Yes |
| Planned routes | YesAs a Course |
| Waypoints | YesOnly as course points |
| File name and title | No |
| Description | YesActivity notes |
| Author | No |
| Creation time | Yes |
| Links | No |
| Track names | No |
| Activity type | YesRunning, Biking or Other |
| Elevation | Yes |
| Timestamps | Yes |
| Heart rate | Yes |
| Cadence | Yes |
| Power | With an extensionGarmin ActivityExtension v2 |
| Temperature | No |
| Speed | With an extensionGarmin ActivityExtension v2 |
This table comes from the code of TrackLoupe, and the notes say how each field is stored. The converters use the same table to tell you what a conversion keeps and what it loses.
What is inside a TCX file
The root element is <TrainingCenterDatabase>. Recorded workouts sit in <Activities>, and each <Activity> has:
- a
Sportattribute, which isRunning,BikingorOther; - an
<Id>, which is a date and time; - one or more
<Lap>elements.
Each lap holds its totals: TotalTimeSeconds, DistanceMeters, Calories, and the average and maximum heart rate. Its <Track> holds the <Trackpoint> elements. A track point holds the time, the position in <LatitudeDegrees> and <LongitudeDegrees>, the altitude, the distance covered so far, the heart rate and the cadence.
This is a short TCX file with one lap and one track point:
<?xml version="1.0" encoding="UTF-8"?>
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2">
<Activities>
<Activity Sport="Biking">
<Id>2026-03-14T09:30:00Z</Id>
<Lap StartTime="2026-03-14T09:30:00Z">
<TotalTimeSeconds>10</TotalTimeSeconds>
<DistanceMeters>70</DistanceMeters>
<Calories>1</Calories>
<Intensity>Active</Intensity>
<TriggerMethod>Manual</TriggerMethod>
<Track>
<Trackpoint>
<Time>2026-03-14T09:30:00Z</Time>
<Position>
<LatitudeDegrees>38.7139</LatitudeDegrees>
<LongitudeDegrees>-9.1394</LongitudeDegrees>
</Position>
<AltitudeMeters>45.2</AltitudeMeters>
<DistanceMeters>0</DistanceMeters>
<HeartRateBpm>
<Value>128</Value>
</HeartRateBpm>
<Cadence>82</Cadence>
</Trackpoint>
</Track>
</Lap>
</Activity>
</Activities>
</TrainingCenterDatabase>
What a TCX file leaves out
The TCX schema has no element for temperature or power. Garmin carries power and speed in an extension, ActivityExtension v2. A TCX file has no waypoints either, apart from the course points of a course.
Activities and courses
A TCX file can also hold a course: a planned route with a name, a track and course points, such as turns. Courses are for navigation on a device. Strava refuses them with a “Not an Activity” error, because a course does not record a real workout.
How to open a TCX file
- On Strava: the Strava website accepts TCX files up to 25 MB as an upload, along with GPX and FIT.
- In a text editor: any editor shows the XML, because TCX is plain text.
TrackLoupe does not open TCX files yet.
Questions
What does TCX stand for?
Training Center XML.
Is TCX better than GPX?
For a workout, TCX keeps more: laps, heart rate and cadence are part of the format. For a route or a set of places, GPX fits better, because it has waypoints and more apps read it. The GPX vs TCX page compares them.
Why is there no power in my TCX file?
Power is not part of the TCX schema. It travels in Garmin’s ActivityExtension, and an app that does not write that extension leaves power out.
Why is there no temperature in my TCX file?
The TCX format has no place for it. A FIT file, or a GPX file with Garmin’s TrackPointExtension, can hold temperature.