Front-end & Twig
Owl exposes a fluent Twig query API through craft.owl. Its parameters deliberately mirror Solspace Calendar’s, so migrating templates is mostly find-and-replace.
Querying occurrences
craft.owl.events() returns occurrences within a date range — so a weekly event correctly appears on every week it falls. Filter by calendar, range, and the usual element criteria:
{% set occurrences = craft.owl.events()
.calendar('concerts')
.rangeStart('today')
.rangeEnd('today +1 month')
.orderBy('startDate ASC')
.all() %}
{% for occurrence in occurrences %}
{{ occurrence.title }}
{% if occurrence.isException %}Rescheduled{% endif %}
{% endfor %}
Common parameters
| Parameter | What it does |
|---|---|
calendar | Limit to one or more calendar handles. |
rangeStart / rangeEnd | The window of occurrences to return (any date string). |
loadOccurrences | Return occurrences (default) vs. distinct events. |
orderBy | Sort, usually startDate ASC. |
limit / offset | Standard pagination. |
Reading occurrence data
Each occurrence exposes its own startDate and endDate (the concrete instant), the parent event’s title, custom fields and URL, plus its calendar (with color and handle). Override occurrences report isException / isOverride so you can flag changed instances.
Where to go next
- Calendar views — feed FullCalendar from the JSON endpoint.
- ICS feeds — subscribable feeds and single-event downloads.
- GraphQL — the same data over GraphQL.