V7 Changelog
Table of Contents
- UI Frameworks
- Themes
- Toolbar
- Events (General)
- Resources (General)
- Calendar Views
- Plugins
- Locales
- Interactions
- Temporal
- Date Formatting
- Premium License
Want the code? Read the instructions
Want the full docs in a non-changelog format? View the docs
Found a bug? Report it on the issue tracker
Related documents:
React
- Feature: React connector is no longer just a connector with internal Preact rendering.
@fullcalendar/reactis now fully implemented in React, including working SSR and StrictMode. - Performance: Less flickering during event rerendering for React connector (#7488)
- Breaking: React >= 17 support (same versions that support hooks)
- Breaking:
FullCalendar.acttesting util removed - Breaking: dependency changes:
temporal-polyfilladded as a peer dependency (read more)@fullcalendar/coreremoved as a peer dependency@fullcalendar/daygridand many other standard packages removed and moved to@fullcalendar/react/*entrypoints (see migration guide)@fullcalendar/resource-timelineand many other premium packages removed and moved to@fullcalendar/react-scheduler, a new package (see migration guide)
- Behavior: For the Remix framework previously required a hack to explicitly define the DOM-placement for styles, but this is no longer needed
Shadcn and MUI theme systems are also newly available for React. See below.
Preact
- Feature: FullCalendar implemented natively with Preact and finally exposed as packages:
@fullcalendar/preactand@fullcalendar/preact-scheduler
Vue
- Breaking: Vue 2 support dropped (
@fullcalendar/vue) - Breaking: dependency changes:
temporal-polyfilladded as a peer dependency (read more)@fullcalendar/coreremoved as a peer dependency@fullcalendar/daygridand many other standard packages removed and moved to@fullcalendar/vue3/*entrypoints (see migration guide)@fullcalendar/resource-timelineand many other premium packages removed and moved to@fullcalendar/vue3-scheduler, a new package (see migration guide)
Angular
- Breaking: supports Angular 16-21
- Breaking: dependency changes:
temporal-polyfilladded as a peer dependency (read more)- The
@fullcalendar/corepeer dependency renamed tofullcalendar @fullcalendar/daygridand many other standard packages removed and moved to@fullcalendar/angular/*entrypoints (see migration guide)@fullcalendar/resource-timelineand many other premium packages removed and moved to@fullcalendar/angular-scheduler, a new package (see migration guide)
Vanilla JS
- Breaking: vanilla JS package renamed from
@fullcalendar/coretofullcalendar - Breaking: for global script tag users,
index.global.jsrenamed toall.global.js - Breaking: dependency changes:
temporal-polyfilladded as a peer dependency (read more)@fullcalendar/daygridand many other standard packages removed and moved tofullcalendar/*entrypoints (see migration guide)@fullcalendar/resource-timelineand many other premium packages removed and moved tofullcalendar-scheduler, a repurposed package (see migration guide)
Web Component
- Breaking: removed
shadowattribute. always uses shadom-DOM now - Breaking: for global script tag users,
index.global.jsrenamed toall.global.js - Breaking: dependency changes:
temporal-polyfilladded as a peer dependency (read more)@fullcalendar/coreremoved as a peer dependency@fullcalendar/daygridand many other standard packages removed and moved to@fullcalendar/web-component/*entrypoints (see migration guide)@fullcalendar/resource-timelineand many other premium packages removed and moved to@fullcalendar/web-component-scheduler, a new package (see migration guide)
Standard Themes
- Feature: 4 new stock themes, viewable on themes.fullcalendar.io
- Monarch — inspired by Material Design 3
- Forma — inspired by Fluent UI
- Breezy — inspired by Tailwind Plus
- Pulse — a minimal Apple-like design
- Feature: dark mode in all themes (#7904)
- Feature: nice tab-focus effects on everything
- Feature: settings to disable outer border on all themes
- Feature: Does not have one baked-in theme that always needs to be loaded, even if customizations
- Breaking: FullCalendar no longer bundles its own CSS. Furthermore, the calendar “theme” has been pulled out from the core, as a plugin. Thus, you must import your own stylesheets. This depends on what theme you choose (see themes.fullcalendar.io)
View each UI frameworks’ docs for installation instruction.
Classic Theme
There is a “Classic” theme that maintains the look of the old calendar. Changes from v6:
- Feature: more spacious look
- Breaking: Column headers in DayGrid and TimeGrid are no longer bold by default.
Shadcn
- Feature: Shadcn support (view docs)
MUI
- Feature: MUI support (view docs)
Bootstrap
- Breaking: Bootstrap 4 theme support removed (
@fullcalendar/bootstrap4) - Breaking: Bootstrap 5 theme support removed (
@fullcalendar/bootstrap5)
Custom Themes
- Feature: Huge selection of className and content-injection settings, consituting a proper theme system
- Feature: Only flat CSS selectors needed. No intentionally complicated CSS selectors to increase precedence
- Feature: Tailwind support
- Breaking: you cannot style an
fc-*class-names like.fc-eventbecause FullCalendar’s default DOM no longer includes them. View the CSS migration guide » - Breaking: customized CSS variables like
--fc-event-bg-colorhave been refactor/renamed. View the CSS migration guide » - Breaking: renamed and modifed many display-hooks with names like
*ClassNames,*Content,*DidMount,*WillUnmount. View the JS API migration guide » - Breaking: removed
Themeclass, registered viathemeClassesplugin-hook. Was an undocumented API in v6. View the JS API migration guide »
Toolbar
- Feature: Infinite control with
useCalendarController(). Only for React and Vue. - Feature: Toolbar CSS is more robust on smaller screens and more customizable for desired responsive behavior (#4638)
- Feature: for built-in toolbars, can disable “List” buttons while returning i18n, set listText:false
- Feature: for built-in toolbars, class-name and mount/unmount hooks on buttons of the toolbar (toolbar render hooks)
- Feature: for built-in toolbars, control whether a button displays text, an icon, or BOTH, and what position of the icon.
buttonDisplayorbuttons[].display. - Feature: button icons now done with SVG instead of glyphicons. Better for Salesforce LWC and Content Security Policy (CSP). Use
buttons[].iconContentsetting (more info) - Feature: additional styling hooks (
toolbarClass,toolbarSectionClass,toolbarTitleClass, etc) - Feature: for built-in toolbars, add custom elements via
toolbarElements - Accessibility: Use aria-label instead of title attribute (#7584)
- Accessibility: Aria improvement for view-switcher within toolbar (#7809, #6522)
- Accessibility: Customizable heading hierarchy level via
headingLevel(#6972) - Behavior: If a button string was added to
headerToolbarorfooterToolbar, but its text was not defined incustomButtons, would display as an empty button (ugly). Now, if no text is defined (inbuttonsmap), will fall back to displaying the button string. - Breaking: Huge change in skeleton. Uses flexbox.
- Breaking:
customButtonsrenamed tobuttons(used for custom and standard buttons) - Breaking:
buttonTextremoved in favor ofbuttons[].text(see migration guide) - Breaking:
buttonIconsremoved in favor ofbuttons[].iconClass(see migration guide) - Breaking: For
headerToolbar/footerToolbar, when calendardirection:'rtl', elements within toolbar sections specified asleftandrightnow span right-to-left (are we sure we want to do this!!??) - Breaking: (all themes) visually capitalizes button name strings, like “Today” versus old “today”
- Breaking: Default
titleFormatfor week views omits day numbers. So now likeJan 2026orJan - Feb 2026instead ofJan 25 – 31, 2026. This is because the day-numbers are presumed displayed in the column headers.
Events (General)
- Feature: set event color, but only for background events (no normal events).
backgroundEventColor - Feature: additional class-name settings for styling subparts of an event element (
eventBeforeClass,eventInnerClass,eventTimeClass, etc) - Feature: additional class-name settings for targeting specific types of events (“block” events, “list-item” events, etc)
- Feature: event-related class-name and mount hooks, callbacks given much more data (
isInteractive,isShort, etc) - Performance: Fixed unnecessary event rendering and calling of
eventContentwhen unrelated events change (#3003, #7650) - Performance: DayGrid/TimeGrid rendering performance gain (#7677)
- Accessibility: Non-editable events should not be rendered as anchor tags (#7675)
- Accessibility: Give
role=buttonto clickable event elements w/o urls (#7567) - Accessibility: Event time order different than DOM order, bad for tabbing (#6943)
- Breaking: Calendar-wide event settings were renamed:
eventClassNames->eventClass,eventBackgroundColor/eventBorderColor->eventColor, andeventTextColor->eventContrastColor(see migration guide). - Breaking: Event input + Event API fields were renamed:
classNames->className,backgroundColor/borderColor->color, andtextColor->contrastColor(see migration guide). - Breaking: Event-source fields were renamed:
classNames->className,backgroundColor/borderColor->color, andtextColor->contrastColor(see migration guide). - Breaking: In v6, for list-item events in DayGrid view, the content generated
eventContentwould clear rendering of the colored dot. In v7,eventContentinjects into the “inner” container (akaeventInnerClass) which does not wrap the dot (akaeventBeforeClass). (Learn how to restore old behavior) (TODO: link to specific restore-behavior docs) - Breaking: Event API’s
.toPlainObject()and.toJSON()methods have modified signatures and return types
Resources (General)
- Breaking: Resource input + Resource API fields were renamed:
eventClassNames->eventClass,eventBackgroundColor/eventBorderColor->eventColor, andeventTextColor->eventContrastColor(see migration guide). - Breaking: The generic
resourceLabel*settings have been replaced with more UI-specific settings (link:resourceDayHeader*and link:resourceCell*) - Breaking: Resource API’s
.toPlainObject()and.toJSON()methods have modified signatures and return types
Calendar Views (General)
- Feature: slimmed down HTML skeleton. Removed nested
<table>s in favor of Flexbox. Accessibility is maintained and even improved in many instances viarole/ariaattributes. - Feature: class-names for table-like elements across views:
tableHeaderClass,tableBodyClass(table render hooks) - Breaking:
viewClassNameswas renamed toviewClass(simple string). See View Render Hooks. - Performance: Less layout thrashing (#4906)
- Accessibility: - Better table semantics for screen readers (#6641, #7656, #7455)
- Accessibility: - Invalid
roleattributes on td/th/tr elements inside a table element (#7568) - Accessibility: - Certain date/time text should be text-selectable (#5628)
- Accessibility: - Improve nav-link aria attributes, give
role=link(#7567) - Accessibility: - All calendar views now pass Axe accessibility testing with the exception of a false-positive scrollbar error, which has a workaround.
- Behavior: no more console.warn on unknown options
Sizing & Scrollbars
- Feature: Improved responsiveness where text-size and date-formatting collapse when a day’s width goes below
dayNarrowWidth - Feature: No longer a need to call
.updateSize()after the page’s dimensions have been programmatically changed. All sizing/positioning of events and views will stay updated automatically. - Bugfix: Layout does not resize to new container width after browser resizing (#6407)
- Bugfix: Dynamic calendar width doesn’t adjust (#5507)
- Bugfix: Adjust calendar sizing when scrollbar width changes (or (de)activated) (#5561)
- Bugfix: Don’t show MacOS/iOS hovering scrollbars in timeline header/left (#5180)
- Bugfix: Disable hovering scrollbars in header/resourceArea (#6894)
- Bugfix: Unnecessary scrollbars in day headers (#6047)
- Breaking:
windowResizeevent removed, no longer fires. To adjust your dimensions in response to the calendar’s dimensions changing, use ResizeObserver. - Breaking:
handleWindowResizesetting removed. Controlled ifwindowResizeshould fire. - Breaking:
windowResizeDelaysetting removed. Controlled how oftenwindowResizeshould fire.
Nav-Links
- Feature: possible to target specific nav-links in the UI
- Breaking:
navLinkClassNamesrenamed tonavLinkClass, accepts only a simple string
Popover & More-Links
- Feature: new class-name settings
moreLinkInnerClass - Feature: view-specific more-link class-name hooks:
columnMoreLink*(TimeGrid) androwMoreLink*(DayGrid/Timeline) - Feature: more data in
moreLink*hooks (ex:numericText,longText,isNarrow) - Breaking:
moreLinkClassNameswas renamed tomoreLinkClass(simple string). See More-Link Render Hooks. - Accessibility: Improve +more link popover-like aria attributes (#7567)
- Accessibility: Tabbable popover close button (#7157)
- Accessibility: Navigate popover items with keyboard (#6624)
Week number
- Breaking: The generic
weekNumber*settings have been replaced with view-specific names: DayGrid usesinlineWeekNumber*, and TimeGrid usesweekNumberHeader*. - Bugfix: date given to week-number hooks was never zoned. Similar to dayHeaderContent ticket (in “Staging”) but for weekNumberContent.
All-Day
- Breaking: The generic
allDay*settings have been replaced with UI-specific names: TimeGrid usesallDayHeader*. (In List view, all-day text now uses listevent*hooks.)
Time Slots
- Feature: new class-name
slotHeaderInnerClass - Feature: new class-name
slotHeaderRowClassfor the row containing slot headers (slot header row render hooks) - Feature:
slotHeader*hooks (previouslyslotLabel*hooks) have more data (ex:isMajor,isNarrow, etc) - Feature:
slotLane*hooks have more data (ex:isMajor,isMinor) - Breaking: slot “label” settings were renamed to slot “header”:
slotLabelClassNames->slotHeaderClass,slotLabelContent->slotHeaderContent,slotLabelDidMount->slotHeaderDidMount, andslotLabelWillUnmount->slotHeaderWillUnmount(see Slot Header Render Hooks). Class-names must be simple strings. - Breaking:
slotLaneClassNameswas renamed toslotLaneClass(simple string), andslotLaneContentwas removed (no replacement). See Slot Lane Render Hooks.
Now-Indicator
- Feature: new class-name
nowIndicatorDotClassfor “dot” next to their now indicator line (dot render hooks) - Breaking: in v6, the
nowIndicator*settings represented BOTH the “arrow”, which appeared in the time axis, and the “line”, which appeared over a day. One would differentiate based ondata.isAxis(now removed). In v7, there are distinct settings for each (header, line, and dot)
Misc Background Fills
- Feature: styling hook for date-span highlight (
highlightClass) (highlight render hooks) - Feature: styling hook for non-business-hours (
nonBusinessClass) (business hours render hooks) - Feature: styling hook for space-filling element (
fillerClass) (filler render hooks). Used in all-day section to offset scrollbar width in timed section. Used in Resource Timeline view when resource-rows don’t fill entire height. - Accessibility: Add
aria-current="date"for “today” highlight (#7502)
DayGrid View
- Feature:
dayCellFormatfor controlling number in cell - Feature: Improved responsiveness where text-size and date-formatting collapse when a day’s width goes below
dayNarrowWidth - Feature:
eventSlicingsetting, which controls whether DayGrid can can put fragments of multi-day events with +more links. Defaults totrue(same behavior as v6). - Feature: More class-name styling hooks (ex:
dayHeaderDividerClass,dayCellTopClass, etc) (day header divider render hooks) - Feature: new row-level class-name hooks for day-grid structure (
dayHeaderRowClass,dayRowClass) - Feature: More data given to
dayCell*hooks (ex:.isMajor,.isNarrow, etc) - Feature: More data given to
inlineWeekNumber*hooks: (ex:.textParts,.isNarrow, etc) - Bugfix: “More” button (events) on smartphones not responsive (#2991)
- Bugfix: Day number in day cells are hidden by vertical scrollbar (#6798)
- Bugfix: Better dayGrid row height,
height:'auto', and +more link behavior (#6033) - Bugfix: Day cells are not always equal height with calendar
height:'auto'(#5762) - Bugfix: Events not rendered when container is resized (#7555)
- Bugfix: Events overflow below day cell with
dayMaxEvents:trueandshowNonCurrentDates:false(#6749) - Bugfix: Events times are cutoff with
eventDisplay:'block'when there is not enough space for the title (#6457) - Bugfix: Compressed space between events in dayGrid when month-start title (#7184)
- Bugfix:
resourceDayGrid-views with no resources shows blank resource row (#7377) - Bugfix & Breaking-API: The
moreLinkClickdate is always UTC, not adjusted by timezone plugins (#7314). If your integration relies on an always-UTC result, and you use a time zone plugin, you must adjust for time zone variations. - Breaking-Visual: When
height:'auto', day cells now maintainaspectRatiowhereas prior, they maintained a min-height of about 3.5em (#7900) - Breaking-Visual: Disabled days (via
validRange) now display text in DayGrid header cells. Still no content within body cells. - Breaking-Visual: The
weekNumbers:truesetting no longer displays week numbers indayGridDayview,dayGridWeekview, or anydayGrid-based view with only one row - Accessibility: Disabled day cells have broken ARIA references (#7379)
- Accessibility: Move aria-label/labelledby away from invalid elements to cells (#7566)
- Print: Event titles should not repeat each day (#6657)
- Breaking: single-row dayGrid (like dayGridWeek) no longer shows month-numbers. week/multi-day views in timegrid/daygrid will have “Sun 8” header by default, instead of “Sun 8/5” header (no more month number. just day-of-month)
- Breaking:
dayHeaderClassNameswas renamed todayHeaderClass(simple string). Horizontal alignment now usesdayHeaderAligninstead of CSS text-align. See Day Header Render Hooks. - Behavior: The
dayHeader*settings now apply to the popover header, which is usually desirable. See Popover CSS migration docs. - Breaking:
dayCellClassNameswas renamed todayCellClass(simple string), anddayCellContentwas renamed todayCellTopContent. See Day Cell Render Hooks. - Behavior: The
dayCell*settings now apply to the popover body, which is usually desirable. See Popover CSS migration docs. - Breaking: The
dayCell*settings previously applied to TimeGrid Day Lane, but no longer. - Breaking: Week numbers in DayGrid were renamed from
weekNumber*(insideviews.dayGrid) to top-level “inline week numbers” /inlineWeekNumber*settings. Class-name settings must be simple strings.
Resource DayGrid View
- Feature: new class-name setting
resourceDayHeaderInnerClass - Feature: more data given to
resourceDayHeader*(formerlyresourceLabel*) hooks (ex:.isToday,.isPast, etc) - Breaking: “Resource labels”, as they render in DayGrid and TimeGrid, are now called “resource day headers”. You can configure them as top-level settings, and class-name settings must be simple strings
TimeGrid View
- Feature: Improved responsiveness where text-size and date-formatting collapse when a day’s width goes below
dayNarrowWidth - Feature: new class-name settings (ex:
weekNumberHeaderInnerClass,allDayHeaderInnerClass, etc) - Feature: the week-number-heeader hooks (
weekNumberHeader*) have more data (ex:.textParts,.isNarrow) - Feature: the all-day header hooks (
allDayHeader*) have more data (ex:.isNarrow) - Feature: the day-lane hooks (
dayLane*) have more data (.isNarrow,.isStack, etc) - Bugfix: TimeGrid “all-day” text is better aligned, better split across multiple lines
- Bugfix & Breaking-API: The
moreLinkClickdate is always UTC, not adjusted by timezone plugins (#7314). If your integration relies on an always-UTC result, and you use a time zone plugin, you must adjust for time zone variations. - Breaking-Visual: Newlines in
allDayTextwill be displayed as line breaks in TimeGrid - Breaking-Visual: TimeGrid overlapping events that previously spanned full column width now have a right margin. This was an accidental regression from v5 → v6, and the v5 behavior is restored (#6569)
- Breaking-Visual: Disabled days (via
validRange) now display text in TimeGrid header cells. Still no content within body cells. - Accessibility: TimeGrid accessibility markup more table-like, puts timed events in single “row” labelled by
timedTextsettin - Print: First page blank when multiple pages (#7007)
- Print: Last event cut-off when multiple pages (#7673)
- Print: Show all time slot lines (#5465). Note: it was impossible to achieve multi-page breaking in Firefox, so falls back to flat list of events without slot lines.
- Breaking: Week numbers in TimeGrid were renamed from
weekNumber*(insideviews.timeGrid) to top-level “week number headers” /weekNumberHeader*settings. Class-name settings must be simple strings. - Breaking: The all-day section label in TimeGrid was renamed from
allDay*(insideviews.timeGrid) to top-level “all day header” /allDayHeader*settings. Class-name settings must be simple strings. - Breaking: TimeGrid lane hooks were renamed from
dayCell*todayLane*(dayCellClassNames->dayLaneClass,dayCellDidMount->dayLaneDidMount,dayCellWillUnmount->dayLaneWillUnmount). Lane class-name settings must be simple strings, anddayCellContentwas removed (no replacement). See Day Lane Render Hooks.
Resource TimeGrid View
- Bugfix:
resourceTimeGrid-views with no resources shows blank resource row (#7377) - Breaking-Visual: The
weekNumbers:truesetting no longer displays week numbers inresourceTimeGridDayview, because x-axis header cell alongside resource names is reserved for a future label
List View
- Feature: better computed listDayFormat/listDaySideFormat for custom-duration-views. instead of just empty values
- Feature: more class-name settings (ex:
listDayClass,listDayEventsClass,noEventsInnerClass, etc) - Feature: more data given to
listDayHeader*callbacks (ex:.textParts,.dayNumbrText, etc) - Accessibility: List-view weekday navLinks should not have
aria-hidden(#7645) - Accessibility: List-view accessibility markup less table-like, more list-like. Removed table pseudo-headers and thus removed the
eventHintandtimeHintlocale settings. - Accessibility: aria structure done differently, as nest list+listitem, instead of table + colgroups
- Behavior: list-event time “column” is hardcoded as 165px width
- Bugfix: List View sticky headers lack bottom border (#7778)
- Breaking: List-view day header hooks moved from
views.list.dayHeader*to top-levellistDayHeader*settings (for example,dayHeaderClassNames->listDayHeaderClass,dayHeaderContent->listDayHeaderContent). See List Day Header Render Hooks. Class-name settings must be simple strings. - Breaking: In List view, all-day event text is no longer customized via generic
allDay*hooks. Use listevent*hooks instead - Breaking:
noEventsClassNameshas been renamed tonoEventsClass, which accepts only a simple string (see no-events render hooks)
MultiMonth View
- Feature: navlinks on single-month title
- Feature: Improved responsiveness where text-size and date-formatting collapse when a day’s width goes below
dayNarrowWidth - Feature: more class-name settings for customization (ex:
singleMonthClass,singleMonthHeaderClass, etc) - Breaking-Visual: The
multiMonthMinWidthpixel value now includes the padding within each month tile - Performance: MultiMonth performance gain, solving “Forced reflow while executing JavaScript took <#> ms” violation (#7209)
- Accessbility: Improve MultiMonth title hierarchy via
role=list(#7537) - Breaking:
multiMonthMinWidthandmultiMonthTitleFormatare renamed tosingleMonthMinWidthandsingleMonthTitleFormat - Breaking:
singleMonthMinWidth(formerlymultiMonthMinWidth) now INCLUDES padding
Timeline View
- Feature: more formal styling hooks for defining space above and below timeline events
- Bugfix & Breaking-API: The
moreLinkClickdate is always UTC, not adjusted by timezone plugins (#7314). If your integration relies on an always-UTC result, and you use a time zone plugin, you must adjust for time zone variations. - Print: Show all time slot lines (#6636, #6802)
Resource Timeline View
- Feature: In Resource Timeline view,
resourceAreaHeaderContentabove columns now stays fixed during horizontal scrolling (#7779) - Feature: If
resourceAreaWidthorresourceAreaColumns.widthspecified as percentage, will persist as percentage after user-resize - Feature: more class-name hooks (ex:
resourceHeaderRowClass,resourceRowClass, etc) - Bugfix: Resource rows don’t adjust height to fit resourceLaneContent (#6103)
- Bugfix: Resource rows don’t render with correct height (#6082)
- Bugfix: Resource-Timeline scrolls down when it shouldn’t, attempting to preserve scroll state (#4443)
- Print: Resource rows no longer break across pages
- Print: Resource-area columns shrink-to-fit based on percentage, saving more space for timeline
- Breaking:
resourceAreaColumnsis renamed toresourceColumns, and related*ClassNameshooks are now*Classstring settings - Breaking: In v6, the
resourceGroupLabel*settings where used to style both row-grouping group headers AS WELL AS column-grouping cells, without any way to distinguish the two from the callbacks themselves. In v7, there are two separate entities for each (resourceGroupHeader*and the genericresourceCell*). Also,.groupValueis killed - Breaking:
resourceLabel*has been replaced by generalizedresourceCell*hooks. If you only want the title cell, branch ondata.field === 'title' - Breaking:
resourceLaneClassNamesis renamed toresourceLaneClass(simple string only), andresourceLaneContentis split intoresourceLaneTopContentandresourceLaneBottomContent(resource lane render hooks) - Breaking:
resourceGroupLaneClassNamesis renamed toresourceGroupLaneClass(simple string only), and group data now usesfieldValueinstead ofgroupValue(resource group lane render hooks)
Custom Views
Custom view “via settings”
- Breaking: In custom view definitions,
.classNames(array) is replaced by.class/.className(single string) - Breaking: The
buttonTextsetting no longer respected. Instead, add to thebuttonsmap
Custom view “via JS”
- Breaking: If using via “plugin”, read in other section how
createPluginnot used anymore
Luxon Plugin
- Breaking: Luxon 1 package removed (
@fullcalendar/luxon) - Breaking: Luxon 2 package removed (
@fullcalendar/luxon2) - Breaking: Luxon 3 package removed (
@fullcalendar/luxon3)
Moment Plugins
- Breaking: moment package removed (
@fullcalendar/moment)- Date formatting-string functionality moved to
@fullcalendar/format-momentplugin (docs) - Date conversion utilities (
toMomentandtoMomentDuration) removed
- Date formatting-string functionality moved to
- Breaking: moment-timezone support removed (
@fullcalendar/moment-timezone) because time zone resolution is now built-in to FullCalendar via thetemporal-polyfillpeer dependency (more info).
iCalendar Plugin
Updates to the @fullcalendar/icalendar plugin:
- Breaking: Your must upgrade the
ical.jspeerDependencyto v2 (#7734)
Custom Plugins
- Breaking: the
createPluginfunction no longer necessary to prepare a plugin. Just pass-in the object
Locales
- Feature: For hint-generating functions (like
prevUnit, formerlybuttonHints.prev), the first arg is a humanized unit string like “Semana” (week in Spanish), which is hard to work with programmatically, but now there is a SECOND arg which is normalized in singular english units, like “week”. - Breaking: Shape of locale data changed (more info)
Interactions
- Breaking: removed
fixedMirrorParentsetting, which would allow developers to attach dragged “mirror” elements to an element other than the calendar root element. Now, dragged mirror elements are always attached to the<body>(or shadow-root in the case of web-component).
Date Formatting
- Feature: date-formatting settings that accept Intl object now accept two additional non-standard properties:
weekdayJustifyandforceCommas(date formatting docs)
Temporal
The temporal-polyfill package is now a peer dependency of all the FullCalendar packages. This means you are required to install it.
The “Temporal” built-in browser API is coming to all modern browsers, and this package is a polyfill for it, which means it allows you to use it before it’s officially supported.
FullCalendar DOES NOT INSTALL IT GLOBALLY but instead uses it internally. For v7, FullCalendar uses the tree-shakeable API, meaning the code-size impact will be minimal and there will be no side-effects.
Though FullCalendar does not install the polyfill globally, you are welcome to do so for your projects:
import 'temporal-polyfill/global' Premium License
While the STANDARD FullCalendar packages have been, and always will be, licensed under the permissive MIT license, the PREMIUM packages have more complex licensing:
| Application Type | Company Type | License |
|---|---|---|
| Closed-source | For-profit | Custom commercial license |
| Closed-source | Not-for-profit | Creative Commons non-commercial license |
| Open-source | For-profit | v6: GPLv3 → v7: AGPLv3 |
| Open-source | Not-for-profit | v6: GPLv3 → v7: AGPLv3 |
In v7, AGPLv3 is replacing GPLv3 as the copyleft license used for open-source projects. If your project’s frontend and backend are open-source and AGPLv3-compliant, use the following license key:
schedulerLicenseKey: 'AGPL-My-Frontend-And-Backend-Are-Open-Source' We’ve discovered a few instances of for-profit companies using FullCalendar Premium in closed-source projects, claiming to be GPLv3-compliant via the SaaS loophole. By switching to AGPLv3, we are closing this loophole and forcing such companies to either purchase a commercial license or stay on v6.
If you are the author of a GPL’d SaaS project that uses FullCalendar Premium and are concerned that you cannot upgrade to v7 due to the license change, please consider the benefits of switching to AGPLv3 yourself.