Interactive Playground
Switch views, resize, change the week start and timezone, and toggle the business-hours highlight. Every control maps to a real prop.
This demo always has an in-memory provider, so these props (for a purely local-data consumer) never fire on their own — toggle them to see the built-in spinner/error UI.
Drag an event to move it, drag its edge to resize, drag empty space to create — or click an event for its popover.
July 2026
Recurring Events
Attach a recurrence rule and the engine expands the series across whatever range is visible — no rrule dependency. Supports daily / weekly / monthly / yearly with interval, count, until, byWeekday, byMonthday, and exceptions.
Headless Mode
useCalendar() exposes all state, navigation, and event/recurrence logic with zero rendering, so you can build a fully custom layout. The <Calendar /> component is just the default view over it.
Provider Adapters
A third-party source is a pluggable CalendarProvider, not a hardcoded fetch. The ICS adapter is fully offline; the Google adapter uses the same interface (you supply the OAuth token). Outlook / CalDAV can be added later without touching the component.
Scheduling & CRUD
The playground above is fully wired: drag an event to move it, drag its edge to resize, drag empty space to open a pre-filled create modal, and click an event for its popover with Edit / Delete. Every mutation is emitted (never mutating the source event) and here routed through an in-memory CalendarProvider — the same interface Google Calendar uses.
Custom Slots
Swap individual pieces — the event pill, a day cell, or the whole toolbar — while keeping the default component. Drop to headless mode only when you need a completely different layout.
API Reference
Props, events, and slots for the turnkey component.