Skip to content

Releases: Sibyx/phpGPX

2.0.0-beta.1

2.0.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@Sibyx Sibyx released this 09 Mar 14:00
d7c31b3

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

Choose a tag to compare

@Sibyx Sibyx released this 27 Jul 22:35
6d82507

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

Choose a tag to compare

@Sibyx Sibyx released this 30 Jul 20:33
  • Fixed: Fixed VERSION string in phpGPX.php

1.2.0

Choose a tag to compare

@Sibyx Sibyx released this 30 Jul 20:21
aac01e5

1.1.3

Choose a tag to compare

@Sibyx Sibyx released this 29 Jul 14:52
6ef84c6

1.1.2

Choose a tag to compare

@Sibyx Sibyx released this 28 Feb 20:01
e8841db

1.1.1

Choose a tag to compare

@Sibyx Sibyx released this 15 Feb 11:01
a32e152
  • Fix: Fixed VERSION string in phpGPX.php

1.1.0

Choose a tag to compare

@Sibyx Sibyx released this 05 Feb 12:27
9ef1c8e

1.0.1

Choose a tag to compare

@Sibyx Sibyx released this 03 Dec 18:37
9568c36

1.0.0

Choose a tag to compare

@Sibyx Sibyx released this 24 Nov 00:11
1c1b407

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