Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Ics Parser Laravel Package

johngrogg/ics-parser

A PHP library for parsing iCalendar (.ics) files into associative arrays of calendars and events, with DateTime support, time zone handling, and resolved property arrays. Install via Composer as johngrogg/ics-parser.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy on calendar ingestion. RFC 5545 (iCalendar) is deceptively hostile: line folding, text escaping, VTIMEZONE blocks, DST transitions, RECURRENCE-ID overrides, and vendor-specific malformed output. Adopting this package converts a multi-sprint parsing project into a Composer dependency, freeing roadmap capacity for the product surface (mapping, dedupe, UI, alerts).
  • One-way vs. two-way sync scoping. This is a read parser — it returns associative arrays of events from a .ics file/URL. That makes it the right tool for a Phase 1 inbound-only roadmap: "import and display" ships now, while full CalDAV/OAuth two-way sync stays a separate, larger bet. It gives you a credible v1 without pre-committing to the harder architecture.
  • Channel-manager / availability sync as a feature. The highest-value use case in a Laravel context is ingesting third-party ICS feeds — Airbnb, Vrbo, Booking.com, Google Calendar "secret" addresses, Outlook published calendars — to block dates, populate availability, or trigger conflict alerts. This is a common paid-feature upgrade and a retention lever.
  • Calendar-adjacent features at low marginal cost. Once ingestion exists, adjacent asks become cheap: event listing pages, "add to calendar" round-trips (read side), staff leave/timetable imports, resource and room bookings, editorial content calendars, deadline feeds for internal dashboards.
  • Dependency and platform decisions. MIT license, Composer-installable, PHP 8+ with a documented legacy path (5.6/7.4) — relevant if you're mid-migration off an older PHP version, or if you have a long tail of client-hosted Laravel installs you can't force-upgrade.
  • Buy-vs-wrap decision. There is no Laravel service provider, no Eloquent models, no queue integration, no typed DTOs. That's a deliberate product decision point: budget a thin internal CalendarImportService wrapper (validation, UID+SEQUENCE dedupe, timezone normalization, storage schema, retry/observability) rather than assuming the package is a drop-in feature.

When to Consider This Package

Adopt when:

  • The requirement is inbound parsing only — you read .ics/.ical/.ifb and never need to generate calendar files.
  • You're on PHP/Laravel and want zero runtime services, no external API credentials, no vendor account — just a URL fetch and a parse.
  • Feed volume is moderate (per-tenant subscriptions, tens to low thousands of events per sync) and can run in a queued job.
  • You want MIT licensing with no attribution or commercial constraints.
  • You need a swappable seam: the parser sits behind your own interface, so replacing it later is a one-class change.
  • Legacy PHP support matters (5.6/7.4 still in the fleet).

Look elsewhere or plan mitigations when:

  • You need ICS generation/serialization — this package doesn't do it; evaluate a dedicated writer (e.g. eluceo/ical) alongside it.
  • You need strict RRULE expansion correctness (complex BYSETPOS/BYYEARDAY, long-horizon recurrence) at scale. Validate against your real feeds before committing; recurrence edge cases are the single most likely source of production bugs here.
  • You need CalDAV / Google Calendar / Microsoft Graph two-way sync with OAuth, push notifications, and incremental sync tokens. That's a different product; don't let a parser create the illusion of a sync platform.
  • You need typed domain objects and Laravel idioms out of the box. There is none — you build it.
  • Maintenance and security posture matter more than features. 482 stars and a low dependents count are weak social proof; verify release cadence, open-issue responsiveness, and security disclosure history yourself. Compare against sabre/vobject, which is the more battle-tested, actively maintained iCalendar library and part of the SabreDAV ecosystem. For a revenue-critical sync path, that comparison is worth half a day.
  • Third-party feeds are your primary input. Airbnb/Booking exports are frequently malformed, timezone-ambiguous, or truncated. The parser assumes a valid ICS; it is not a hostile-input normalizer.

How to Pitch It (Stakeholders)

To executives: We need calendar ingestion for [channel sync / availability / event feeds], and roughly 80% of that work is unglamorous format parsing, not product. A mature MIT-licensed PHP library covers that layer for free, letting us ship an inbound calendar feature in this quarter instead of next, with no per-seat SaaS sync fees and no vendor contract. It's read-only by design, so it's the safe, reversible half of the calendar roadmap — if two-way sync ever justifies its cost, we've already de-risked the data layer.

To engineering: Composer-installable (johngrogg/ics-parser, ^3, note owner is johngrogg not u01jmg3), PHP 8+ with a 5.6/7.4 path, MIT, no runtime dependencies or services. It returns associative arrays per event — no models, no service provider, no queue hooks, so we own the integration: a CalendarFeedParser interface, a queued import job, a schema keyed on UID + SEQUENCE with RECURRENCE-ID override handling, explicit timezone normalization, and fixture tests built from real vendor feeds. Isolate it behind our own interface from day one — that keeps sabre/vobject or a future in-house parser as a drop-in swap and caps our exposure to a low-star, single-maintainer dependency.

Known risks to flag now: timezone handling (feed-provided VTIMEZONE vs. PHP tzdata vs. Windows zone names), recurrence expansion correctness, malformed third-party input, and a thin maintainer bench. Mitigation is cheap: real-feed test fixtures, a parse-failure alerting path, pinning the major version, and the wrapper abstraction.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator