geocoder-php/geoips-provider
Geocoder provider for the geoips.com service, letting you resolve IP addresses into geographic coordinates and location data through the Geocoder PHP library's provider interface. A lightweight way to add GeoIPs-backed IP geolocation lookups to your PHP application.
Architecture fit: The package is a Laravel wrapper around the GeoIPs geolocation API. Its core value proposition — IP-to-geolocation lookups — depends entirely on a third-party API that no longer exists. Release 4.2.0 is effectively an end-of-life notice: upstream provider GeoIPs has shut down its APIs and the package is officially abandoned. Any architectural fit is now moot; the integration surface (service provider bindings, facade, config-driven API credentials, HTTP client calls to GeoIPs endpoints) remains in the codebase but points at dead infrastructure. Do not design new systems around it.
Integration feasibility: Not feasible for new work. Existing installations will continue to load (autoloading, service provider registration, config publishing are unaffected), but any runtime call path that reaches out to GeoIPs will fail — likely with connection errors, timeouts, or HTTP 4xx/5xx responses depending on how the vendor shut down (DNS removal vs. explicit error responses). There is no drop-in replacement bundled in 4.2.0; the release is a documentation/metadata change signaling abandonment rather than a functional patch.
Technical risk: High and non-mitigable within the package. Risks include:
composer audit and dependency scanners will flag the package; consumers may need explicit allow-listing to keep installs green.Key questions for the owning team:
/cdn-cgi/trace headers, or edge geolocation) versus remove the capability entirely?Stack fit: Historically a reasonable fit for a Laravel app — conventional service provider + facade + config file, Composer-installable, no exotic runtime requirements. That fit is now historical. The package's only external dependency of consequence is the GeoIPs HTTP API, which is gone, so "fit" reduces to whether the surrounding Laravel conventions are worth preserving in a replacement.
Migration path: Recommended sequence:
grep for the facade alias, the service container binding, and the vendor namespace) and classify each as critical-path vs. cosmetic.composer.json and add a comment referencing the abandonment so nobody "helpfully" updates it. Do not adopt 4.2.0 for any reason other than the changelog note; there is no functional gain.GeoLocator) with a single lookup(string $ip): ?Location method and wrap existing calls behind it. This is the single highest-leverage step and can be done before choosing a replacement.geoip2/geoip2 reader, or the torann/geoip wrapper) avoid per-request network calls and third-party uptime dependency entirely; hosted options are cheaper to operate but reintroduce vendor risk.Compatibility: The package's Laravel/PHP version support is frozen at whatever 4.2.0 declares; it will not track future Laravel releases. Any Laravel upgrade planned in the next two cycles must treat this removal as a prerequisite, not a parallel workstream.
Sequencing: Do the interface abstraction first (low risk, unblocks everything), then provider selection, then cutover behind a feature flag with a dual-read or shadow-traffic period, then delete. Budget the removal as a hard checkpoint in the upgrade calendar.
Maintenance: Effectively zero ongoing maintenance is available — abandoned means no fixes, no security patches, no compatibility updates. The maintenance burden transfers entirely to the consuming team, and the only sensible maintenance strategy is deletion. Track it as a known tech-debt item with an owner and a target date rather than letting it linger.
Support: No upstream support channel. Internal engineers will be the only source of answers, and answers will increasingly be "we can't fix that." Document the abandonment in the repo (README note or ADR) so future maintainers aren't surprised.
Scaling: Irrelevant in the current state since the backend is down. Note that the prior model was per-request external HTTP, which carried latency and rate-limit coupling to a vendor; a local-database replacement actually improves scaling characteristics (no network hop, no quota, cacheable in-process). A hosted replacement preserves the old scaling profile and its risks.
Failure modes:
Ramp-up: Low for anyone familiar with Laravel package conventions — an engineer can read the call sites in an hour. The real ramp-up cost is domain knowledge: which product behaviors actually depend on geolocation, what accuracy and granularity they require, and what the compliance posture is around IP-derived location. That context usually lives with one or two people and should be captured before the replacement work starts, not during it.
Recommendation: Treat 4.2.0 as a formal end-of-life signal. Do not adopt. Open a removal ticket, introduce an internal geolocation interface, migrate to a supported provider (local database preferred), and delete the package before the next Laravel upgrade window.
How can I help you explore Laravel packages today?