Calendar Icon

Calendar

0.2.2

June 30th, 2026

What's fixed

  • Resolve event dates in the configured timezone for Statamic 6. Statamic 6 stores date fields as the UTC instant of the editor's selected day, so the resolver built an invalid recurrence DTSTART — crashing the occurrence-cache rebuild on every entry save — and read dates one day early in timezones ahead of UTC. Recurrence (DTSTART/UNTIL/EXDATE/RDATE) is now expanded in the event timezone, so wall-clock times and DST are handled correctly (#20)
  • Harden recurrence resolution: a missing start date, missing frequency, or malformed time no longer aborts the whole cache rebuild (#20)

What's new

  • statamic-calendar.timezone config option — the timezone events are authored and displayed in. Defaults to statamic.system.display_timezone, then app.timezone, then UTC (#20)

What's changed

  • Support Statamic 6 in the test harness (extends Statamic's AddonTestCase); CI now runs the suite against both Statamic 5 and 6 (#21)

0.2.1

June 7th, 2026

What's fixed

  • Exclude unpublished event entries from occurrence cache rebuilds, live calendar tag resolution, and direct occurrence routes (#19)
  • Return 404 for direct occurrence URLs belonging to unpublished entries (#19)

What's changed

  • Harden npm installs in CI with --ignore-scripts, --no-audit, and package manager guardrails (#18)

0.2.0

May 1st, 2026

What's new

  • Add OccurrenceBuilding, a cache-build event for enriching materialized occurrences with custom fields (#15)
  • Persist custom occurrence fields through cached OccurrenceData, JSON API responses, and {{ calendar }} tag output
  • Expose both the source entry and resolved occurrence to listeners, so extras can depend on occurrence-specific data like start/end dates
  • Add pagination to the REST API with page / per_page parameters and api.max_per_page limits (#7)
  • Add Statamic-style pagination to {{ calendar }} and {{ calendar:for_organizer }}, including paginate, page_name, and as support (#7)

What's changed

  • Align calendar tag output with Statamic's OutputsItems conventions and default paginated key occurrences
  • Keep core occurrence fields authoritative when custom extras use reserved keys
  • Document custom occurrence fields and pagination options in README, config comments, and event class docblock

0.1.2

April 20th, 2026

What's fixed

  • Fix {{ calendar:ics_download_url }} inside {{ calendar }} loops — loop items now expose occurrence_id (composed {entry_id}-{Y-m-d-His}), so .ics download links resolve correctly instead of 404-ing (#10)

0.1.1

April 20th, 2026

What's fixed

  • Fix eloquent driver compatibility: normalize numeric organizer IDs and tag-level entry IDs to strings (#9)

0.1.0

February 8th, 2026

🎉 Initial Release

Recurring events and cached occurrences for Statamic v5/v6.

Features

  • Recurring events — define recurrence rules (RRULE) on entries; occurrences are expanded and cached automatically
  • calendar:month tag — render a monthly grid view in your Antlers templates
  • current_occurrence tag — resolve the current or next upcoming occurrence for an entry
  • iCalendar (.ics) export — full calendar feed and per-event download
  • "Add to calendar" links — generate links for Google Calendar, Outlook, etc.
  • JSON REST API — query occurrences programmatically via /!/calendar/occurrences
  • Auto-registered routes — index and date-segment routes configured from config/calendar.php
  • Default templates — ships with ready-to-use index, show, and month-grid views (Tailwind CDN)