Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Geonames Bundle Laravel Package

giosh94mhz/geonames-bundle

Symfony bundle that integrates the GeoNames geographical database into your app, providing services and console commands to import and query countries, regions, and cities. Simplifies location lookups and geodata management in PHP projects.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for geographic reference data. This bundle is concrete evidence for the "own your data" path: import the free GeoNames dump into your own database (countries, admin divisions, cities, timezones, coordinates, population) instead of paying per-request for a geocoding API. That fork in the road — self-hosted reference data vs. metered API — is the core product decision this package informs. Use it to make the call, not to ship code.
  • Feature scoping for location-aware UX. It anchors discussion of real, near-term features: city/region autocomplete in onboarding or checkout, store/dealer locators, timezone resolution from a stored address, shipping-zone and tax-jurisdiction mapping, and coarse geo-targeting for content or pricing. The bundle's schema shows what each of those requires.
  • Cost modeling at scale. If your roadmap implies high-volume lookups (every signup, every keystroke in an address form), self-hosted toponyms remove per-call fees and rate limits. The bundle's import-command pattern is proof that a small Laravel team can build and refresh this data layer without a dedicated geo team.
  • Data quality and licensing posture. GeoNames is free and CC-BY (attribution required in UI and docs), but user-contributed and uneven: inconsistent admin hierarchies, patchy non-Latin coverage, stale population figures. That is a product trade-off to record explicitly — not a neutral technical detail — because it drives accuracy expectations and support burden.
  • Roadmap framing for localization. A country/region/city taxonomy is a prerequisite for i18n work (currency, locale defaults, address formats). This package is a reference for what that schema looks like before you commit engineering time to it.
  • A useful "no" decision. The strongest PM outcome here may be to formally close the self-hosted track and route location features to an external geocoding API. Documenting that decision (and the volume threshold that would reopen it) is itself valuable product work.

When to Consider This Package

Consider it — as prior art and a forkable starting point for a port, never as a Laravel dependency — when:

  • You are weighing self-hosted vs. API-backed geo data and want a worked example of the import schema and pipeline before committing.
  • You need bulk, offline toponym data (lookup, not live geocoding) and want a country/region/city/timezone schema you do not have to design from scratch — the entity mappings and per-dataset importer structure are the genuinely reusable assets.
  • You plan to port, not depend: the MIT license makes copying schema and import logic legally clean, and a Laravel team would reimplement as migrations, Eloquent models, and an Artisan --dataset= / --country= importer.
  • You are sizing the effort for a first proof: importing a single country and rendering a dependent country → region → city dropdown is a cheap, timeboxed spike that validates the whole approach.

Look elsewhere — clearly — when:

  • You are on Laravel (which you are). This is a Symfony 2 bundle with tight Doctrine coupling: no service provider, no facade, no config bridge. It will not install or run without substantial rework, and the code overlap with Laravel is near zero.
  • Framework currency matters. Symfony 2 reached end-of-life in 2018; with 6 stars, 0 dependents, and no maintenance signal, there is no support path and no security-response expectation. Do not put this in a production dependency graph.
  • You need accuracy guarantees or freshness. Commercial geocoders (Google, Mapbox, HERE) provide SLAs, rooftop precision, address-level parsing, and updates. GeoNames is coarse and user-contributed.
  • You need reverse geocoding, address validation, or routing. All out of scope for this dataset.
  • Lookup volume is low. At a few thousand lookups a month, a free-tier API is cheaper than owning an import pipeline, index tuning, and a refresh job. Most products are here.

Recommended alternative: use the GeoNames raw dump (or its API within free limits) directly, model only the tables your features touch, and borrow this bundle's schema and importer shape. Put a GeoRepository interface in front of whatever you choose so a later swap to an API provider is config, not a refactor.

How to Pitch It (Stakeholders)

For executives: We evaluated a free, open-source option for geographic data — cities, regions, timezones, coordinates. The package itself is a legacy, unmaintained Symfony 2 component and should not be a dependency. But it validates that self-hosting free GeoNames data is feasible, which is a real cost lever if location lookups become high-volume: no per-request API fees, no rate limits, at the price of owning a data-refresh job and accepting coarser accuracy than a commercial geocoder. Recommendation: no adoption now. Revisit self-hosting only if location features land on the roadmap and lookup volume exceeds free API tiers; keep the CC-BY attribution requirement in the UI budget.

For engineering: Treat this as reference material. The valuable assets are the Doctrine entity schema for toponyms and the one-importer-per-Geonames-dump command pattern. It is Symfony 2 + Doctrine, EOL, and effectively unmaintained (6 stars, 0 dependents), so forking is the only realistic use and installing it is a non-starter. In Laravel we would build a slim schema ourselves (countries, admin1/admin2, cities, timezones, keyed on geonameid), plus one Artisan importer with --dataset and --country options running as an offline batch job with idempotent upserts. Guard against the known failure modes: N+1 queries on recursive hierarchy lookups (index country code, admin levels, population; denormalize the hierarchy or use a materialized path), partial imports that look successful but leave hierarchy gaps, and silent drift if the GeoNames dump format changes — cover the importer with tests. Budget roughly one engineer-week to port schema, importer, and refresh job for a subset; full-dataset operationalization is a separate, larger commitment. Start with one country to prove the pipeline, and put a GeoRepository interface in front so an API-backed provider can replace storage later without a rewrite.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
cgv/localized-resource