Concepts
Owl is built around a small set of objects. Understanding how they relate makes everything else — querying, feeds, ticketing — straightforward.
Calendars
A calendar is a container for events, much like a section is a container for entries. Each calendar has a name, a handle, a colour (used in views and feeds), and its own field layout so different kinds of events can have different custom fields. You can create as many calendars as you like in both editions.
Events
An event is a custom Craft element that belongs to one calendar. It stores a start and end, an all-day flag, a timezone, and (optionally) a recurrence rule. Because events are real elements, they have titles, slugs, statuses, custom fields, drafts and revisions, and a familiar control-panel editing experience.
Occurrences
An occurrence is a single concrete instance of an event on the calendar. A one-off event has exactly one occurrence; a recurring event has many. Crucially, Owl materialises occurrences into an indexed database table rather than expanding the recurrence rule at query time.
This is the key architectural decision in Owl. Because each occurrence is a real, indexed row, calendar range queries and pagination are plain, fast SQL — and per-occurrence ticketing and inventory have a real row to attach to. Owl generates occurrences to a rolling horizon (a couple of years out by default) using a queue job, and keeps that horizon topped up over time.
Exceptions & overrides
Real calendars are messy. Owl supports two kinds of edits to a recurring series:
- Exceptions (EXDATEs) remove a single date from the series — “every Friday, except the 25th.”
- Overrides change a single occurrence — “every Friday at 7pm, but on the 18th it starts at 8pm.”
See Recurrence for the full details.
Timezones
Each event carries its own timezone. Owl expands recurrence in the event’s IANA timezone and stores instants in UTC, which means daylight-saving transitions are handled correctly — a 9:00 am weekly event stays at 9:00 am local time across spring-forward and fall-back.
Editions
Owl Lite (free) covers everything above plus feeds, GraphQL, multisite and front-end submission. Owl Pro adds Commerce ticketing, turning occurrences into purchasable tickets. Commerce is an optional, runtime-detected dependency: without it, Owl runs as a full calendar and hides ticketing.