Multisite
Owl is built for multisite from the ground up — and specifically designed to avoid the propagation and Matrix-field bugs that affect other calendar plugins.
What’s shared vs. per-site
Owl deliberately splits an event’s data:
- Shared across sites: the start/end instants, recurrence rule, timezone and occurrences. A concert happens at one moment in time regardless of which site’s audience is reading about it.
- Per site: the title, body and slug — the translatable, localisable content.
Keeping dates and recurrence on a single shared table (rather than duplicating them per site) is what prevents the drift and propagation bugs that show up when every site stores its own copy of the schedule.
Querying per site
Front-end queries are automatically scoped to the current site, returning that site’s title and slug for each occurrence while sharing the underlying schedule. You can target another site explicitly with the standard site parameter:
{% set occurrences = craft.owl.events()
.calendar('concerts')
.site('de')
.rangeStart('today')
.all() %}
Timezones across sites
Because instants are stored in UTC and expanded in the event’s own timezone, a single event reads correctly on every site no matter where its audience is — and DST is handled consistently everywhere.