sportlog / fit
A decoder for FIT files
v0.6.0
2026-05-01 13:19 UTC
Requires
- php: >=8.0
- psr/log: ^3.0
Requires (Dev)
- nette/php-generator: ^4.2
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^12.5
This package is auto-updated.
Last update: 2026-05-01 17:25:38 UTC
README
A PHP (>= PHP 8) decoder for FIT files created by Garmin devices. The result is a list of all messages decoded from the file. Each message is an instance of its underlying message class, so you can easily access any (native) fields using intellisense. (FIT SDK 21.201)
Install via Composer
You can install sportlog/FIT using Composer.
$ composer require sportlog/fit
Minimum PHP version required is 8.
There are two functions for decoding
- read: requires the file as parameter and returns an instance of MessageList, which holds all decoded messages.
- stream: requires the file and a callback as parameter, which receives each decoded message. Returns void to reduce memory consumption.
How to use
<?php require 'vendor/autoload.php'; use Sportlog\FIT\Decoder; use Sportlog\FIT\Profile\Messages\SessionMessage; use Sportlog\FIT\Profile\Types\MesgNum; $decoder = new Decoder(); // Decoding the FIT file returns a set of messages $messageList = $decoder->read('yourfile.fit'); echo "File type: " . $messageList->getFileType(); // You can iterate over the message list, or like in this example, // iterate over the messages grouped by their message numbers. foreach ($messageList->getMessageNumbers() as $messageNumber) { $messages = $messageList->getMessages($messageNumber); echo sprintf('%s: %s', $messageNumber, count($messages)); } // You can also grab specific messages $sessionMessages = $messageList->getMessages(MesgNum::SESSION); // There should be one session message (add check!) /** @var SessionMessage $sessionMessage */ $sessionMessage = $sessionMessages[0]; // get any native fields from the message; use intellisense echo "Total time (m): " . $sessionMessage->getTotalElapsedTime(); echo "Total distance (m): " . $sessionMessage->getTotalDistance(); echo "Total ascent (m): " . $sessionMessage->getTotalAscent();
Limitations
Currently not supported
- Compressed time stamps
- Components