Skip to content

Convert TCX to FIT

Turn a TCX (Training Center XML) workout into a Garmin FIT file so a plan exported from another platform can run on your Garmin device. 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 (drag & drop)

Open kaiord.com/editor, drop your .tcx file, choose FIT as the export format, and download workout.fit.

2. CLI

bash
pnpm add -g @kaiord/cli
kaiord convert -i workout.tcx -o workout.fit

3. SDK

ts
import { fromText, toBinary } from "@kaiord/core";
import { tcxReader } from "@kaiord/tcx";
import { fitWriter } from "@kaiord/fit";
import { readFile, writeFile } from "node:fs/promises";

const tcx = await readFile("workout.tcx", "utf-8");
const krd = await fromText(tcx, tcxReader);
const fit = await toBinary(krd, fitWriter);
await writeFile("workout.fit", fit);

What survives the conversion

DataTCXFITResult
Step order & names<Step> / <Name>workout stepsPreserved
Time durationsTime_t secondssecondsPreserved (±1 s)
Distance durationsDistance_t metersmetersPreserved
Heart-rate targetsHeartRate_t (zone or bpm)bpm / zonePreserved (±1 bpm)
Speed targetsSpeed_tm/sPreserved
Cadence targetsCadence_trpmPreserved (±1 rpm)
Repeats / intervalsRepeat_trepeat stepsPreserved

Gotchas

No power targets appear. TCX workouts have no power target (the schema covers heart rate, speed, and cadence only), so a TCX-sourced FIT file won't gain power targets. If you need power, start from a ZWO or Garmin Connect workout instead.

Getting it onto your Garmin. Push the FIT file with the CLI — kaiord garmin push -i workout.fit --input-format fit — or use the Editor's Garmin integration. See the garmin command.

Sport mapping. TCX Sport values (Running, Biking, Other) map to the corresponding FIT sports; anything unrecognized falls back to Other.