28 June 2026
v2 reworks ilamy into a plugin-first calendar: the core is plugin-agnostic, recurrence is now an opt-in plugin, and resources are props on a single IlamyCalendar. New Agenda and drag-to-create plugins ship alongside.
⚠️ Breaking changes
Read the v2 migration guide before upgrading. It walks through every change below with before/after code.
- Plugins are opt-in. Recurring events no longer work out of the box — pass the recurrence plugin (
plugins={[recurrencePlugin()]}) to restore v1 behavior. - Recurrence helpers moved to a subpath — import them from
@ilamy/calendar/plugins/recurrence, not the package root. CalendarEventno longer carries recurrence fields by default — the recurrence plugin adds them via module augmentation.- One unified component. Resources are now props on
IlamyCalendar;IlamyResourceCalendarstays as a deprecated alias. dayjsis now a peer dependency — install it yourself and import locales there.- Deep imports are blocked — import only from the documented entry points (
.,./testing,./plugins/*). - Context method renames on
useIlamyCalendarContext()— see the guide. CalendarViewis nowstring(was a fixed union) so custom views can define their own ids.- Type tightening —
Translationsis a derived alias,datafields areRecord<string, unknown>, andResource.positionwas removed.
Features
- feat: plugin architecture — the core is plugin-agnostic; plugins contribute views, providers, event handling, and event-form sections through the
IlamyPlugin/PluginViewcontract (#183,#192) - feat: Agenda view plugin (
@ilamy/calendar/plugins/agenda) — a list view grouped by day with a configurable day/week/month/N-day window (#196,#202) — Closes#139 - feat: drag-to-create plugin (
@ilamy/calendar/plugins/drag-to-create) — drag across the grid to create a time-range event, with touch support and orientation-aware edge auto-scroll (#214) - feat: custom views — author your own views via the generalized
PluginViewcontract (a columns/layout spec, or a full component) (#192) - feat: redesigned header — an icon-based view switcher with tooltips and a context-aware date picker (day/week/month/year grids) that adapts to the active view (
#198,#220,#225) - feat: add a color picker to the event form (
#221) - feat: add the
getCellClassNameprop for per-cell custom styling (#211) — Thanks @maxdelorme! - feat: recurrence presets and a monthly by-weekday mode (
#187)
Fixes
- fix: resource calendar — the resource picker is no longer missing when creating a new event (
#215) — Thanks @maxdelorme! - fix: recurring override edits are kept across navigation (
#200) — Closes#197 - fix: deleting an overriding occurrence no longer fires a spurious update (
#189,#199) — Thanks @maxdelorme! - fix: resource vertical-grid columns now fill the width and align with the header (
#226) - fix: localization reaches the calendar now that
dayjsis a shared peer dependency (#219) - fix: month/year grid alignment and stale week-view columns (
#190)
Performance
- perf: drop sourcemaps from the published package — install size ~0.71 MB → 159 KB (
#186)