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 Addressing Laravel Package

galahad/laravel-addressing

Laravel package for managing postal addresses: bundled country, state and city data plus address models and migrations you can attach to users or orders. Seed geographic records and store structured addresses without building the schema yourself.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit Unchanged by 4.0.0. glhd/laravel-addressing is a Laravel-first package (Composer, service provider, publishable config/migrations, Eloquent models). It is a natural fit only where the application is already an Eloquent-centric Laravel codebase. The likely value proposition — a reusable address model plus the polymorphic glue needed to attach addresses to arbitrary entities — maps well onto common domains (customers, billing/shipping, facilities, contacts). It is not a good fit for framework-agnostic services, event-driven services with non-relational storage, or any codebase that has already standardized on a vendor address-validation provider's schema, because the package would become a thin competing abstraction. Laravel 13 support does not change this calculus; it only widens the set of host applications for which the fit applies.

Integration feasibility Mechanically low-effort: composer require, publish and run migrations, add a trait or relation to the host model. The real effort sits in data migration, not installation — reconciling an existing addresses table or denormalized address columns with the package's schema, and deciding whether the package's model becomes the system of record or a projection.

The 4.0.0 release adds a version-selection step that did not previously exist in the plan: the package now targets Laravel 13, and a major-version bump with a one-line changelog ("modernizes the dependencies a bit") is an undocumented breaking-change surface. Integration feasibility now depends on knowing which major line your Laravel version forces you onto.

Technical risk The dominant risk remains provenance, not code quality. Zero stars, zero dependents, and a one-line README mean there is effectively no external validation signal: no evidence of production usage, no reported issue surface, no community pressure toward semantic versioning discipline.

4.0.0 moves this slightly, in two directions:

  • Positive. A published 3.3.0 → 4.0.0 progression is evidence of a maintained release line and semver discipline, which is a better signal than the assessment previously had. Combined with explicit Laravel 13 support, the maintainer is demonstrably tracking the framework rather than having abandoned the package. This partially — not fully — de-risks the bus-factor concern.
  • Negative. The changelog does not enumerate the breaking changes that justify a major bump. "Modernizes the dependencies a bit" is not a migration guide. A major version with an undocumented blast radius is exactly the failure mode most dangerous to a package whose migrations become your schema.

Risks to verify during a spike, amended:

  • 4.0.0 breaking-change scope. Diff 3.3.0...4.0.0. Confirm whether the major bump is confined to composer.json constraints (Laravel 13 floor, PHP floor, dev dependencies) or whether it touches the service provider, config, model, or migrations. A migration change is the only outcome that forces a real data-migration project rather than a composer constraint edit.
  • Version floor. "Laravel 13 support" almost certainly means a raised minimum, not just a raised maximum. Determine the lowest supported Laravel/PHP on the 4.x line and confirm your application clears it; if not, you are on 3.3.x, which will no longer receive framework-compatibility fixes.
  • Schema ownership. If the package ships migrations, its schema becomes yours; conflicting migrations against an existing address table are a common source of pain.
  • Scope of "addressing." Does it cover international formatting, subdivision/administrative-area data, validation and normalization, or geocoding? Country and subdivision reference data goes stale and needs a refresh path; if the package ships static data, that is a recurring maintenance liability. Note 4.0.0 does not claim any feature work, so none of these questions are answered by the release.
  • DB driver support (JSON columns, spatial types, UUID/ULID keys). "Modernizes the dependencies" may have shifted driver assumptions; re-verify rather than carrying forward a prior check.
  • Bus factor. Still a single-maintainer package with no downstream dependents. The 4.0.0 release is a reason to lower, not retire, this concern.

Key questions for the maintainer/spike

  1. What actually breaks in 4.0.0 — is it dependency constraints only, or code and migrations? Where is the upgrade note?
  2. What is the minimum supported Laravel and PHP version on 4.x, and what is the support window for 3.3.x?
  3. What is the schema, and is the model polymorphic or a fixed foreign key?
  4. Does the package validate or normalize input, or is it purely storage?
  5. Where does country/subdivision reference data come from, and how is it updated?
  6. Is this package a dependency of a larger shipped product (which would imply real-world testing) or an extracted utility?
  7. License and contribution/security-disclosure terms.

Integration Approach

Stack fit Assumes Laravel with Eloquent and a relational database (MySQL/Postgres). Confirm the package's composer.json constraints against the application's Laravel and PHP versions before anything else; a mismatch here ends the evaluation cheaply. As of 4.0.0 this check has a new answer shape: applications on Laravel 12 or earlier will resolve to the 3.3.x line, applications on Laravel 13 to 4.x. Establish which line you land on before any code is written, because it determines whether you are adopting a maintained package or a frozen one.

