polifonic/addressable
Polifonic Addressable is a Laravel package that adds polymorphic address support to Eloquent models. Attach reusable addresses to users, companies, or any model via a simple trait and manage them through an intuitive API.
Architecture fit. Based on the vendor and package name, this is a Laravel package that provides polymorphic address attachment — a HasAddresses-style trait, an addresses table with addressable_type/addressable_id, and an Eloquent model — so any model (User, Organization, Warehouse, Order) can own an address without duplicating columns. That pattern is idiomatic Laravel and fits cleanly into a domain model that already uses polymorphism. Fit is high only if our address needs are simple structured fields. It degrades quickly if we need per-country validation, normalization, geocoding, deduplication, or address history — capabilities a 1-star package is unlikely to have hardened.
Integration feasibility. Mechanically trivial: composer require, publish the migration/config, add the trait to target models. The real feasibility question is compatibility rather than effort — what Laravel/PHP constraints are declared in composer.json, whether the migration is publishable and non-destructive, and whether the package declares support for the framework version we actually run. With 0 dependents, there is no downstream evidence that it installs or works against any current Laravel release.
Technical risk. High — driven almost entirely by project health, not code complexity:
addressable_type, addressable_id). Thin packages frequently omit it — invisible at seed-data scale, painful in production.Key questions to resolve before writing code:
composer.json allow, and does it install cleanly against our target stack?Relation::morphMap?Stack fit. Laravel/Eloquent native, so there is no impedance mismatch at the framework layer. The mismatch sits at the domain layer: addresses are locale-specific, and a generic package will encode one address shape. Confirm that shape matches our markets before adopting.
Recommended integration approach — do not consume it as a live dependency. Two viable paths:
HasAddresses trait plus one migration is roughly half a day; we control validation, indexing, and locale rules from day one.Migration path. Additive either way — a new table plus a trait on selected models, no changes to existing tables. Publish the migration first, then immediately add the composite index and any is_default/soft-delete columns we need. If legacy address columns exist, backfill via a one-off command with a rollback path and leave the old columns in place until the read path is fully switched.
Compatibility. Pin and test, don't assume. Install on a scratch branch, run composer why-not against the target framework version, and run the migration against a clone of the real schema to catch index-name and column collisions. Explicitly verify behavior under our morph map and with UUID/ULID primary keys — polymorphic packages break there often.
Sequencing.
Maintenance. The dominant cost. With one star and zero dependents we are effectively the maintainers — no upstream absorbs framework upgrades, security patches, or bug reports. Budget a permanent ownership line: someone must re-verify this code at every Laravel major. Forking makes that cost explicit; depending on the package hides it until it blocks a release.
Support. No community, no substantive issue history, no vendor SLA. Internal documentation is the only support channel, and escalation is "read the source" — tolerable only because the surface area is small.
Scaling. Low risk. Address data is low-volume and read-mostly; the schema will not be a bottleneck. The two things that bite at scale are missing composite indexes on the morph keys and N+1 loads if the relation isn't eager-loaded — both fixable inside our own migration and query layer.
Failure modes.
Ramp-up. Low technically — a Laravel developer reads the trait in under an hour. The real ramp is governance: get it into the dependency register with a named owner, a review date, and a stated exit strategy. Onboarding cost is dominated by the decision not to treat it as a supported third-party library.
Recommendation: Do not adopt as a live dependency. Use the repository as a reference implementation and fork or reimplement it in under a week. The functional value is real but small; the operational value of keeping an unmaintained 1-star package out of our core data model is substantially larger.
How can I help you explore Laravel packages today?