geocoder-php/Geocoder
73.3
Strong · 19 September 2026
12.1k
lines of production code
PHP
primary language
1
measurement over time
What this system is
This system is a PHP geocoding library that provides a unified interface for resolving addresses and IP addresses to geographic coordinates using a wide variety of external providers. It supports both forward and reverse geocoding through a modular architecture of immutable query objects, standardized location models, and extensible middleware plugins for caching and logging. The library also includes utilities for serializing geolocation data into standard formats and formatting addresses into human-readable strings.
How it got here
2011–2017 — PSR-18 migration and provider extraction
68 changes.
The project underwent a major architectural overhaul, migrating from legacy PHP-HTTP clients to PSR-18 standards and replacing mutable state with immutable query and address models. This period saw the extraction of numerous providers into standalone packages, the removal of deprecated services, and the introduction of a flexible plugin middleware system for caching and logging.
2018–2020 — Provider expansion and model refinement
20 changes.
This period focused on significantly expanding the library's coverage by integrating numerous new geocoding providers, including Algolia Places, Mapbox, Ipstack, Photon, Geocode Earth, Google Maps Places, Pelias, IP2Location, and Azure Maps. Concurrently, existing providers like Nominatim, Here, and Photon were enhanced with dedicated address models to expose granular, provider-specific metadata and administrative details. The work also included establishing comprehensive test suites with cached fixtures to ensure reliability across these new integrations.
Features
Add Algolia Places provider
Introduces a new Algolia Places provider for the Geocoder library, enabling forward geocoding of street addresses, cities, countries, and specific place types (such as airports, bus stops, and train stations) via the Algolia Places API. The provider supports optional authentication using an application ID and API key, allows filtering by country codes and specific place types, and requires a locale for optimal results; it does not support reverse geocoding or IP-based lookups.
src/Provider/AlgoliaPlaces · high confidence
Add Geocode Earth provider
Introduces a new Geocode Earth provider that extends the existing Pelias provider to support the Geocode Earth API (https://api.geocode.earth/). Users can now perform geocoding and reverse geocoding by instantiating the provider with a PSR-18 HTTP client and a valid API key, leveraging the underlying Pelias implementation for query execution.
src/Provider/GeocodeEarth · high confidence
Add IP2Location provider
This change introduces a new IP2Location provider for the PHP Geocoder library, allowing users to perform IP geolocation lookups using the IP2Location Web Service (WS9 package). The provider requires a valid API key and supports forward geocoding of IP addresses, while reverse geocoding is not supported. It is built on PSR-18 HTTP client standards and includes necessary configuration files for testing and distribution.
src/Provider/IP2Location · high confidence
Add IP2LocationBinary provider for local BIN database lookups
Introduces the IP2LocationBinary provider, enabling geocoding via a local IP2Location BIN database file. Users can now instantiate this provider with a path to a .BIN file (downloadable from IP2Location) to resolve IP addresses to country, region, city, latitude, longitude, and postal code. The provider requires the external IP2Location PHP library and does not support reverse geocoding.
src/Provider/IP2LocationBinary · high confidence
Add IpInfo provider for IP-based geocoding
A new IpInfo provider has been added to the library, enabling users to resolve IP addresses to geographic locations (latitude, longitude, city, region, postal code, and country code) via the ipinfo.io API. This provider supports forward geocoding for valid IP addresses but does not support reverse geocoding or street addresses.
src/Provider/IpInfo · high confidence
Add Ipstack provider for IP geocoding
The Ipstack provider is now available, allowing users to geocode IP addresses using the ipstack.com API. This new component supports forward geocoding for IPv4 and IPv6 addresses, including optional language localization for results, and extracts administrative region data (region\_name) as an admin level. It does not support reverse geocoding or street address lookups, and requires a valid API key for authentication.
src/Provider/Ipstack · high confidence
Add MapTiler geocoder provider
Introduces a new MapTiler provider for the PHP Geocoder library, enabling address geocoding and reverse geocoding via the MapTiler API. The implementation accepts a PSR-18 HTTP client and an API key, supports text-based geocoding (excluding IP addresses) and reverse geocoding, and parses MapTiler's JSON response features into standard location objects including coordinates, locality, sub-locality, and country information.
(repo-wide) · high confidence
Add Mapbox Geocoding Provider
Introduces a new Mapbox provider for the PHP Geocoder library, enabling geocoding and reverse geocoding via the Mapbox API. The implementation supports street addresses (but not IP addresses), configurable geocoding modes (mapbox.places and mapbox.places-permanent), location type filtering, bounding box queries, and fuzzy matching. It requires a Mapbox access token and relies on a PSR-18 HTTP client for network requests.
src/Provider/GraphHopper, src/Provider/Mapbox · high confidence
Add Mapbox address model with specific property accessors
Introduces the MapboxAddress class in the Mapbox provider, extending the base Address model to expose Mapbox-specific data fields. Users can now access the unique result ID, street number, street name, formatted address, neighborhood, and result type through dedicated getter and immutable setter methods, allowing for more precise handling of geocoding results from the Mapbox API.
src/Provider/Mapbox/Model · high confidence
Added promise implementations for geocoder plugin results
The plugin now includes \GeocoderFulfilledPromise\ and \GeocoderRejectedPromise\ classes that implement the \Http\\Promise\\Promise\ interface. These classes handle the asynchronous resolution of geocoding results, allowing callers to attach fulfillment and rejection callbacks via the \then\ method and retrieve the final \Collection\ or exception via \wait\.
src/Plugin/Promise · high confidence
Expanded GoogleMaps address model with granular location details
The GoogleAddress model now exposes a significantly richer set of properties derived from the Google Maps API, including subpremise, postal code suffix, formatted address, street address, intersection, and various place types (political, neighborhood, premise, natural feature, airport, park, point of interest, establishment). It also introduces support for sub-locality levels, a place ID, location type, result types, and a partial match flag, allowing users to access detailed geocoding metadata that was previously unavailable.
src/Provider/GoogleMaps/Model · high confidence
Geonames provider adds CountryInfo and extended Address models
The Geonames provider now exposes richer data structures for its results. A new CountryInfo model provides detailed country metadata including bounds, continent, capital, languages, geoname ID, ISO codes, population, area, and currency. Additionally, the GeonamesAddress model extends the standard address to include provider-specific fields such as fcode, fclName, population, geoname ID, alternate names, and ascii name, allowing users to access more granular geographic details from Geonames responses.
src/Provider/Geonames/Model · high confidence
Here provider model exposes location metadata and additional data
The Here provider now includes a dedicated \HereAddress\ model that extends the base address structure. This model adds specific fields for location identification (\locationId\, \locationType\, \locationName\) and provides mechanisms to store and retrieve arbitrary additional data (\additionalData\) and shape information (\shape\) via immutable builder methods. Users can now access these granular details from Here geocoding results instead of relying solely on the generic address components.
src/Provider/Here/Model · high confidence
Initial release of the GeoIP2 provider
This change introduces the GeoIP2 provider, allowing users to resolve IP addresses to geographic locations using MaxMind's GeoIP2 databases or web services. The provider supports both local database readers (such as GeoLite2) and the paid Precision Web Service API, enabling lookups for country, city, subdivisions, and timezone data. It is designed to work with PHP Geocoder 5 and requires PHP 7.2 or higher.
src/Provider/GeoIP2 · high confidence
Initial release of the Here geocoder provider
This change introduces the new Here provider, enabling users to perform geocoding and reverse geocoding using the Here platform. The provider supports both the legacy App ID/App Code authentication and the newer API Key authentication method (via \createUsingApiKey\). It also includes support for the Customer Integration Testing (CIT) environment, allows specifying a preferred language for results, and exposes additional data parameters such as crossing streets and routing information.
src/Provider/Here, src/Provider/IpInfoDb · high confidence
Initial release of the MaxMind Binary provider
The MaxMind Binary provider is now available as a standalone package, allowing users to perform IP geocoding using the MaxMind binary database format via the PHP GeoIP extension. This provider supports forward geocoding for IPv4 addresses but does not support IPv6 or reverse geocoding. It requires the MaxMind dat file to be provided at instantiation and handles character encoding for country and city names.
src/Provider/MaxMindBinary · high confidence
Initial release of the common-http package
A new package, common-http, has been added to provide common classes for HTTP-based geocoders. It includes an AbstractHttpProvider and relies on HTTPlug and PSR-7 libraries. The package is licensed under MIT and includes standard configuration files for testing and repository management.
src/Http · high confidence
Initial release of the standalone Geonames provider
The Geonames provider is now available as a separate package, allowing users to install it independently via \composer require geocoder-php/geonames-provider\. This release introduces the core provider implementation, including support for geocoding, reverse geocoding, and a new CountryInfo endpoint. It requires a PSR-18 HTTP client and PHP 7.2 or higher, with specific support for PHP 8.0 and 8.1 added in subsequent minor versions.
src/Provider/Geonames · high confidence
Introduce Azure Maps geocoder provider
Adds a new Azure Maps provider to the Geocoder library, enabling users to perform forward and reverse geocoding against the Azure Maps API. The implementation requires a PSR-18 HTTP client and a subscription key, and supports configuration options such as language, limit, and country set.
src/Provider/AzureMaps · high confidence
Introduce Google Maps Places provider
Adds a new Google Maps Places provider that enables geocoding and reverse geocoding via the Google Places API. Users can perform text-based geocoding in 'find' (default) or 'search' modes, and reverse geocoding using 'search' or 'nearby' modes, with support for filtering by location, radius, type, and other place-specific parameters.
src/Provider/GoogleMapsPlaces · high confidence
Introduce PSR-16 Cache Provider for Geocoder
A new \ProviderCache\ class has been added to wrap existing geocoder providers with a PSR-16 compatible cache. This allows users to cache geocoding and reverse-geocoding results to reduce API calls, with support for setting a custom cache lifetime and an option to separate cache keys by provider name. The provider is implemented as a non-final class, allowing for subclassing and overriding of the cache key generation logic.
src/Provider/Cache · high confidence
Introduce Photon geocoding provider
Adds the Photon provider, enabling geocoding and reverse geocoding via the Photon API (photon.komoot.io). The provider supports query parameters for latitude/longitude, bounding box, layer filtering, and OpenStreetMap tag filters, and returns address details including state, county, district, and OSM metadata.
src/Provider/Photon · high confidence
Introduce Plugin middleware architecture for Geocoder providers
This change adds a new plugin system to the Geocoder library, allowing users to wrap existing providers with middleware that can transform queries, modify results, or restart requests. The core \PluginProvider\ class manages a chain of \Plugin\ implementations, enforcing a configurable limit on request restarts to prevent infinite loops (defaulting to 10). A new \LoopException\ is introduced to handle cases where this limit is exceeded, providing the original query context for debugging. This enables features like caching, rate limiting, or logging to be applied transparently to any provider.
src/Plugin · high confidence
Introduce new Dumper component for serializing geolocation data
This change introduces the \src/Common/Dumper\ component, providing a set of classes to serialize \Geocoder\\Location\ objects into various formats. It defines a \Dumper\ interface and abstract base classes (\AbstractDumper\, \AbstractArrayDumper\) to standardize the implementation. Concrete dumpers are added for GeoJSON, GPX, KML, WKT, WKB, and raw array output, allowing users to convert geocoding results into standard geospatial formats or structured data.
src/Common/Dumper · high confidence
New Address model and builder components
The \src/Common/Model\ directory now includes a new \Address\ class that implements the \Location\ interface, featuring a constructor that requires a \providedBy\ identifier and an \AdminLevelCollection\, along with getters for coordinates, bounds, street details, locality, postal code, sub-locality, country, and timezone. A corresponding \AddressBuilder\ class has been added to facilitate the construction of \Address\ instances via a fluent API, handling the creation of \Country\ and \AdminLevelCollection\ objects. Supporting model classes \Coordinates\, \Bounds\, \Country\, \AdminLevel\, and \AdminLevelCollection\ are also introduced to represent geographic data structures, with \AdminLevelCollection\ enforcing a maximum depth of 5 administrative levels and preventing duplicate level definitions.
src/Common/Model · high confidence
New Pelias geocoder provider
Added a new Pelias provider that enables geocoding and reverse geocoding against a Pelias API instance. The provider accepts a PSR-18 HTTP client and the API root URL, supports query parameters for layers and country boundaries, and returns detailed address results including id, layer, source, name, confidence, and accuracy fields via the new PeliasAddress model.
src/Provider/Pelias · high confidence
New StringFormatter for address template rendering
A new StringFormatter class has been added to the Geocoder package, allowing users to transform Location objects into formatted strings using a template-based approach. The formatter supports placeholders for street number, street name, locality, postal code, sub-locality, country, country code, timezone, and administrative levels. It handles null values gracefully and ensures country codes are uppercase, providing a consistent way to generate human-readable addresses from geocoding results.
src/Common/Formatter · high confidence
New model classes for Google Places API data
Added new model classes (GooglePlace, OpeningHours, Photo, PlusCode) to represent structured data from the Google Places API, enabling access to place details such as opening hours, photos, and Plus Codes.
src/Provider/GoogleMapsPlaces/Model · high confidence
New plugin system with Bounds, Cache, Limit, Locale, Logger, and QueryData plugins
This location introduces a new extensible plugin architecture for the Geocoder library, replacing the previous provider-centric design with a chainable middleware pattern. The diff adds six new plugin classes: BoundsPlugin (adds geographic bounds to queries), CachePlugin (caches query results with configurable lifetime and precision), LimitPlugin (enforces result limits), LocalePlugin (sets query locale), LoggerPlugin (logs query duration and results/failures), and QueryDataPlugin (injects arbitrary data into queries). These plugins allow users to compose geocoding behavior by wrapping providers, enabling features like caching, logging, and query modification without modifying individual provider implementations.
src/Plugin/Plugin · high confidence
Nominatim provider introduces NominatimAddress model with extended location details
The Nominatim provider now exposes a dedicated NominatimAddress model that extends the base Address class, providing access to additional OpenStreetMap-specific data. Users can now retrieve the OSM type and ID, the display name, category, attribution, and specific administrative subdivisions such as neighbourhoods and quarters. The model also supports arbitrary extra tags via a tags property and includes deprecated aliases for backward compatibility with older class/category getters.
src/Provider/Nominatim/Model · high confidence
OpenCage provider now exposes confidence and additional location annotations
The OpenCage provider now returns richer address data by introducing the OpenCageAddress model, which exposes the API's confidence score alongside MGRS, Maidenhead, geohash, and what3words annotations. Users can now access these specific fields on the returned address objects to better assess result quality or utilize alternative coordinate systems.
src/Provider/OpenCage · high confidence
Repository initialization and configuration scaffolding
The repository is initialized with essential configuration files including .editorconfig, .gitattributes, .gitignore, and .php-cs-fixer.dist.php to enforce coding standards and manage version control. A comprehensive CHANGELOG.md is added, documenting the project's history from version 1.1.0 through 5.0.0, highlighting major architectural shifts such as the migration to PSR-18, the introduction of query objects, and the removal of support for older PHP versions. The README.md is rewritten to reflect the current 4.x documentation, providing installation instructions for providers and HTTP clients, and listing available geocoding providers. Additionally, phpunit.xml.dist is updated to use the vendor autoload, configure code coverage, and define environment variables for API keys, while phpstan.neon and phpstan-baseline.neon are added to enable static analysis at Level 6.
(repo-wide) · high confidence
Yandex provider now exposes location precision, name, and kind
The Yandex provider's result model now includes three new fields—precision, name, and kind—accessible via getter and immutable builder methods. Users can now inspect the specific type of location returned (kind), its human-readable name, and the precision level of the geocoding result, providing more granular context for Yandex-based address lookups.
src/Provider/Yandex/Model · high confidence
Yandex provider released as a standalone package
The Yandex geocoder provider is now available as a separate package (geocoder-php/yandex-provider) rather than part of the main Geocoder monolith. This standalone version requires an API key for authentication, supports PHP 8.1, and has migrated from the PHP-HTTP client to a PSR-18 compatible client. It also introduces support for the Yandex 'kind' parameter in reverse geocoding results and uses a dedicated YandexAddress model for returned data.
src/Provider/MaxMind, src/Provider/Yandex · high confidence
Removals
Mapzen provider deprecated and marked as abandoned
The Mapzen geocoder provider is now deprecated and marked as abandoned because Mapzen shut down its APIs on February 1, 2018. The provider class remains in the codebase but is flagged as deprecated, and the CHANGELOG explicitly notes this as the final release (4.0.1) with support dropped for PHP versions below 7.2. Users should migrate to alternative providers listed in the main repository.
src/Provider/Mapzen · high confidence
Removed IpInfoDb and Yahoo geocoding providers
The IpInfoDbProvider and YahooProvider classes have been removed from the library. Users relying on these specific geocoding services will no longer be able to resolve addresses through them and must migrate to alternative providers supported by the package.
src/Geocoder/Provider · high confidence
Removed legacy Geocoder class and GeocoderInterface
The legacy \Geocoder\ class and the \GeocoderInterface\ have been removed from the \src/Geocoder\ directory. This eliminates the previous API that relied on mutable state (storing coordinates, city, etc. as properties) and a single-provider model, requiring users to adopt the newer provider-based architecture.
src/Geocoder · high confidence
Architecture
Geocoder interface and common classes moved to src/Common
The core Geocoder interface and supporting classes (including ProviderAggregator, StatefulGeocoder, TimedGeocoder, Location, Collection, and Assert) have been relocated from the main src/Geocoder directory to src/Common. This change establishes a shared library structure where common interfaces and utilities are separated from specific provider implementations, allowing multiple providers to depend on this common base. The Geocoder interface now extends Provider and defines standard geocoding methods, while the new Assert class provides strict validation for coordinates and values.
src/Common · high confidence
MapQuest provider is extracted into a standalone package
The MapQuest geocoding provider has been separated from the main Geocoder monorepo into its own dedicated repository (geocoder-php/mapquest-provider). This change includes the provider implementation, a dedicated CHANGELOG, and a README with usage examples, allowing users to install and maintain the MapQuest integration independently via \composer require geocoder-php/mapquest-provider\.
src/Provider/MapQuest · high confidence
Behavioural changes
ArcGISOnline provider now uses PSR-18 HTTP client
The ArcGISOnline provider has migrated from the PHP-HTTP (HTTPlug) client interface to the PSR-18 \ClientInterface\. This change updates the provider's dependency injection to accept a PSR-18 compatible HTTP client, aligning it with modern PHP HTTP standards and simplifying integration for users who already utilize PSR-18 clients.
src/Provider/ArcGISOnline · high confidence
Bing Maps provider now requires a PSR-18 HTTP client
The Bing Maps provider has migrated from the legacy PHP-HTTP client interface to the standard PSR-18 \ClientInterface\. This change updates the provider's constructor to accept a PSR-18 compliant HTTP client, ensuring compatibility with modern HTTP libraries and simplifying integration for users upgrading to PHP Geocoder 5.
src/Provider/BingMaps · high confidence
Chain provider now supports configurable log levels for geocoding errors
The Chain provider now allows users to configure the PSR-3 log levels used when logging errors from individual providers during geocoding and reverse geocoding operations. Previously, errors were logged at a fixed level; now, users can set distinct log levels for forward geocoding queries (via \setGeocodeQueryLogLevel\) and reverse geocoding queries (via \setReverseQueryLogLevel\), enabling more granular control over error reporting and log verbosity.
src/Provider/Chain · high confidence
FreeGeoIp provider now uses freegeoip.app and allows custom base URLs
The FreeGeoIp provider has migrated its default endpoint from the shut-down freegeoip.net to freegeoip.app. Additionally, the provider constructor now accepts an optional $baseUrl argument, allowing users to configure a custom endpoint (such as a self-hosted instance) instead of relying on the default hosted service.
src/Provider/FreeGeoIp · high confidence
GeoIPs provider marked as deprecated and abandoned
The GeoIPs provider is now deprecated because the GeoIPs service has shut down. Users will see deprecation notices when using the provider, and the README explicitly states that the package is abandoned, directing users to alternative IP geolocation providers.
src/Provider/GeoIPs · high confidence
GeoPlugin provider returns empty collection for unrecognized IPs
The GeoPlugin provider now returns an empty AddressCollection when the geocoding service returns a response with no location data (e.g., empty region, city, country, and zero coordinates), instead of returning a result with null fields. This change ensures that queries for unrecognized or unlocatable IP addresses yield no results, aligning with the behavior described in the 4.0.1 changelog entry for "Better check if we got a empty result."
src/Provider/GeoPlugin · high confidence
Geoip provider extracted to standalone package
The Geoip provider has been separated from the main Geocoder repository into its own standalone package. This change includes the provider implementation (Geoip.php), configuration files (.gitattributes, .gitignore, phpunit.xml.dist), and documentation (Readme.md, CHANGELOG.md, LICENSE). The provider relies on the deprecated PHP GeoIP extension and only supports IPv4 addresses for geocoding queries; reverse geocoding is not supported. Users should note that this provider is deprecated in favor of the Geoip2 provider.
src/Provider/Geoip · high confidence
Google Maps provider now uses PSR-18 HTTP client
The Google Maps provider has migrated from the legacy PHP-HTTP client to a PSR-18 HTTP client. This change updates the underlying HTTP adapter interface, meaning users must now provide a PSR-18 compatible HTTP client (such as \Http\\Discovery\\Psr18Client\) when instantiating the provider, rather than the previous PHP-HTTP adapter.
src/Provider/GoogleMaps · high confidence
HTTP provider now requires a PSR-18 client instead of the legacy PHP-HTTP client
The AbstractHttpProvider has been updated to depend on a PSR-18 HTTP client (Psr\\Http\\Client\\ClientInterface) rather than the older PHP-HTTP client interface. This change aligns the provider with modern HTTP standards, simplifying integration for users who already utilize PSR-18 compliant clients, while maintaining backward compatibility for factory creation via PSR-17 or the deprecated MessageFactory.
src/Http/Provider · high confidence
HostIp provider now returns empty collections for unknown or private addresses
The HostIp provider has been updated to return an empty address collection instead of a result with placeholder data when an IP address is not found or is identified as private. This change, implemented in the AbstractHostIp base class, ensures that callers receive a clean empty collection for 'Unknown City/Country' or 'Private Address' responses from the HostIp API, rather than addresses containing generic placeholder strings.
src/Provider/HostIp · high confidence
Introduce a unified exception hierarchy under the Geocoder\\Exception namespace
The library now provides a dedicated set of exception classes in the Geocoder\\Exception namespace, replacing scattered or test-based implementations. A new Exception interface extends PHP's Throwable interface, serving as the base for specific exceptions such as CollectionIsEmpty, ExtensionNotLoaded, InvalidCredentials, InvalidServerResponse, LogicException, OutOfBounds, ProviderNotRegistered, QuotaExceeded, UnsupportedOperation, and FunctionNotFound. These exceptions offer clearer error signaling for common geocoder scenarios (e.g., empty collections, missing extensions, invalid credentials, quota limits, unsupported operations, and missing functions), with some providing static factory methods for contextual messages. This change improves error handling consistency and makes it easier for users to catch and react to specific geocoder-related failures.
src/Common/Exception · high confidence
Introduce immutable Query objects with builder methods
The query layer now uses immutable value objects for geocoding requests. New classes GeocodeQuery and ReverseQuery implement the Query interface, replacing previous mutable patterns. Users can now construct queries via static create() or fromCoordinates() methods and configure them using fluent, immutable builder methods such as withText, withCoordinates, withBounds, withLocale, withLimit, and withData. Each method returns a new instance, ensuring thread safety and predictable state. The classes also implement \_\_toString for logging and unique key generation.
src/Common/Query · high confidence
Nominatim provider now uses JSON (v2) format and PSR-18 client
The Nominatim provider has been updated to communicate with the Nominatim API using the JSON (v2) response format instead of the previous XML format, and it now relies on a PSR-18 HTTP client rather than the older PHP-HTTP client. This change improves compatibility with modern PHP standards and ensures correct parsing of address details, extra tags, and query parameters like country codes and viewboxes. Users must ensure their HTTP client implementation adheres to PSR-18 and provide a User-Agent string as required by the Nominatim Usage Policy.
src/Provider/Nominatim · high confidence
PhotonAddress model exposes OSM details and administrative subdivisions
The Photon provider's address model now exposes OpenStreetMap-specific identifiers (OSM ID, type, and tag) alongside administrative subdivisions including state, county, and district. Additionally, the locality getter has been updated to fall back to the address name when the result type is 'city', ensuring more accurate city-level locality data for users.
src/Provider/Photon/Model · high confidence
Provider interface refactored to use query objects and strict typing
The provider contract has been updated to enforce strict types and a more structured API. The interface (renamed from ProviderInterface to Provider) now requires providers to implement geocodeQuery and reverseQuery methods that accept specific GeocodeQuery and ReverseQuery objects, replacing the previous getData method. Additionally, the interface and the new AbstractProvider base class include strict type declarations, and the abstract provider now provides a helper for handling localhost special cases.
src/Common/Provider · high confidence
Removed custom PSR-0 autoloader in favor of Composer
The custom PSR-0 autoloader previously defined in src/autoload.php has been removed. The application now relies on Composer for dependency management and class autoloading, simplifying the bootstrap process and aligning with modern PHP standards.
src · high confidence
TomTom provider now includes postal codes in reverse geocoding results
The TomTom provider has been updated to extract and return the postal code field when performing reverse geocoding queries. Previously, reverse lookups only returned location coordinates, street details, and country information; users can now access the postal code in the resulting address objects, aligning reverse geocoding capabilities with those of forward geocoding.
src/Provider/TomTom · high confidence
Test coverage
Add tests for the OpenRouteService provider; Added ArcGIS Online provider tests and cached responses; Added cached API responses for Google Maps provider tests; Added cached API responses for IP2Location provider tests; Added cached API responses for OpenCage geocoder tests; Added cached GeoPlugin test responses; Added test fixtures for Algolia Places provider; Added tests for AbstractHttpProvider's HTTP client getter; Added tests for Azure Maps provider; Added tests for HostIp and HostIpXml providers; Added tests for Nominatim provider features and edge cases; Added tests for Query \_\_toString serialization; Added tests for StringFormatter address formatting; Added tests for address dumper components; Added tests for the Ipstack provider; Added tests for the Mapzen geocoding provider; Added tests for the Yandex geocoder provider; Added unit and integration tests for the BingMaps provider; Added unit and integration tests for the MaxMind Binary provider; Added unit tests for Address and AddressCollection models; Added unit tests for Geocoder Plugin components; Added unit tests for ProviderAggregator and TimedGeocoder; Added unit tests for the Chain provider; Added unit tests for the ProviderCache component; Initial test suite for the Photon geocoding provider; Removed legacy Geocoder unit tests; Removed legacy test bootstrap file; Removed legacy test suite for AbstractProvider, IpInfoDb, and Yahoo providers; Updated BingMaps test fixtures to remove trailing newlines; Updated Geonames test fixtures for API response changes; Updated TomTom provider test fixtures.
Dependencies
Update provider dependencies to support willdurand/geocoder 4.0 and 5.0
All geocoder provider packages have been updated to require willdurand/geocoder ^4.0\|^5.0, ensuring compatibility with the latest major versions of the core geocoder library. Common HTTP providers also now depend on geocoder-php/common-http ^4.0, and specific providers like GeoIP2 and GeoPlugin have been updated to support geoip2/geoip2 ^2.0\|^3.0.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 73.
Lenses
- Code Health 94
- Architecture 99
- Maturity 59
- Readiness 88
- Security 81
Changes since last survey
- 300 commits — 260 feature/other, 40 fixes
By area
- src/Provider — 213 commits
- (root) — 34 commits
- .github/workflows — 22 commits
- src/Common — 16 commits
- src/Plugin — 6 commits
- src/Http — 5 commits
- .github/actions — 2 commits
- .github/dependabot.yml — 2 commits
Notable commits
- fix: Apply PHP CS Fixer fixes
- fix: Apply PHPCSFixer fixes (#1275)
- fix: Apply StyleCI fix
- fix: Apply fixes from StyleCI (#1033)
- fix: Apply fixes from StyleCI (#1060)
- fix: Apply fixes from StyleCI (#1085)
- fix: Apply fixes from StyleCI (#1097)
- fix: Apply fixes from StyleCI (#969)
- fix: Feature/fix php cs (#1236)
- fix: Fix IP2Location test (#1149)
- fix: Fix Mapbox Query build when there is Bound (#906)
- fix: Fix Nominatim provider when "missing" osm_id and osm_type (#997)
- fix: Fix PHPStan issues (#1208)
- fix: Fix Reverse Geocode failure - Here maps - Undefined index: LocationId (#1190)
- fix: Fix StyleCI (#1084)
- fix: Fix building ProviderNotRegistered exception message (#1020)
- fix: Fix code example (#1016)
- fix: Fix doc (#1024)
- fix: Fix tests IpInfo (#899)
- fix: Revert "Revert subtree action back to checkout v3 (#1211)"
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
geocoder-php/Geocoder was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 432f5bda7f7c41c4c421cb62adb3d0b4218da6c1 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.