English
Convert Garmin to TCX
Scope
Converts structured workouts (steps and targets), not recorded activities. See Workouts vs. activities.
Take a Garmin Connect workout (GCN JSON) into a TCX (Training Center XML) file so a plan from Garmin can import into another training platform. Use the free, in-browser Kaiord Editor (no account, no upload), or the CLI and TypeScript SDK. Conversions go through Kaiord's canonical KRD format and stay within round-trip tolerances (time ±1 s, heart rate ±1 bpm, cadence ±1 rpm).
Three ways to convert
1. Editor (in the browser)
Open kaiord.com/app, choose your Garmin Connect workout file (TCX is already selected as the export format), and download workout.tcx.
2. CLI
bash
pnpm add -g @kaiord/cli
kaiord convert -i workout.gcn -o workout.tcx3. SDK
ts
import { fromText, toText } from "@kaiord/core";
import { garminReader } from "@kaiord/garmin";
import { tcxWriter } from "@kaiord/tcx";
import { readFile, writeFile } from "node:fs/promises";
const gcn = await readFile("workout.gcn", "utf-8");
const krd = await fromText(gcn, garminReader);
const tcx = await toText(krd, tcxWriter);
await writeFile("workout.tcx", tcx);What survives the conversion
| Data | Garmin Connect (GCN) | TCX | Result |
|---|---|---|---|
| Step order & names | workout steps | <Step> / <Name> | Preserved |
| Time durations | time durations | Time_t seconds | Preserved (±1 s) |
| Distance durations | distance durations | Distance_t meters | Preserved |
| Heart-rate targets | bpm | HeartRate_t | Preserved (±1 bpm) |
| Speed / pace targets | m/s | Speed_t | Preserved |
| Cadence targets | rpm | Cadence_t | Preserved (±1 rpm) |
| Power targets | watts | — | Dropped — TCX workouts have no power target |
| Repeats / intervals | repeat blocks | Repeat_t | Preserved |
Gotchas
My power targets disappeared. The TCX workout schema covers heart rate, speed, and cadence — there is no power target. Garmin Connect stores power in watts, so any power targets are dropped in the TCX output. To keep power, convert to FIT instead, which keeps watt targets.
Where do I get the .gcn file? GCN is Garmin Connect's workout JSON. Fetch it through the Garmin Connect API with @kaiord/garmin-connect (e.g. kaiord garmin list) or the Editor's Garmin integration.
Calorie-based durations. Garmin Connect can express a step duration in calories, but TCX supports only time- and distance-based durations. A calorie-duration step therefore has no direct TCX equivalent — prefer FIT if your workout relies on calorie goals.
Related
- Convert TCX to Garmin — the reverse direction
- Convert Garmin to ZWO — a Zwift export
- GCN format · TCX format
- All converters