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

Laravel World Laravel Package

altwaireb/laravel-world

Laravel World provides a complete, ready-to-use database of countries, states, cities, currencies, languages, timezones, and more. It ships with migrations, seeders, models, caching, and multilingual support, so you can add geo data to any Laravel app in minutes.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • This remains a reference-data provisioning package, not a geo/address service. It ships country/state/city datasets as migrations, seeders, Eloquent models, and relations/traits for querying them. It fits applications that need a canonical, locally-owned list of places: registration and checkout forms, shipping/billing address capture, tax-jurisdiction pickers, territory/segmentation dropdowns.
  • It is a poor fit if the product needs postal codes, lat/long, timezones, geocoding, address validation, or administrative-boundary geometry — adjacent problems this package does not claim to solve. It is also a poor fit if geography is a core domain rather than supporting metadata, because the freshness/update model (re-seed) is not designed for high-velocity change.
  • The architectural trade is unchanged and deliberate: local tables give low latency, no per-request cost, and offline/test determinism, at the cost of freshness, DB footprint, and ownership of data quality. v2.0.0 improves how the data is loaded, not what is stored — the persistent footprint and index cost are unaffected.

Integration feasibility

  • Still high for a standard Laravel app: composer require, service-provider auto-discovery, publish config and migrations, migrate, run the provided seeder/console command. The wiring effort is measured in hours.
  • v2.0.0 materially de-risks the seeding step: the seeder now reads its JSON source via halaxa/json-machine streaming rather than loading documents whole, which removes the peak-memory cliff that previously made full city seeding fail on constrained CI runners and small production instances. Expect peak memory to drop substantially; do not assume wall-clock seeding time improves — row inserts and index builds are the same work, and streaming can be marginally slower per row. The "measure it in a spike" instruction stands, but now has a different expected profile (flat memory, similar duration).
  • Two new integration considerations: a new transitive dependency (halaxa/json-machine) enters the supply chain and must clear the same license/abandonment checks as the package itself, and the major version bump means existing v1.x installs face an upgrade decision rather than a patch bump.

Technical risk

  • Bus factor / adoption: ~102 stars and a single-maintainer profile remains the dominant risk — no SLA, no vendor escalation. Two releases in roughly seven weeks (v1.2.0 → v2.0.0) is a positive signal on cadence and on the maintainer tracking new Laravel majors, but it is also evidence of churn on a dependency we cannot escalate to. Treat this as a "we may own the fork" dependency.
  • Major-version upgrade risk: the release notes describe features and compatibility only — they say nothing about schema changes, table/column renames, or primary-key stability. A major bump is precisely the release type where those changes hide. Any team already on v1.x with FKs pointing at countries/states/cities must treat the upgrade as a potentially breaking data migration until proven otherwise.
  • Supported-version floor moved up: Laravel 9 is no longer in the supported set (10, 11, 12, 13). Any application still on Laravel 9 is frozen on v1.x and inherits the memory behavior v2.0.0 fixes.
  • Laravel 13 support is floor-gated: CI starts at Laravel 13.38.0, so earlier 13.x releases are untested by upstream. Applications pinning a lower 13.x patch line are outside the tested matrix.
  • New dependency surface: halaxa/json-machine is a well-known streaming JSON parser, but it adds a second maintained-by-someone-else component to the risk register and pins a version constraint the package controls, not us.
  • Data provenance and licensing: the MIT license covers the code, not necessarily the underlying dataset. If the data derives from GeoNames or similar, attribution obligations can propagate into the shipped product. Confirm before legal sign-off — the new dependency does not change this, and json-machine's own license should be confirmed too.
  • Schema collision: generic table names (countries, states, cities) can conflict with existing application tables. Needs a pre-publish audit and config-driven renaming.
  • ID stability across versions: if downstream records FK to these rows, a re-seed that renumbers IDs silently corrupts references. The incremental-update story must be verified — and re-verified specifically for the v1→v2 boundary.
  • Volume and performance: full city seeding (100k–150k+ rows) remains slow in CI and in production deploys; index creation on a large table can lock. Migrations are not trivially reversible in a rollback.
  • Framework coupling — partially resolved: the recurring "lags new Laravel majors" tax is, for now, addressed. Laravel 13 support arrived within a normal window and 10/11/12 were preserved. Downgrade this from a standing risk to a watch item; the next major is the test.
  • Localization completeness varies by country and is rarely uniform.

Key questions

  1. What is the upstream data source, its license, and the required attribution?
  2. Are primary keys stable across releases, and is there a documented upgrade path versus full re-seed?
  3. New for v2.0.0: does v1.x → v2.0.0 involve any schema, table-name, column, or ID changes? Are the migrations identical between the two majors?
  4. New for v2.0.0: is streaming the default seeding path or opt-in via config? Does it impose requirements on file paths, seekability, or memory limits we must accommodate in containerized deploys?
  5. New for v2.0.0: what version constraint does the package place on halaxa/json-machine, and what is the fallback if that dependency stalls or is abandoned?
  6. Field coverage: ISO codes, phone codes, currencies, timezones, coordinates, postal codes, translations?
  7. Coverage depth per country — how many countries actually have state-level data, and how complete is city coverage?
  8. Configurability: table prefix/names, per-table enable/disable, separate DB connection, chunked seeding command?
  9. CI matrix: nine jobs across Laravel 10–13 is good coverage for a package of this size — but which PHP and DB engines are in those nine, and is every supported combination represented?
  10. Is there any stated support commitment, or is this effectively community-only?

