Migrating from Solspace Calendar
Owl was designed as a maintained, fairly-priced alternative to Solspace Calendar. If you’re on Solspace today, here’s what changes — mostly for the better.
What you stop paying for
Solspace puts recurrence, ICS export and front-end submission behind its $199 Pro tier. In Owl, all three are in the free Lite edition:
| Feature | Solspace | Owl |
|---|---|---|
| Recurrence | Pro ($199) | Lite (free) |
| ICS export / subscribe | Pro ($199) | Lite (free) |
| Front-end submission | Pro ($199) | Lite (free) |
| GraphQL | Pro ($199) | Lite (free) |
| Commerce ticketing | — | Pro ($149) |
| Price | $99 / $199 | Free / $149 |
Template changes
Owl’s Twig API mirrors Solspace’s parameters on purpose, so most templates are a find-and-replace. The main change is the variable name:
{# Solspace #}
{% set events = craft.calendar.events({
calendar: 'concerts',
rangeStart: 'today',
rangeEnd: 'today +1 month',
}) %}
{# Owl #}
{% set occurrences = craft.owl.events()
.calendar('concerts')
.rangeStart('today')
.rangeEnd('today +1 month')
.all() %}
Concept mapping
- Solspace calendars → Owl calendars (with per-calendar field layouts).
- Solspace events → Owl events (custom Craft elements).
- Solspace occurrences (expanded at query time) → Owl materialised occurrences (indexed rows).
Why the materialised model matters
Solspace expands recurrence rules at query time. Owl pre-materialises occurrences into indexed rows, which makes range queries and pagination faster and gives ticketing a real row to attach to. It’s also what lets Owl harden multisite — see Multisite.
Need a hand?
If you’re planning a migration and have a Solspace template or data question, open an issue on GitHub.