Garmin FIT — ANT+ Fitness Protocol for Edge and Forerunner: Profiles, HR/Power and OSM Routes

2026-04-018 min read
GarminFITfitnessANT+cyclingrunningGPSbinary

FIT (Flexible and Interoperable Data Transfer) is Garmin's binary fitness protocol from 2008 that powers the entire modern workflow of cyclists, runners, and triathletes. Every Garmin Forerunner watch, Edge bike computer, Fenix multisport device, plus Wahoo, Polar, Bryton, and Stages powermeter products save each workout as a .fit file that then flows to Garmin Connect, Strava, TrainingPeaks. Unlike GPX — a recording and exchange format for GPS tracks — FIT also stores per-second heart rate, cadence, pedaling power, barometric altitude, temperature, speed, lactate threshold, power zones, auto-pause modes. And all of that is 4–6x more compact than GPX thanks to binary packing. On osm2cdr.ru we use FIT differently: we export a planned cycling or running route from OSM into a FIT Course profile via a converter built on top of the FIT SDK — and a Garmin Edge 1040 then leads you along the route with turn-by-turn navigation, no internet required.

Map generation of Yaroslavl city center

History: ANT+ ecosystem and the birth of FIT

In 2003 Canadian company Dynastream Innovations launched the wireless ANT protocol — ultra-low-power data exchange between fitness sensors (heart-rate strap, cadence sensor, powermeter). Garmin acquired Dynastream in 2006, and two years later, in 2008, introduced FIT — the binary file format for storing data flowing from ANT+ sensors. Before FIT, Garmin used the XML TCX (Training Center XML) format, but TCX was verbose, slow to parse on embedded devices, and didn't support modern multi-sport workflows like triathlon (swim → bike → run without resetting the recording).

FIT solved all three problems. Binary packing brought compactness: a typical two-hour bike ride with HR/cadence/power at one-second intervals weighs about 80 KB versus 600 KB in TCX. Profile-based architecture let one format serve different data types: Activity (recorded workout), Course (planned route for navigation), Workout (interval plan), Monitoring (24/7 step data), Goals, Schedules, Settings. Multi-sport transitions appeared in the Activity profile as a native entity.

By 2012, all new Garmin Edge and Forerunner devices wrote FIT by default. Strava, TrainingPeaks, Wahoo, Polar, Suunto, Bryton adopted FIT as the primary upload format — because the Garmin SDK was free and published on thisisant.com under permissive terms, and FIT-file analytics provided 30–50% more metrics than GPX. Today FIT is the de-facto standard of the fitness industry: a bike-computer or watch owner almost certainly works with FIT, even without knowing it.

Map generation of Samara city center

Inside FIT: profiles and messages

FIT is a binary stream of messages (records). File structure:

  • Header (12 or 14 bytes): header size, protocol version, profile version, data length, .FIT magic bytes, optional CRC.
  • Records: alternating definition messages (schema description) and data messages (actual data).
  • CRC (last 2 bytes): integrity protection.

A definition message declares the message type and its fields: name, data type (uint8, sint32, float32), size, scale, offset, unit (m/s, bpm, watts). This lets the SDK parse the file without a fixed schema — a sensor manufacturer adds custom fields, and the analyzer reads them.

A data message contains actual values per the schema declared earlier. A typical record point in an Activity file: timestamp, latitude (semicircles), longitude (semicircles), altitude (m × 5 + 500), heart_rate (bpm), cadence (rpm), speed (m/s × 1000), power (watts), temperature (°C), distance (m × 100).

Coordinates in FIT are stored in semicircles — integer units where 2³¹ semicircles = 180°. This is int32 instead of float64, saving 4 bytes per coordinate. Conversion: degrees = semicircles × (180 / 2^31).

Profiles define file semantics:

  • Activity — recorded workout with per-second sensor data. The most common profile.
  • Course — planned route for navigation: waypoints + course points (turn left/right/straight) + optional segments. This is what we generate from OSM.
  • Workout — interval training plan: "10-min warm-up → 5×(3 min at 280 W + 2 min rest) → 10-min cool-down".
  • Monitoring — 24/7 step, sleep, stress data from Forerunner/Fenix watches.
  • Goals/Schedules/Settings — service profiles for Connect sync.

Use cases

