sabre/vobject
sabre/vobject is a PHP library for parsing and manipulating iCalendar (RFC 5545) and vCard (RFC 6350) objects, with a complete, easy-to-use API. Install via Composer with sabre/vobject ^4.0; requires PHP 5.5+.
.ics attachments with METHOD:REQUEST), contact import/export (.vcf), or two-way calendar sync. This package turns each of those from a multi-quarter standards project into a sprint-sized integration..ics feed endpoints), and tenant data migration between systems.BYYEARDAY, BYDAY with BYSETPOS, deprecated tz names) are the classic source of "my meeting moved an hour" bugs. Adopting a library with a decade of fixes converts an unbounded QA liability into a bounded integration task.Adopt when:
.ics or .vcf content — attachments, uploads, API payloads, or stored documents.RRULE, RDATE, EXDATE, instance expansion) or timezone-correct events with VTIMEZONE/TZID.Look elsewhere when:
sabre/dav, which consumes this library; the two are commonly adopted together.Diligence note: Do not judge this on raw repository counters. It is the engine underneath SabreDAV and multiple open-source groupware suites — the meaningful signal is sustained release cadence, broad PHP-version support, and a long public bug-fix trail in exactly the areas (recurrence, DST, iTip) where bugs hurt.
For executives: "Our calendar and contact features need to speak the same standards as Outlook, Google, and Apple. We can either spend an estimated two to three quarters building and debugging that ourselves, or adopt a mature BSD-licensed library that already does it and has been hardened for a decade. The license is permissive — no copyleft exposure, no per-seat cost. The spend shifts from reinventing standards to building the workflow and UI that customers actually pay for, and it materially lowers the risk of recurring 'meeting moved an hour' and corrupted-contact defects that erode trust in the product."
For engineering: "It's composer require sabre/vobject, PHP 8.4-compatible, actively released, and it handles the parts nobody wants to own: RFC 5545/6350 parsing, RRULE expansion, timezone maps, and iTip message generation. It is a library, not a Laravel package — no facade, no config — so we own a thin adapter layer: a CalendarService/ContactService, validation of uploaded files, queued import/export jobs, storage via the filesystem disk, and outbound invites through Laravel Mail. That layer is small, testable, and keeps the dependency swappable. Upside: we delete our custom parsing and recurrence code and inherit years of edge-case fixes; downside: we inherit their API surface and must pin a version and watch the changelog for behavioral changes in timezone and iTip handling."
How can I help you explore Laravel packages today?