astrotomic/laravel-vcard
Generate and download vCard (.vcf) files in Laravel with a fluent, expressive builder. Map Eloquent models or plain data to vCard 3.0/4.0 contact cards, customize fields, and serve them as downloadable files or responses—ideal for adding "Save contact" features to any app.
.vcf download for people, companies, speakers, agents, or store locations without engineering a vCard serializer from scratch..vcf export of a filtered list (attendees, team, directory), branded contact cards for email signatures, and partner/affiliate distribution kits.Consider adopting when:
.vcf for bulk download — a common requirement that is annoying to hand-roll correctly.Look elsewhere or proceed with caution when:
0.8.x as an unstable API: pin the constraint, read changelogs before upgrading, and wrap the package behind a thin internal service class so a swap is a one-file change.For executives (30 seconds): We can ship a "save this contact to your phone" capability in days instead of weeks by adding one small open-source dependency. It produces standards-compliant contact files that work with iOS, Android, Outlook, and Google Contacts. Cost is a single Composer line, MIT-licensed, no vendor contract, no per-seat fee. The main caveat is that the library is pre-1.0, so we will pin the version and keep it behind a small internal wrapper — meaning if we ever need to replace it, the change is contained to one file and does not touch product code. Recommendation: adopt for outbound vCard generation only; do not assume it covers contact import or sync.
For engineering: Thin Laravel wrapper around vCard 3.0/4.0 serialization — config publishing, container binding, and a facade over model/array input. It removes the RFC compliance burden (escaping, line folding, charset, structured names) from our codebase and gives us a testable seam. Two asks before we commit: (1) pin to a ~0.8.0 style constraint and review minor bumps as potentially breaking, since 0.8.x is pre-1.0; (2) hide it behind an internal ContactCardGenerator interface so the contract is ours. The 0.8.1 patch ships with no described changes beyond a diff link, so there is no feature to exploit here — upgrade on the normal cadence and assert our output fixtures are unchanged. If we later need parsing, CardDAV, or very large streamed exports, we may need to supplement or replace it; scope those as separate decisions rather than assuming coverage.
How can I help you explore Laravel packages today?