maggomann/addressable
Maggomann Addressable is a Laravel package that adds polymorphic address support to your Eloquent models, letting any model store one or more addresses through a simple trait and relation.
Scope of this release (v0.2.2). The published release notes contain only an auto-generated compare link (v0.2.1...v0.2.2) with no changelog body, no migration notes, and no deprecation callouts. On a 0.x project, semver permits breaking changes in any minor bump, and patches are intended to be non-breaking — but "intended" is not evidence. Treat v0.2.2 as a presumed patch release of unknown content until the commit diff is read.
Architecture fit. Based on the package name and Laravel ecosystem conventions, this appears to provide an address model plus a polymorphic addressable contract/trait so that entities (User, Order, Warehouse, etc.) can own one or more addresses without duplicating schema. That fits a common Laravel pattern: a domain-adjacent, Eloquent-native package layered over migrations and model traits, consumed via Composer with optional config publishing. Fit is high if our need is "several models need postal addresses"; fit is poor if we need geocoding, address validation/normalization against a vendor, or country-specific address schemas — those are separate concerns and likely out of scope.
Integration feasibility. Low-to-moderate effort, assuming standard Laravel packaging: composer require, publish migrations/config, run migrations, add the trait to host models, and define any address type/role enumeration we require. The real cost is not installation; it is the data model decision — whether addresses are owned (one-to-many, denormalized per entity) or shared (many-to-many, reusable address book), and whether the package's default schema matches our reporting and dedupe needs.
Technical risk.
0.x can shift in a minor release. Budget for pinning and for periodic upgrade work.addressable_type/addressable_id columns are unenforceable at the DB level; orphaned addresses after entity deletion are a known failure class. Confirm cascade/cleanup behavior in the package or add it ourselves.label, is_default, geo columns) means either extending the table or forking.Key questions.
0.x the steady state?Stack fit. Presumes a conventional Laravel app on Eloquent with standard Composer workflow. It is a low-coupling, domain-adjacent dependency — it does not touch queues, HTTP, or auth — so it can be adopted narrowly by one or two models first without disturbing the rest of the application. That containment is the main reason this is a low-risk pilot rather than an architecture decision.
Migration path. Two phases, deliberately asymmetric:
User), and write an address CRUD path end to end. This validates the schema and the trait contract cheaply.Compatibility. Confirm, from composer.json and CI config rather than release notes, the supported PHP and Laravel versions against our current floor and our next upgrade target. Also confirm the package's stance on the Illuminate major we plan to run, since a stall here can block a framework upgrade later. Pin to an exact version (0.2.2) — do not use a caret range on a 0.x dependency, where ^0.2 silently accepts 0.3.
Sequencing.
composer.json, migrations, and tests. (Blocking gate — do this before anything else.)0.2.2; pilot integration on one non-critical model.Maintenance. Expect recurring upgrade work proportional to release cadence on a 0.x line, plus the cost of our own extensions (extra columns, cleanup logic, validation). Every minor bump should trigger a diff review, not just a changelog read — the v0.2.2 notes demonstrate why. Assign a named owner; an unowned pre-1.0 dependency tends to sit unchanged until a framework upgrade forces the issue.
Support. Upstream support is community/single-maintainer: GitHub issues, no SLA, no vendor escalation path. Our internal support surface is small (address persistence), so this is acceptable if we can absorb a fix ourselves. Before broad adoption, confirm we have someone able to read and patch the package — if not, the exit cost is higher than the entry cost.
Scaling. Address data is low-volume and read-heavy relative to core transactional tables; no scaling concern at the package level. Watch two things: index coverage on the polymorphic columns (addressable_type, addressable_id — composite index is typically required for lookup performance), and query patterns that eager-load addresses across large collections. If we add geocoding or validation, that is an external-service concern with its own rate limits and costs, not something this package governs.
Failure modes.
Ramp-up. Low for a Laravel-fluent engineer: the trait-plus-migration idiom is familiar, and the pilot should take well under a sprint. The non-obvious cost is the owned-vs-shared data modeling decision, which needs a product/reporting perspective, not just an engineering one. Budget a short design conversation up front; it is far cheaper than reworking address data after backfill.
Recommendation. Proceed to pilot, gated on the diff review of v0.2.2. The release itself does not change our position — it is an undocumented patch on a pre-1.0 package, which is neutral-to-mildly-negative on process and neutral on capability. Pin exactly, contain the blast radius to one model, and revisit the assessment when a substantive changelog or a 1.0 tag appears.
How can I help you explore Laravel packages today?