jsvrcek/ics-bundle
A Symfony bundle for generating iCalendar (.ics) files, letting you build events, calendars, and reminders from your application's data and export them for import into Outlook, Google Calendar, and other calendaring tools.
Architecture fit
ServiceProvider, facade, config file, or publishable assets. Laravel has no bundle/DI-extension concept, so the wrapper — the entire reason this package exists separately from the library — delivers zero value in a Laravel codebase.jsvrcek/ics services into the Symfony container. In Laravel, that work is a five-line singleton binding. The reusable artifact is the underlying jsvrcek/ics library, which is framework-agnostic PHP.Integration feasibility
composer require jsvrcek/ics plus a small CalendarService class and a container binding covers the use case.Content-Type: text/calendar.Technical risk
--ignore-platform-reqs or a fork.Key questions
>=8.0 support, or does it require a fork? Check composer.json first — this gates everything.VTIMEZONE, RRULE/recurrence, METHOD:REQUEST with ORGANIZER/ATTENDEE, VALARM, line folding, UID stability across regenerations?sabre/vobject.eluceo/ical or spatie/icalendar-generator? Both are actively maintained and would likely eliminate this dependency entirely.Stack fit
jsvrcek/ics directly; exclude the bundle. Wrap in an application-owned service (App\Services\Calendar\IcsBuilder) so the third-party surface is one class deep.AppServiceProvider only if the builder is stateless; otherwise bind as a transient/scoped service since calendars accumulate mutable state.response($ics)->header('Content-Type', 'text/calendar; charset=utf-8') with Content-Disposition: attachment.Migration path
eluceo/ical is a one-file change.Compatibility
framework-bundle, but pulling it in for a DI wrapper is dead weight and risks transitive Symfony version pinning. Avoid entirely.ext-mbstring and ICU/timezone database assumptions; iCal output is timezone-sensitive and Laravel's config('app.timezone') should be the single source of truth passed into the builder.Sequencing
eluceo/ical covers the feature matrix, stop and use it.Maintenance
Support
Scaling
Cache-Control/ETag strategy in front of the generator is more important than optimizing the generator itself.Failure modes
VTIMEZONE blocks fall back to client defaults. This is the classic iCal bug class and the one most likely to generate user-visible complaints.UID instability — regenerating with new UIDs causes duplicated rather than updated events in subscribers' calendars. Must be deterministic and persisted.Ramp-up
How can I help you explore Laravel packages today?