Calendar Icon

Calendar

0.4.0

July 13th, 2026

What's new

  • Redirect expired date-segment occurrence URLs to the next upcoming occurrence with a 301, configurable via url.redirect_expired (default true) (#25)
  • Past occurrence pages without a successor (ended series, single past events) keep rendering for archival value (#25)
  • Expose occurrence_canonical_url in occurrence show view data — an absolute self-canonical URL for composing canonical tags and site-owned Event JSON-LD (#25)

What's changed

  • Document an Antlers example for canonical + Event JSON-LD markup built from occurrence variables and site blueprint fields

0.3.0

July 11th, 2026

What's new

  • Add Control Panel Visit URL and Live Preview support for event entries using both URL strategies (#22)
  • Resolve preview URLs from unsaved title and date values, selecting the next occurrence or falling back to the most recent one (#22)
  • Support route-free date-segment collections and existing custom Entry classes (#22)

What's changed

  • Require patched Statamic releases: 5.74+ or 6.20.3+
  • Update Prettier to 3.9.4

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)