calendar-tsx

Comparison

How calendar-tsx differs from FullCalendar and Schedule-X.

FullCalendar and Schedule-X render a finished calendar UI that you configure. calendar-tsx computes the layout and gives you unstyled parts to render it, so you write more markup and own every pixel. Pick it when the calendar has to match your design system, or when you want Temporal values end to end. Pick one of the others when a ready-made calendar with a toolbar, popovers and modals is what you need. calendar-tsx is experimental: its API can change in any release.

Checked against FullCalendar v7.1.3 and Schedule-X 4.9.1 on 2026-10-24. Both projects change; follow the linked sources for current details.

โœ… supported ยท ๐Ÿ’Ž paid plan ยท โŒ not supported ยท โ” not documented

At a glance

calendar-tsxFullCalendarSchedule-X
Licenseโœ… MIT, every packageMIT core; resources and timelines need ๐Ÿ’Ž PremiumMIT core; resources and interactions need ๐Ÿ’Ž Premium
RenderingHeadless model plus unstyled partsRenders its own DOMRenders its own UI with Preact
FrameworksReact, Solid; the core works anywhereReact, Vue, Angular, Preact, Web Component, Salesforce LWC, vanilla JSReact, Vue, Angular, Svelte, Preact, vanilla JS
Dates in the APITemporal in and outJS Date in and out; Temporal only inside (docs)Temporal PlainDate and ZonedDateTime (docs)

Views

calendar-tsxFullCalendarSchedule-X
Month, week, dayโœ… Yesโœ… Yesโœ… Yes
List or agendaโœ… Yes, any duration from a day to a yearโœ… Yesโœ… List, week agenda and month agenda
Multi-month and yearโœ… Yes, day grids by months, quarter or yearโœ… Multi-month stack and gridโœ… Year grid
Timelineโœ… Yes, day to year periods๐Ÿ’Ž Premium๐Ÿ’Ž Premium, hourly and daily
Resource columnsโœ… Yes, in time grids, day grids and lists; rows in timelines๐Ÿ’Ž Premium๐Ÿ’Ž Premium, time grid
Nested resourcesโœ… parentId hierarchy; expandable timeline rows๐Ÿ’Ž Premium๐Ÿ’Ž Premium
Custom viewsโœ… Your own layout features, in any frameworkโœ… Yes; React and Preact views can be componentsโœ… Preact only

Interactions

calendar-tsxFullCalendarSchedule-X
Drag and drop, resizeโœ… Yes, opt-in featuresโœ… Yes๐Ÿ’Ž Premium
Range selectionโœ… Yesโœ… Yes๐Ÿ’Ž Premium, the Draw plugin creates events by dragging
Drag in from outsideโœ… Yes, with relocation policiesโœ… Yes, Draggable๐Ÿ’Ž Premium, drag to create
Between calendarsโœ… Yes, event transfersโœ… Yes, eventLeave and eventReceiveโ” Not documented
Touchโœ… Hold to start, with auto-scrollโœ… Long pressโ” Not documented
Validationโœ… Constraints, business hours, overlap rulesโœ… Constraint, overlap and allow callbacks for events and selectionsโœ… onBeforeEventUpdate, for the Premium drag and resize

The calendar-tsx features report proposals and never change your events: you apply them. See selection and event editing and external drops and transfers.

Data and time

calendar-tsxFullCalendarSchedule-X
Time zonesโœ… Any IANA zone; events are converted to it and laid out thereโœ… local, UTC or an IANA zone; returned dates support only local and UTC (docs)โœ… IANA zone, UTC by default
Recurrenceโœ… Daily and weekly in the core; full RRULE in @calendar-tsx/rruleโœ… Simple built-in rules; @fullcalendar/rrule pluginโœ… Partial RRULE in @schedule-x/event-recurrence
Background eventsโœ… Yes, including timelinesโœ… Yesโœ… Yes, with RRULE
Business hoursโœ… Background layers, per resource, inverse or weeklyโœ… businessHours, per resourceโ” Not documented; dayBoundaries limits visible hours

Styling and rendering

calendar-tsxFullCalendarSchedule-X
Default lookNone; optional CSS themesFive stock themes with dark modeDefault theme, an unofficial shadcn theme, isDark
Design systemsThemes that read shadcn/ui and Material UI variables, Tailwind, or your own CSSClass-name props, shadcn, MUI and Bootstrap integrations--sx-color-* CSS variables
Event contentYou render every part*Content hooks per frameworkCustom components per slot, _customContent
Toolbar, popoversYou build them; parts emit the dataBuilt inBuilt-in header and event modal; interactive modal and sidebar are Premium
Server renderingYes, with a seeded initialNowYes, in ReactNext.js needs 'use client'

See themes and server rendering.

Moving from FullCalendar

See migrating from FullCalendar for option, event and callback mappings.