Skip to content

Convert Garmin to FIT

Take a Garmin Connect workout (GCN JSON) into a Garmin FIT file — the on-device binary format — so a plan from your Garmin Connect account can be loaded as a native FIT workout. 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, power ±1 W, heart rate ±1 bpm, cadence ±1 rpm).

Three ways to convert

1. Editor (drag & drop)

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

2. CLI

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

3. SDK

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

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

What survives the conversion

DataGarmin Connect (GCN)FITResult
Step order & namesworkout stepsworkout stepsPreserved
Time durationstime durationssecondsPreserved (±1 s)
Distance durationsdistance durationsmetersPreserved
Power targetswatts / power zonewatts / zonePreserved (±1 W; zones map across)
Heart-rate targetsbpmbpm / zonePreserved (±1 bpm)
Cadence targetsrpmrpmPreserved (±1 rpm)
Speed / pace targetsm/sm/sPreserved
Repeats / intervalsrepeat blocksrepeat stepsPreserved
Step notesdescriptionworkout step notesPreserved (truncated to 256 chars)

Both formats are Garmin-native and watt-based, so this is a high-fidelity conversion — no assumed FTP is needed.

Gotchas

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.

Will it load on my Garmin? FIT is Garmin's native workout format, so the output is directly loadable. To send it to your device, push it with the CLI — kaiord garmin push -i workout.fit --input-format fit — or use the Editor's Garmin integration.

Calorie-based durations. Garmin Connect can express a step duration in calories. KRD models calorie durations natively, so they carry through to FIT (which also supports calorie durations); a target format without them, such as TCX, would not.