Skip to content

Releases: Sibyx/phpGPX

2.0.0-beta.1

09 Mar 14:00
d7c31b3

Choose a tag to compare

2.0.0-beta.1 Pre-release
Pre-release

Is There Anybody Out There?

After eight years of maintaining a phpGPX library I've finally decided to... rewrite the whole thing in modern PHP. Not sure if this thingy is even needed in AI-driven world. Apparently self-sabotage is my love language and I had so much fun in last few days.

Static methods died. Interfaces multiplied like rabbits. The Engine has pluggable analyzers now, which sounds fancy until you realize it's just me overthinking how to calculate distance between two fucking coordinates.

PHP 8.1+ only. Why? Because if you're still running PHP 7 in 2026, you have bigger problems than parsing GPX files. Like explaining to your therapist why you enjoy pain.

Breaking changes? Yes. Worth it? Ask me in 2034 when I apologize again.

🚀 Now with 100% more GeoJSON and existential dread 🚀

Breaking Changes

  • Changed: phpGPX is now instance-based — phpGPX::load() (static) replaced by (new phpGPX())->load()
  • Removed: All static configuration properties ($CALCULATE_STATS, $SORT_BY_TIMESTAMP, $PRETTY_PRINT, etc.) — replaced by Config value object and analyzer constructors
  • Removed: Summarizable interface and toArray() — replaced by JsonSerializable returning GeoJSON (RFC 7946)
  • Removed: GpxSerializable interface — parsers handle XML serialization via Data Mapper pattern
  • Removed: StatsCalculator interface — replaced by Engine
  • Removed: AbstractExtension base class — replaced by ExtensionInterface
  • Changed: Point type constants (Point::TRACKPOINT, etc.) replaced by PointType enum
  • Changed: Extension access $extensions->trackPointExtension replaced by $extensions->get(TrackPointExtension::class)

Added

  • Added: Single-pass stats Engine with pluggable analyzers (DistanceAnalyzer, ElevationAnalyzer, AltitudeAnalyzer, TimestampAnalyzer, BoundsAnalyzer, MovementAnalyzer, TrackPointExtensionAnalyzer)
  • Added: Engine::default() factory with named parameters for common configuration
  • Added: ExtensionRegistry for registering custom extension parsers by namespace URI
  • Added: ExtensionInterface and ExtensionParserInterface for custom extensions
  • Added: Config value object for output configuration
  • Added: AbstractParser base class centralizing attribute mapping and XML handling
  • Added: mkdocs-material documentation site with PlantUML support
  • Added: Consolidated CI workflow (PHP 8.1–8.4 matrix) with Codecov integration

Changed

  • Changed: PHP 8.1+ required
  • Changed: Extensions model is now a keyed collection
  • Changed: Default Garmin TrackPointExtension v1 + v2 auto-registered via ExtensionRegistry::default()
  • Changed: All parsers refactored to extend AbstractParser
  • Changed: Strict typing on all model properties
  • Changed: Test suite restructured into unit and integration suites
  • Changed: PHPUnit 10+ with attributes (annotations removed)
  • Changed: Test fixtures standardized under tests/Fixtures/

1.3.0

27 Jul 22:35
6d82507

Choose a tag to compare

Changed minimal PHP version to ^7.1 in composer.json. Library still should work with PHP5.5+, if you have troubles
while installing check the --ignore-platform-reqs attribute of compose.

1.2.1

30 Jul 20:33

Choose a tag to compare

  • Fixed: Fixed VERSION string in phpGPX.php

1.2.0

30 Jul 20:21
aac01e5

Choose a tag to compare

1.1.3

29 Jul 14:52
6ef84c6

Choose a tag to compare

1.1.2

28 Feb 20:01
e8841db

Choose a tag to compare

1.1.1

15 Feb 11:01
a32e152

Choose a tag to compare

  • Fix: Fixed VERSION string in phpGPX.php

1.1.0

05 Feb 12:27
9ef1c8e

Choose a tag to compare

1.0.1

03 Dec 18:37
9568c36

Choose a tag to compare

1.0.0

24 Nov 00:11
1c1b407

Choose a tag to compare

I am not very proud of idea having a major release in such terrible state. This release is just freeze from 2017
compatible API and behaviour with some bugfixies. It looks like some people use the library and I want to perform some
radical refactoring. See you in 2.x.

  • Fix: Do not return extra : while parsing unsupported extensions if there is no namespace for child element
  • Fix: Fixed Copyright test