Cyclist with Garmin Edge 1040. Before a long ride across Belarus, Anton plans a route Brest → Bialowieza Forest → Kamenets in Komoot or Strava Routes for 130 km. Export to FIT Course via Garmin Connect (or via osm2cdr.ru), upload to Edge 1040 over Bluetooth. During the ride, the device records the real track with heart rate (via ANT+ from an HRM-Pro strap), cadence (from pedals or crank sensor), and power (from a Stages or Quarq powermeter). After the ride the .fit file weighs ~200 KB for 4 hours and auto-syncs to Garmin Connect, Strava, TrainingPeaks. A coach in TrainingPeaks dissects power zones, normalized power, training stress score.

Runner with Garmin Forerunner 965. Maria prepares for a marathon along Sydney's CBD. Training plan — long run 30 km along the waterfront + Mrs Macquaries Chair + Royal Botanic Garden. The route is prepared in osm2cdr.ru as a FIT Course with waypoints, uploaded to the Forerunner 965. During the run the watch leads along the route, gives vibration cues at turns, records pace, stride cadence, vertical oscillation, ground contact time — all in one FIT file, later analyzed in Garmin Connect and Runalyze.

Triathlete with Garmin Fenix 7. A single FIT file holds three segments: swim (1.9 km open water, GPS track sampled during breaststroke breaths), T1 transition (changing into cycling kit), bike (90 km along a GPX route with powermeter), T2, run (21.1 km). Multi-sport activity is a native FIT feature absent from GPX and TCX.

Workflow in OSM2CDR

OSM2CDR doesn't write FIT directly — we're not an activity format service but a map-export service. But we support the "OSM route → FIT Course" workflow through this chain:

  1. Routing. The user selects start/finish or a series of waypoints on the osm2cdr.ru map. The backend uses Valhalla or OSRM (over OSM data) to build a cycling or running route considering road surface (bike paths prioritized), elevation gain (via Copernicus DEM GLO-30), one-way restrictions.
  2. GPX export. The route is exported as a GPX route with waypoints and turn-by-turn instructions in <desc> fields.
  3. GPX → FIT conversion. The final step — an external converter based on the Garmin FIT SDK (nodejs @garmin/fitsdk or CLI gpsbabel -i gpx -f route.gpx -o garmin_fit -F route.fit). The converter creates a Course-profile file with course points for each turn: turn left, turn right, straight, slight left, sharp right.
  4. Upload to Edge/Forerunner. The user connects the device via USB or Bluetooth, copies the .fit file to Garmin/Courses/ or uploads via Garmin Connect Mobile.

Current status: direct FIT export on osm2cdr.ru is on the roadmap (a dedicated fit_exporter.py based on python-fitparse for encoding). For now — we recommend exporting to GPX and converting via Garmin Connect (free, one click) or pairing with Garmin IMG for a raster map alongside the route.

Map generation of Nizhny Novgorod city center

FIT vs TCX vs GPX

Parameter FIT TCX GPX
Type Binary (proprietary, open SDK) XML XML
Year 2008 2008 2002
Size for 2-hour ride with HR/power ~80 KB ~600 KB ~400 KB (with extensions)
Profiles Activity, Course, Workout, Monitoring, Goals Activity, Course, Workout Waypoints, routes, tracks
Sensor data (HR, cadence, power) Native, per-second Native Via extensions namespace
Multi-sport (triathlon) Yes Partial No
Workouts / training plans Yes Yes No
Garmin Connect / Strava Primary Supported Supported
Third-party viewers Via FIT SDK Notepad Notepad
Embedded-device parsing Fast Slow Medium

When to choose what. FIT — for all Garmin/Wahoo/Polar watches and bike computers: smaller footprint, more data, native multi-sport. This is the primary fitness format of 2025. TCX — a 2008 legacy still found on old Garmin Forerunner 305/405 and in Endomondo exports (RIP 2020); if you find one, convert it to FIT via Garmin Connect or GPSBabel. GPX — for GPS tracks, planning routes, exchange with non-Garmin apps (OsmAnd, Komoot plans in GPX, exports both FIT and GPX); the most universal but without sensor data by default.

Conclusion

Garmin FIT is a binary fitness protocol optimized for watch and bike-computer sensor data: 4–6x more compact than XML formats, native multi-sport triathlon support, Activity/Course/Workout profiles for every fitness scenario. Since 2012 — the de-facto industry standard: Garmin, Wahoo, Polar, Suunto, Bryton, Stages all write FIT; Strava and TrainingPeaks all accept FIT as the primary upload.

OSM2CDR works with FIT through GPX conversion: you plan a cycling or running route on our live OSM data, export GPX, convert to FIT Course via Garmin Connect or the nodejs SDK, upload to Edge / Forerunner / Fenix — and the device guides you offline with turn-by-turn navigation. Details and limits on the /formats/fit/ page.

Sources

← All articles