abduns/laravel-fit-reader

A focused Laravel 12 package to read Garmin .fit activity files.

Maintainers

Package info

github.com/abduns/laravel-fit-reader

pkg:composer/abduns/laravel-fit-reader

Statistics

Installs: 98

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.2.3 2026-05-17 12:47 UTC

README

A focused, developer-friendly Laravel package to read and parse Garmin .fit activity files.

Tests Version Downloads License

Features

  • Modern PHP support
  • Lightweight and fast
  • Typed API
  • DTO Support
  • Laravel Integration
  • Extensible architecture

Installation

composer require abduns/laravel-fit-reader
php artisan vendor:publish --tag="fit-reader-config"

Quick Start

use Dunn\FitReader\Facades\FitReader;

// Read from a local path
$activity = FitReader::fromPath(storage_path('app/activities/run.fit'));

echo "Total Distance: " . $activity->totalDistanceMeters . " meters";

Example output:

Total Distance: 5000.5 meters

Why This Package?

  • Existing solutions are outdated or rely on external binaries
  • Missing modern PHP features
  • Poor developer experience
  • No standards compliance
  • Not built specifically for Laravel 12+

This package provides a native PHP implementation for parsing FIT files, converting raw data into easy-to-use Data Transfer Objects (DTOs).

Usage

Basic Usage

use Dunn\FitReader\Facades\FitReader;

$activity = FitReader::fromPath(storage_path('app/activities/run.fit'));

// Activity Summary
echo "Start Time: " . $activity->startTime->format('Y-m-d H:i:s');
echo "Sport: " . $activity->getSportName(); // e.g., "running", "cycling", "swimming"

Advanced Usage

use Illuminate\Http\Request;
use Dunn\FitReader\Facades\FitReader;

class ActivityController extends Controller
{
    public function store(Request $request)
    {
        $file = $request->file('activity_file');
        
        // Parse the uploaded file directly
        $activity = FitReader::fromUploadedFile($file);
        
        // Export entire activity as array
        $array = $activity->toArray();
        $json = $activity->toJson();
        
        return response()->json([
            'distance' => $activity->totalDistanceMeters,
            'duration' => $activity->totalDurationSeconds,
            'records_count' => $activity->records->count(),
        ]);
    }
}

Configuration

return [
    'units' => [
        'raw_values' => false, // Set to true if you want raw values instead of converted units
    ],
];

Standards / Specifications

References:

  • Flexible and Interoperable Data Transfer (FIT) Protocol

Supported Features

Feature Support
Activity Parsing
Records (Time Series Data)
Laps Data
Exporting Data
Detecting Activity Type

Compatibility

Platform Supported
PHP 8.2+
Laravel 12.x

Design Goals

  • Developer experience first
  • Predictable APIs
  • Minimal dependencies
  • Strong typing
  • Extensibility
  • Native PHP Implementation

Architecture

  • Decoded streams into typed DTOs (FitActivity, FitRecord, FitLap)
  • Facade for ease of use
  • Native file parsing without binary dependencies

Performance

Operation Time
Parse typical FIT file < 50ms

Testing

composer test

Roadmap

  • Support writing/editing FIT files

Contributing

Contributions, issues, and discussions are welcome.

Security

If you discover security issues, please report them responsibly.

License

MIT