Skip to main content

FIT

Stride uses a parser to extract activity data from FIT files. The parser processes three main message types from the FIT protocol: Session, Lap, and Record.

Session

Session messages contain overall activity summary data. Stride extracts the following fields:

FieldField NumberData TypeTransformationDescription
start_time2u32NoneActivity start timestamp
sport5EnumNoneSport type (running, cycling, swimming)
total_elapsed_time7u32÷ 1000Total elapsed time in seconds
total_timer_time8u32÷ 1000Total timer time in seconds
total_distance9u32÷ 100Total distance in meters
total_calories11u16NoneTotal calories burned
avg_heart_rate16u8NoneAverage heart rate in bpm
max_heart_rate17u8NoneMaximum heart rate in bpm
avg_cadence18u8NoneAverage cadence (rpm for cycling, spm for running)
max_cadence19u8NoneMaximum cadence
avg_power20u16SanitizedAverage power in watts
max_power21u16SanitizedMaximum power in watts
total_ascent22u16SanitizedTotal ascent in meters
total_training_effect24u8NoneTraining effect score
num_lengths33u16SanitizedNumber of pool lengths (swimming)
np_power34u16SanitizedNormalized power in watts
training_stress_score35u16SanitizedTraining stress score (TSS)
intensity_factor36u16SanitizedIntensity factor (IF)
pool_length44u16Sanitized, ÷ 100Pool length in meters (swimming)
avg_temperature57i8SanitizedAverage temperature in °C
max_temperature58i8SanitizedMaximum temperature in °C
min_temperature150i8SanitizedMinimum temperature in °C
avg_speed124u32SanitizedAverage speed in m/s
timestamp253u32NoneEnd timestamp

Sport Types

The parser currently supports three sport types:

  • running: Running activities
  • cycling: Cycling activities
  • swimming: Swimming activities

Lap

Lap messages contain data for individual laps/segments within an activity. Each lap includes:

FieldField NumberData TypeTransformationDescription
index-u16Auto-incrementedLap index (0-based)
start_time2u32NoneLap start timestamp
total_elapsed_time7u32÷ 1000Total elapsed time in seconds
total_timer_time8u32÷ 1000Total timer time in seconds
total_distance9u32÷ 100Total distance in meters
avg_heart_rate15u8NoneAverage heart rate in bpm
max_heart_rate16u8NoneMaximum heart rate in bpm

The lap index is automatically incremented for each lap message encountered, starting from 0.

Record

Record messages contain individual data points recorded during the activity. These are stored as track points on the map and used for detailed charts.

FieldField NumberData TypeTransformationDescription
lat0f32Special*Latitude in degrees
lon1f32NoneLongitude in degrees
heart_rate3u8NoneHeart rate in bpm
cadence4u8NoneCadence (rpm for cycling, spm for running)
distance5u32÷ 100Distance in meters
power7u16SanitizedPower in watts
temperature13i8SanitizedTemperature in °C
speed73u32NoneSpeed in m/s
altitude78u32NoneAltitude in meters
timestamp253u32NoneTimestamp

*Latitude has special handling: values of 180.0 are converted to 0.0

Data Transformations

Division Transformations

  • ÷ 1000: Time values are stored in milliseconds in the FIT file and converted to seconds
  • ÷ 100: Distance and length values are stored in centimeters and converted to meters

Sanitization

Sanitization removes invalid or placeholder values (typically maximum values like 65535 for u16 or 255 for u8) and replaces them with 0. This prevents displaying erroneous data from uninitialized or unavailable sensor readings.