Migration path Do not adopt the package as the domain's address model directly. Instead:

  1. Wrap it. Define an internal AddressRepository / AddressService boundary and let the package sit behind it. Domain code depends on your interface, so a future fork or replacement is a contained change. This boundary is also what makes a 3.3.x-to-4.x upgrade a composer change rather than a refactor.
  2. Preserve the existing schema during transition. Keep current columns/tables and backfill into the package's structure rather than rewriting in place.
  3. Dual-write, then dual-read, then cut over for a single bounded context before touching others. Address data is usually low-write/high-read, which makes dual-write cheap and backfill verification straightforward.

Compatibility checks Verify nullable/optional fields, country code representation (ISO 3166-1 alpha-2 vs. alpha-3), subdivision handling (free text vs. FK), and how the package treats incomplete or partial addresses — international addresses frequently lack a subdivision or postal code, and a schema that assumes US-style completeness will reject valid data. Add: diff the published migrations between 3.3.0 and 4.0.0 if your schema was ever created from the package, and re-run the migrations against a scratch database to confirm no drift.

Sequencing

  1. Due-diligence spike (~1–2 days): read the source, run the migrations against a scratch database, inspect the schema, check test coverage, and read the 3.3.0...4.0.0 diff to classify the 4.0.0 break as dependency-only or code/migration-affecting.
  2. Bounded POC: one entity, one form, one reporting query. Confirm formatting and query ergonomics.
  3. Schema/data review with the team that owns the address data.
  4. Backfill tooling + reconciliation report.
  5. Cutover for context one; expand only after a full release cycle.

If the spike reveals static reference data or a thin validation story, budget for either an internal fork or a supplementary validation layer (e.g., a commercial address-validation API) before commit. Record the pinned major explicitly in the decision — this package has now demonstrated it will ship framework-gated majors, so the pin is a standing commitment, not a one-time formality.

Operational Impact

Maintenance Assume you will own this code. Pin to an exact version, mirror the repository internally (or vendor-fork it) so an upstream deletion or archive does not break builds, and subscribe to release notifications. Review the source once for anything touching migrations, since those are the least reversible part of the package.

4.0.0 makes the pinning policy concrete: this is a package that publishes framework-gated major versions with minimal changelog detail. Expect to be forced onto a new major roughly in step with Laravel majors, and expect to have to read the diff yourself each time. If you support multiple applications on different Laravel versions, be prepared to carry both a 3.3.x and a 4.x pin in your internal mirror, with the 3.3.x line receiving no further framework-compatibility work.

Support Community-only, no SLA. Escalation path is the maintainer's issue tracker and, realistically, your own engineers reading PHP. For a package this small the source is auditable in an afternoon, which offsets the lack of support — but that audit must actually happen before adoption. A major release with a one-line note is a reminder that the changelog is not a substitute for the audit.

Scaling Address lookups are typically join-heavy and read-dominated. Watch for N+1 when a list view renders an address per row; eager-load the relation. If the package ships country/subdivision tables, cache them — they are effectively static and should not be queried per request. Polymorphic relations need a composite index on (addressable_type, addressable_id); verify the package's migrations include it, because its absence degrades silently as volume grows. Nothing in 4.0.0 indicates changes here, but re-verify rather than assume, since dependency modernization can alter driver defaults.

Failure modes

  • Upstream abandonment or a breaking change published as a patch release. The 4.0.0 major shows discipline at the 4.0 boundary; it does not validate behavior between majors.
  • Undocumented breaking changes in a framework-gated major — the specific risk this release introduces. A migration or model change shipped under "modernizes the dependencies a bit" would surface as a runtime failure after a routine composer update.
  • Being stranded on 3.3.x. Applications that cannot reach Laravel 13 stop receiving compatibility updates and inherit stale framework constraints.
  • Stale country/subdivision reference data producing invalid dropdowns.
  • Migration collisions with an existing address table.
  • Orphaned polymorphic rows when the owning model is deleted without cascading cleanup.
  • Duplicate address records created by a dual-write window that was never reconciled.
  • Silent loss of partial international addresses rejected by an over-strict schema.

Ramp-up Low for any Laravel developer — the package's surface is small and idiomatic. The ramp-up cost is in the data migration and in establishing internal conventions (when to create a new address vs. reuse, how to format for display, which fields are required per country). Document those conventions; they will outlive the package. Add one convention up front: the pinned major and the trigger for revisiting it when Laravel upgrades.

Recommendation Still a build-vs-adopt decision, not a drop-in, but the maintenance signal has improved enough to move it from "prove the maintainer exists" to "prove the 4.0.0 break is benign." 4.0.0 gives the package an active maintainer tracking Laravel 13 and a visible semver line, which retires the most acute abandonment concern. It does not retire the zero-dependent, no-production-evidence concern, and it adds a new one: a major version whose contents are undocumented.

Proceed only if the spike confirms (a) the 4.0.0 change set is confined to dependency constraints and does not touch migrations or the model, (b) your application clears the new Laravel/PHP floor, and (c) a reference-data update path exists. If (a) fails, or if you cannot clear the new floor and would be adopting a frozen 3.3.x line, lift the schema and write the ~200 lines yourself.

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.
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel