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

Address Bundle Laravel Package

padam87/address-bundle

Symfony bundle for managing postal addresses: address entities, forms, and country/region data with Doctrine integration, letting you store, validate, and reuse addresses across your app instead of rebuilding the same model each time.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Package reality check. padam87/address-bundle is a Symfony bundle, not a Laravel package. The descriptor "Laravel/PHP package" is inaccurate and is the single most important finding in this assessment: the artifact delivers no ServiceProvider, no config/*.php publishables, no Eloquent models, and no Laravel-native integration surface. Anything we consume is source material to port, not a dependency to install.

Architecture fit. The bundle's design intent is reasonable and portable: a Doctrine-backed Address entity holding structured address components, a formatter layer that renders a locale-aware single-line/multi-line address string, and a geocoding service that resolves an address to lat/lng via an injected geocoder client. All three concerns map cleanly onto Laravel primitives (Eloquent model + casts, a AddressFormatter value object/strategy, a Geocoder contract with a queued job and cache decorator). Fit is therefore conceptual-good, mechanical-poor.

Integration feasibility. Low as a direct dependency, moderate as a reference implementation:

  • composer require will not work in a Laravel application; the bundle's composer.json pins Symfony 2.x/3.x-era constraints and a 2016-vintage Guzzle/Geocoder (likely willdurand/geocoder ~3/4). Modern Laravel (10/11/12) runs Symfony 6/7 components — a hard solver conflict.
  • No auto-discovery, no bundle registration in a Laravel kernel, no HTTP/kernel integration.
  • Only ~10 stars and 0 dependents means effectively zero community validation: no downstream projects have exercised this code against real traffic, so edge cases in international address formatting are unproven.

Technical risk. High, and concentrated in four areas:

  1. Abandonment — last release 2016-11-15, roughly nine years stale. No PHP 8.x compatibility work, no security triage, no response to issues.
  2. Ecosystem drift — address formatting rules (especially for APAC/LATAM locales) and geocoder provider APIs (Google, Mapbox, Nominatim) have changed substantially since 2016; the formatting templates and provider payload parsing are likely obsolete.
  3. License is clean (MIT), so forking is legally unencumbered — the risk is maintenance cost, not legal exposure.
  4. Hidden coupling to Doctrine — entity mapping, lifecycle callbacks, and embeddables will need re-expression as Eloquent.

Key questions for the maintainer/business:

  • Are we solving address storage/formatting (cheap to build) or geocoding/validation (dominated by third-party provider cost and quota)?
  • Which locales and countries must be supported at launch? If it is US/UK/EU-only, a maintained library covers us; if it is global, neither this bundle nor a naive build is sufficient.
  • Is there a hard deadline that makes a 2–3 week port preferable to evaluating maintained alternatives (geocoder-php/*, symfony/intl or commerceguys/addressing for formatting)?
  • Who owns the fork if we vendored it, and what is the SLA if geocoding breaks in production?

Recommendation: Do not adopt as a runtime dependency. Treat it as a design reference only. The formatting layer is the only part with genuine reuse value and it is small; the geocoding layer should be built against a maintained client from day one.

Integration Approach

Stack fit. The target is Laravel (Eloquent, queues, HTTP client, validation). The bundle supplies three portable concepts and zero portable code. The integration is a rewrite, not an install:

Bundle concern Laravel replacement
Doctrine Address entity Eloquent model + migration + Attribute casts (coordinates as a custom cast, structured components as JSON)
Address formatter / templates AddressFormatter interface with per-locale strategy classes; symfony/intl or commerceguys/addressing for country/administrative data
Geocoder service Geocoder contract + adapter per provider, Cache::remember decorator, GeocodeAddress queued job with retry/backoff
Symfony form types Form Requests + validation rules (postal_code, country-aware regex rules)
Bundle DI config AddressServiceProvider binding interface → adapter, config file for provider keys

Migration path. There is no data migration because nothing is deployed on the bundle — this is greenfield. If a legacy system holds addresses in a bundle-shaped schema (single formatted_address text column plus lat/lng floats), the migration is: add structured columns, backfill via a queue job that parses+geocodes, keep the legacy text column as a fallback read path for one release, then drop it.

Compatibility. Practical constraints to verify before committing: PHP 8.2/8.3 support in every chosen dependency, Laravel 10+ service provider conventions, and a geocoder client that is actively released (check Packagist release dates, not just stars). The bundle itself fails the PHP 8 baseline; do not attempt to make it pass.

Sequencing (assuming a single engineer, ~3–4 weeks):

  1. Week 1 — Address schema, model, casts, validation rules, country/locale data source selection. No geocoding.
  2. Week 2 — Formatter interface + 2–3 launch locales, unit tests with a fixture corpus of real addresses (include the ugly ones: unit/apt lines, PO boxes, non-Latin scripts).
  3. Week 3 — Geocoder contract, one provider adapter, cache decorator, queued job with idempotency key, provider-failure handling.
  4. Week 4 — Backfill/import path if needed, observability (log geocode hit rate and failure reason), docs, and a second provider adapter behind a config flag for failover.

Build the formatter before the geocoder: it is deterministic, cheap to test, and delivers user-visible value without external dependency or spend.

Operational Impact

Maintenance. Owning a fork of a 2016 bundle means owning PHP-version upgrades forever with no upstream. Owning our own ~800-line implementation is cheaper and clearer. Budget roughly 1–2 engineer-days per quarter for provider API changes and locale data updates; that cost exists with any option and should be stated explicitly rather than hidden in "reuse."

Support. Zero. The upstream is unmaintained, low-visibility (10 stars), and has no dependents, so there is no community to absorb issues. Internal runbooks, a named owner, and a documented provider-failover procedure are mandatory deliverables, not nice-to-haves.

Scaling. The bottleneck is never the PHP code — it is the geocoding provider: per-request quota, rate limits, per-lookup cost, and latency (100–600 ms per call). Design for it:

  • Cache aggressively by normalized address hash; a large share of lookups repeat.
  • Never geocode synchronously in a user-facing request — always queue.
  • Batch where the provider supports it; cap concurrent workers to stay under rate limits.
  • Treat provider cost as a per-order/per-signup unit economic and forecast it before launch.

Failure modes and mitigations.

  • Provider outage or quota exhaustion → degrade to stored coordinates, queue with exponential backoff, circuit breaker, secondary provider behind a flag.
  • Ambiguous or partial address → return candidate list with confidence scores; never silently write a low-confidence coordinate.
  • Silent geocode miss (null lat/lng written as 0,0) → reject at the model/cast layer; 0,0 is in the Atlantic and will poison any distance or map feature.
  • Locale formatting regressions → golden-file tests per supported locale; snapshot the formatter output so drift is caught in CI.
  • Unvalidated country/administrative data → pin the country dataset version; address data changes (e.g. postal code reforms) and unpinned sources cause slow, hard-to-diagnose breakage.

Ramp-up. Effectively zero transferable knowledge from the bundle — no engineer on the team will have seen it, and its Symfony 2 idioms do not teach anything about the Laravel target. Ramp-up is instead the ordinary cost of onboarding to our own address domain: roughly half a day for a mid-level engineer given the schema doc and formatter tests. The real ramp-up risk is domain, not code: international address handling has long-tail rules that take weeks of fixture-building to internalize, and a single engineer leaving without documentation is a genuine continuity risk.

Bottom line for the roadmap. Low opportunity score (1.44) is consistent with what we found: negligible community traction and no dependents. Value here is a small, well-understood domain that we should implement natively in ~3–4 engineer-weeks. Reference the bundle's formatter design, discard its code, and spend the saved risk budget on provider failover and a test corpus — those are what actually determine whether this feature survives contact with production.

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
shitoudev/permissionmanager