laravel-geoip: the Laravel package that lost its free MaxMind tier
Determine the geographical location of website visitors based on their IP addresses.
At a glance
- What is it?
- A small PHP package that resolves an IP address to a place and a currency, and whose most important README section explains a breaking change forced by MaxMind.
- Who is it for?
- The interesting thing about laravel-geoip is not the API, which is a couple of static calls, but the way it documents a scar. The package used to ship with a service configured out of the box, and when MaxMind withdrew the free tier that default broke, so version 3.0.8 removed it and the README now leads with an apology and a link to the publishing guide.
- Can I use it commercially?
- Yes. BSD-2-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Activity is slowing. The repository last received commits 6 months ago.
- What is it written in?
- Mainly PHP, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Star history
- Torann/laravel-geoip2,238 ★ · +0
| Repository | 2026-10-07 | 2026-10-23 |
|---|---|---|
| Torann/laravel-geoip | 2.2k | 2.2k |
0 Stars in the last 16 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
What the package does is narrow, and that is the point
The README's first substantive line says it all: determine the geographical location and currency of website visitors based on their IP addresses. Two outputs, one input. A Laravel application that wants to show a local currency or default a country selector needs exactly that and nothing more, and the package is a thin layer over a GeoIP database rather than a service in itself.
The tree confirms the scope. There is `src/` for the code, `config/` for the publishable configuration, `resources/` for whatever ships alongside it, `tests/`, and a conventional set of files at the root: `composer.json`, `phpunit.xml`, `phpcs.xml`, `phpstan.neon`, `.travis.yml`, `.gitattributes` and `.gitignore`. That is a well-formed PHP package with modern static analysis configured, and the only thing that dates it is the Travis CI file, which suggests the hosted CI setup has not been revisited in years.
The scale on GitHub is 2238 stars with 390 forks, BSD-2-Clause licensed, described as determining the geographical location of website visitors based on their IP addresses. The repository is not archived and was last pushed on 2026-04-10.
What the README does not contain is any code. There is no usage snippet, no facade name, no method call. That is the honest boundary of the documentation: to use the package you have to go to the linked docs.
The MaxMind removal is the story
The most valuable section in this README is the one about version 3.0.8 and a possible breaking change. Out of the box the system no longer comes with a service pre-configured, which will cause an error for those who did not previously publish the configuration file. The fix is to follow the getting started guide on how to publish the config and set up a service.
The reason is stated plainly and without embellishment: MaxMind made the author remove the free service that was the default. If the config file was published before that change, you should not be affected.
This is worth understanding as a category of breakage rather than a one-off. GeoIP packages are unusually exposed to provider policy because the provider, not the package, controls what a free tier looks like. MaxMind moved its free offering behind an account and licence key, and every wrapper that shipped a zero-configuration default broke at the same moment. The mitigation the package offers is honest and minimal: publish the config, supply your own key, move on.
There is also an upgrade guide linked separately from the getting started guide, which is the right shape for a package with this many years of releases behind it.
Where the documentation actually lives
Three destinations appear in the README and they are not the same thing. The Packagist page is linked twice, once as a badge for the latest stable version and once as total downloads, and once more in the bullet list under the heading. The GitHub page is linked alongside it. Upgrade guides point at lyften.com with a doc path, official documentation points at the same site, and the getting started guide is linked as lyften.com with a doc path as well.
The homepage field in the repository metadata also points at a project page on that same domain. So for a package with 2238 stars, essentially all usage documentation lives off GitHub, on a site that is separate from the repository and separate from Packagist.
That has a practical consequence. The GitHub repository tells you what happened and why; the docs site tells you how to call the thing. If you are evaluating whether the package is still current, the README will not tell you, because it has not been updated to describe the API. The signals you have instead are the release dates and the issue list.
Project signals, and a currency caveat nobody mentions
Three releases are recorded: 2024-07-23, 2025-02-25, and 2026-04-10. The last of those matches the repository's last push exactly, which suggests the most recent activity was a release rather than new work on the default branch. There are 81 open issues against 390 forks, which is a high ratio and consistent with a package that is widely depended upon and thinly resourced.
The README's contribution section names six people who have contributed since the project's inception, including Dwight Watson, who is recognizable from the PHP package community, and it links the package on Patreon and PayPal for donations. That the funding links are the most prominent non-documentation element in the README tells you something about where the maintainer would like support to go.
On substance, there is one thing the README asserts without qualifying, and a reader should treat it carefully: that the package determines both the geographical location and the currency of a visitor. Location from an IP is an estimate, with known failure modes on mobile networks, carrier-grade NAT, and privacy-focused relays. Currency derived from that location inherits every one of those errors. Fine for defaulting a country selector or choosing a locale. Not fine for pricing, tax calculation, or anything where a wrong answer has a cost.
Editorial conclusion
The interesting thing about laravel-geoip is not the API, which is a couple of static calls, but the way it documents a scar. The package used to ship with a service configured out of the box, and when MaxMind withdrew the free tier that default broke, so version 3.0.8 removed it and the README now leads with an apology and a link to the publishing guide. If you are upgrading, that is the thing to do first: publish the config, then choose a provider and register for a key. The repository is small and conventional, with `config/`, `src/`, `resources/`, `tests/` and both phpcs and phpstan configuration, BSD-2-Clause licensed, 2238 stars and 390 forks. The last push was 2026-04-10 and 81 issues are open, so read the current issue list before assuming a provider integration still matches what the README describes.
Frequently asked questions
Why does laravel-geoip throw an error after upgrading?
Because version 3.0.8 removed the pre-configured service that used to ship out of the box, after MaxMind made the maintainer remove the free service that had been the default. Applications that had already published the config file are unaffected. If yours did not, publish the config and set up a provider service following the getting started guide.
Where is the documentation for laravel-geoip?
Off the repository. The README links official documentation and upgrade guides on lyften.com, plus the getting started guide for publishing the config and setting up a service. The repository itself contains no usage snippet, so the docs site is where the API is described. Packagist carries the install metadata.
Can I rely on IP geolocation to pick the right currency?
Treat it as a suggestion rather than an answer. IP-based location is an estimate that fails on mobile networks, carrier-grade NAT and privacy proxies, and a currency derived from that estimate inherits the same errors. It is reasonable for defaulting a country selector or a display locale, and a poor basis for pricing or tax decisions.
Is laravel-geoip still maintained?
It is active but quiet. Three releases are on record, the most recent on 2026-04-10, which is also the date of the last push to the repository, and 81 issues are open. The repository is not archived and the licence is BSD-2-Clause, so nothing suggests abandonment, but the README has not been updated to describe the API since the MaxMind change.
Does laravel-geoip need a MaxMind account now?
You need to configure a provider yourself, and if you choose MaxMind that means registering for an account and licence key. The package no longer ships a default service, which is the direct consequence of MaxMind withdrawing the free tier that the package had been configured to use out of the box.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/torann-laravel-geoip)Star history chart for your README
[](https://hysenlabs.com/projects/torann-laravel-geoip)Was this useful?