Skip to content

Convert Garmin to FIT ​

Scope

Converts structured workouts (steps and targets), not recorded activities. See Workouts vs. activities.

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 (in the browser) ​

Open kaiord.com/app, choose your Garmin Connect workout file (FIT is already selected 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.