Integration Approach

Stack fit

  • Updated: Laravel 10–13 / PHP 8.x, MySQL, Postgres, SQLite. Laravel 9 is no longer supported as of v2.0.0 — applications on 9 must pin v1.x. If the platform is not Laravel, this package is the wrong tool; the value is the Eloquent models and migration/seed automation, not the raw data. For non-Laravel stacks, ingest the dataset directly instead.
  • Verify DB-engine specifics: case-insensitive city search on Postgres, collation on MySQL, and index behavior on SQLite if used for local dev.
  • Laravel 13 applications should pin at or above the CI-tested floor (13.38.0) or accept that they are outside upstream's verified matrix.

Migration path

  1. Spike branch: install, publish, migrate, seed in an isolated environment. Measure wall-clock seed time, peak memory, row counts, and on-disk size. For v2.0.0 the memory number is the headline result — it is the specific claim the release makes, and it is the number that determines whether seeding can run in a standard CI runner rather than a dedicated job.
  2. Ownership decision: host the reference data on a dedicated connection/database rather than the primary application schema. This makes rebuilds and re-seeds non-disruptive and contains blast radius — and it is what makes a future major-version re-seed cheap.
  3. Collision audit: inventory existing tables and FKs before publishing migrations; rename via config if needed.
  4. Backfill: map existing free-text country/state/city values to new IDs in batches, with an exceptions report for unmatched rows. Keep the FK nullable during transition and run dual-read before flipping.
  5. Cutover: flip reads to the package models, remove the legacy lookup path, and lock the version.
  6. v1.x → v2.0.0 upgrade path (new): diff the published migrations between majors first. If they are identical, the upgrade is a composer bump plus a seeder re-run and can ride a normal release. If they differ, treat it as a re-seed: run it against a dedicated connection, capture the ID diff, reconcile dependent records, and rehearse rollback on staging. Do not upgrade and re-seed inline in a deploy.

Compatibility

  • Pin an exact version in composer.json and record the Laravel/PHP support matrix in the ADR — note explicitly that Laravel 9 requires v1.x and Laravel 13 requires ≥ 13.38.0. Test index creation against production-sized data before scheduling the migration, since large table DDL remains the most likely outage vector, and the streaming change does not affect it.

Sequencing

  1. Spike and data-quality validation (coverage, translations, field gaps), including peak-memory measurement under the new streaming path.
  2. Schema/ownership decision and collision audit.
  3. v1→v2 migration diff and dependency vetting (halaxa/json-machine: license, maintenance status, version constraint).
  4. Staging seed with timing and rollback rehearsal.
  5. Production seed in a maintenance window or via a background job, not inline in a deploy.
  6. Application integration (form endpoints, autocomplete, caching layer).
  7. Decommission legacy lookup tables.

Operational Impact

Maintenance

  • Code maintenance is low; data maintenance is the ongoing cost. Expect to re-seed periodically, validate diffs, and reconcile any dependent records. Treat the package as a vendored dependency: pinned version, upstream watch, and a credible "we can fork and maintain this" contingency. Assign a named internal owner.
  • Updated: watch cadence should be higher than a typical low-activity dependency. A major version landed within weeks of the prior release, so the team needs an explicit rule for when a major is adopted (post-spike, post-migration-diff) rather than a default "refresh composer." The dependency list to track is now two entries, not one.

Support

  • Community-only. There is no escalation path beyond upstream issues and PRs. Plan response SLAs on the assumption that the team, not the maintainer, resolves defects. Budget a small recurring allocation rather than assuming zero-touch.
  • Active maintenance partially offsets this: recent releases and a nine-job CI matrix raise confidence that upstream defects get attention. It does not constitute a commitment, and it does not cover the new streaming dependency.

Scaling

  • Workload is read-heavy and highly cacheable. Cache country/state lists at the application layer; avoid joining the full city table in hot paths; expose city lookup via indexed prefix search or a dedicated search service if autocomplete is user-facing.
  • Consider seeding only countries/states plus a targeted city subset if full global coverage is not a product requirement — this remains the single largest lever on DB size and seed time, and it is a bigger lever than streaming, which only addresses the loading step.
  • Updated: streaming meaningfully widens the range of environments that can perform a full seed — smaller CI runners, smaller production instances, lower memory ceilings. It does not change steady-state query performance, storage cost, or index size. Do not let the release note be read internally as "seeding is now cheap."

Failure modes

  • New: the streaming reader may have file-path, seekability, or packaging assumptions that behave differently in containerized or read-only-filesystem deploys — validate the seeder in the actual runtime image, not just locally.
  • New: a major-version upgrade applied without a migration diff producing silent FK corruption or a partial re-seed on the primary schema.
  • Seeder timeouts (still possible on wall-clock, even with reduced memory) or OOM in unusually constrained environments.
  • Migration lock or long DDL during index build on the city table.
  • Silent FK corruption if IDs change across versions.
  • Environment drift when seeding is manual rather than part of the deploy pipeline.
  • Localization gaps surfacing as blank or English-only labels in non-English locales.
  • License/attribution non-compliance if the dataset is redistributed without required notice; new dependency licensing goes unchecked.

Ramp-up

  • Roughly a day for a competent Laravel developer to reach a working integration. Production hardening — data validation, backfill, caching, deployment sequencing, rollback plan, and now a major-version upgrade rehearsal — is a one-to-two-week effort with TPM oversight. Low learning curve, moderate operational rigor: the package is easy to adopt and easy to under-operate.
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.
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core