Releases: Sibyx/phpGPX
2.0.0-beta.1
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:
phpGPXis 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 byConfigvalue object and analyzer constructors - Removed:
Summarizableinterface andtoArray()— replaced byJsonSerializablereturning GeoJSON (RFC 7946) - Removed:
GpxSerializableinterface — parsers handle XML serialization via Data Mapper pattern - Removed:
StatsCalculatorinterface — replaced by Engine - Removed:
AbstractExtensionbase class — replaced byExtensionInterface - Changed: Point type constants (
Point::TRACKPOINT, etc.) replaced byPointTypeenum - Changed: Extension access
$extensions->trackPointExtensionreplaced by$extensions->get(TrackPointExtension::class)
Added
- Added: Single-pass stats
Enginewith pluggable analyzers (DistanceAnalyzer,ElevationAnalyzer,AltitudeAnalyzer,TimestampAnalyzer,BoundsAnalyzer,MovementAnalyzer,TrackPointExtensionAnalyzer) - Added:
Engine::default()factory with named parameters for common configuration - Added:
ExtensionRegistryfor registering custom extension parsers by namespace URI - Added:
ExtensionInterfaceandExtensionParserInterfacefor custom extensions - Added:
Configvalue object for output configuration - Added:
AbstractParserbase 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:
Extensionsmodel 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
unitandintegrationsuites - Changed: PHPUnit 10+ with attributes (annotations removed)
- Changed: Test fixtures standardized under
tests/Fixtures/
1.3.0
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.
- Added: Coordinates for remarqued statistic points (minAltitude, maxAltitude, startedAt, finishedAt) thanks to @nono303
1.2.1
1.2.0
- Feature: Real distance calculation #37 (DistanceCalculator refactor)
1.1.3
- Fix: Fix negative duration #58 by @neronmoon
1.1.2
1.1.1
1.1.0
1.0.1
- Fix: Fixed PersonParser::toXML() if there are no links provided
Error when $person->links is null #48
1.0.0
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