amethyst/address
Amethyst Address is a Laravel package for working with postal addresses, offering structured address fields and management for your models and forms. A lightweight option for adding address handling to Laravel applications.
street, postal code, city, country) to support decisions like "do we support separate ship-to/bill-to?", "do we store address history per order?", or "do we need structured addresses for carrier rate calculation?"toArray/fromArray). The real decision is not "can we write this?" but "do we want to own the shape, or adopt an existing value object and keep our domain model consistent with the rest of the stack?"amethyst/* packages (collections, data, etc.), adopting amethyst/address keeps value objects interoperable and reduces the number of bespoke DTO conventions your team must learn. If you are not on Amethyst, this argument does not apply.{street, postal_code, city, country}) that affect frontend forms, mobile clients, and partner integrations.Consider adopting when all of the following hold:
amethyst/collections, amethyst/data, or similar) and want address to behave consistently with your other value objects.Look elsewhere when any of these apply:
commerceguys/addressing or Google's libaddressinput data instead; this package does not provide that.For executives (the one-paragraph version): Addresses are a small but structurally important part of our product: they drive shipping cost, tax, invoicing, and fraud checks, and they are expensive to change later once they are embedded in orders and invoices. amethyst/address is an MIT-licensed, dependency-free PHP value object that gives us a standard address shape for free. It is tiny and low-risk in code, but it is also very low-adoption (two stars, no dependents, single maintainer), so my recommendation is to treat it as a reference model, not a strategic dependency: adopt it if we are already standardized on the Amethyst family, otherwise vendor the small amount of code into our own domain layer. Either way, we get a structured address type now — which unblocks international shipping, tax, and invoicing — without a procurement or licensing conversation.
For engineering (the practical version): It is a plain value object — street, postal code, city, country — with array serialization and no framework coupling, no service provider, no migrations, no validation layer. Integration cost is one Eloquent cast and one FormRequest rule; both are ours to write. Upside: consistent, immutable address type across order, customer, and invoice models, and no bespoke DTO to document. Downside: no country-format handling, no validation, and no meaningful community to absorb bugs. Mitigation: pin the version, wrap it behind our own Address interface so we can swap in commerceguys/addressing if international requirements grow, and keep an eye on the upstream repo. If we are not on Amethyst elsewhere, copying the class into App\Domain costs an hour and removes the dependency entirely — that is the option I would default to unless ecosystem consistency argues otherwise.
How can I help you explore Laravel packages today?