FullCalendar alternatives
FullCalendar is a JavaScript event calendar with an MIT-licensed core covering day, week, and month views. If you're looking for an alternative, you're likely trying to add resource scheduling without FullCalendar Premium at $480 per developer per year, or you want stronger export, undo/redo, or AI development tooling.
What to know about FullCalendar alternatives
The table below compares licensing, scheduling features, framework support, package access, and MCP support.
| Feature | Schedule-X | Mobiscroll Event Calendar | DHTMLX Scheduler | Bryntum Calendar |
|---|---|---|---|---|
| License | MIT (core) / Paid per-project (Premium) | Commercial | GPL (Standard) / Commercial | Commercial |
| Free tier | MIT (no watermark) | 90-day trial | GPL Standard | Trial only |
| Resource scheduling | Premium only | ✔️ | Commercial only | ✔️ |
| Drag-and-drop | Premium only (v4) | ✔️ | ✔️ | ✔️ |
| Framework support | React, Angular, Vue, Svelte | React, Angular, Vue | React, Angular, Vue, Svelte | React, Angular, Vue, plain JavaScript |
| Public npm | ✔️ | ❌ (CLI auth) | ✔️ | Trial packages and wrappers |
| Agent support (MCP, skills) | ❌ | ❌ | HTTP MCP server | HTTP MCP server, Claude Code skill |
Schedule-X
Schedule-X is an MIT-licensed JavaScript calendar library with six views: day, week, month grid, month agenda, week agenda, and list. It is built on Preact and ships first-party integrations for React, Angular, Vue, and Svelte. Drag-and-drop, event resize, and resource scheduling moved to the paid Premium tier in v4.
Installing Schedule-X
The core package and default theme are on the public npm registry. Schedule-X v4 uses the Temporal API for configuration dates, so the polyfill is a required peer dependency:
npm install @schedule-x/calendar@4.5.0 @schedule-x/theme-default@4.5.0 temporal-polyfill@0.3.2
The temporal-polyfill/global import must come before creating any dates or rendering the calendar:
<!-- index.html -->
<style>
html, body { margin: 0; height: 100%; }
#calendar-container { width: 100%; height: calc(100vh - 32px); }
</style>
<div id="calendar-container"></div>
import 'temporal-polyfill/global';
import {
createCalendar,
createViewDay,
createViewWeek,
createViewMonthGrid,
createViewMonthAgenda
} from '@schedule-x/calendar';
import '@schedule-x/theme-default/dist/index.css';
const calendar = createCalendar({
views : [createViewWeek(), createViewDay(), createViewMonthGrid(), createViewMonthAgenda()],
defaultView : 'week',
selectedDate : Temporal.PlainDate.from('2026-04-28'),
weekOptions : { gridHeight : 700, scrollToHour : 8 },
events : [
{ id : '1', title : 'Team Standup', start : '2026-04-27 09:00', end : '2026-04-27 09:30' },
{ id : '2', title : 'Sprint Planning', start : '2026-04-27 10:00', end : '2026-04-27 12:00' },
{ id : '3', title : 'Design Review', start : '2026-04-27 14:00', end : '2026-04-27 15:00' },
{ id : '4', title : 'Team Standup', start : '2026-04-28 09:00', end : '2026-04-28 09:30' },
{ id : '5', title : 'API Workshop', start : '2026-04-28 11:00', end : '2026-04-28 13:00' },
{ id : '6', title : 'Client Demo Prep', start : '2026-04-28 15:00', end : '2026-04-28 17:00' },
{ id : '7', title : 'Team Standup', start : '2026-04-29 09:00', end : '2026-04-29 09:30' },
{ id : '8', title : 'Regression Testing', start : '2026-04-29 10:00', end : '2026-04-29 13:00' },
{ id : '9', title : 'Product Review', start : '2026-04-29 14:00', end : '2026-04-29 15:30' },
{ id : '10', title : 'Team Standup', start : '2026-04-30 09:00', end : '2026-04-30 09:30' },
{ id : '11', title : 'Release Planning', start : '2026-04-30 14:00', end : '2026-04-30 16:00' },
{ id : '12', title : 'Team Standup', start : '2026-05-01 09:00', end : '2026-05-01 09:30' },
{ id : '13', title : 'Retrospective', start : '2026-05-01 10:30', end : '2026-05-01 12:00' },
{ id : '14', title : 'UX Research Session', start : '2026-05-01 14:00', end : '2026-05-01 17:00' }
]
});
calendar.render(document.getElementById('calendar-container'));
Three setup details require attention:
- The
temporal-polyfill/globalimport must come before any call toTemporal.*. Without it,Temporalis undefined at runtime. - The
selectedDateproperty accepts aTemporal.PlainDateobject, not a plain string. - Event
startandenduse'YYYY-MM-DD HH:mm'strings for timed events, or'YYYY-MM-DD'for all-day events.

Schedule-X is framework-agnostic with per-project Premium pricing
The functional API (createCalendar(), createViewWeek()) is small and tree-shakable: the production bundle includes only the views imported. Framework support spans React, Angular, Vue, and Svelte, all with first-party integrations.
Premium licensing is per project rather than per developer. The published €479 yearly and €999 lifetime prices cover two to three developers and all Premium packages for that project. Teams with Svelte requirements do not find first-party Svelte support in the other alternatives on this list.
Schedule-X requires a Temporal API polyfill and moved drag-and-drop to Premium in v4
Drag-and-drop and event resize are Premium in v4, having moved from the free tier in v3. Teams upgrading from v3 hit this gate without warning. Resource scheduling is also Premium.
The free core has no Excel export, no PDF export, and no undo/redo. ICS support is import-only. The Temporal API polyfill adds a required dependency. LLM training data still contains string-based Schedule-X examples from v2 and v3, so AI agents without current documentation produce code that fails at runtime. It is the only option here that requires a runtime polyfill as a mandatory peer dependency.
Schedule-X pricing: free MIT core, Premium from €479 per year per project
The MIT-licensed core is free with no per-developer fee, no watermark, and no evaluation restrictions. Premium add-ons require one license per project:
- Yearly: from €479 per year for two to three developers
- Lifetime: from €999 one-time for two to three developers (includes one year of updates)
- Enterprise: custom quote
Premium includes all Premium packages for the licensed project.
Mobiscroll Event Calendar
Mobiscroll Event Calendar is a commercial JavaScript calendar component that ships four configurable view types: calendar, scheduler, timeline, and agenda. Drag-and-drop, resize, and drag-to-create are included. Resources carry a color property that applies automatically to their events.
The Event Calendar is not on the public npm registry and requires CLI authentication before any npm install command works.
Installing Mobiscroll Event Calendar
Two commands set up Mobiscroll access: the global CLI install and a per-project configuration step.
npm install -g @mobiscroll/cli
mobiscroll config javascript
The mobiscroll config javascript command opens a browser to authenticate with Mobiscroll and configures npm to use the Mobiscroll private registry. A trial account is sufficient for evaluation.
The following shows a resource timeline for four team members across April 2026:
<!-- index.html -->
<style>
html, body { margin: 0; padding: 0; height: 100%; font-family: Arial, sans-serif; }
#app { padding: 16px; height: 100vh; box-sizing: border-box; }
#calendar { height: calc(100vh - 32px); }
</style>
<div id="app">
<div id="calendar"></div>
</div>
import * as mobiscroll from '@mobiscroll/javascript';
import '@mobiscroll/javascript/dist/css/mobiscroll.min.css';
mobiscroll.setOptions({ theme: 'material', themeVariant: 'light' });
mobiscroll.eventcalendar('#calendar', {
view : {
timeline : { type : 'month' }
},
selectedDate : new Date(2026, 3, 1).getTime(),
dragToCreate : true,
dragToMove : true,
dragToResize : true,
resources : [
{ id : 1, name : 'Alice (Frontend)', color : '#4f46e5' },
{ id : 2, name : 'Bob (Backend)', color : '#0ea5e9' },
{ id : 3, name : 'Carol (Design)', color : '#10b981' },
{ id : 4, name : 'Dave (QA)', color : '#f59e0b' }
],
data : [
{ id : '1', resource : 1, title : 'UI Component Library', start : new Date(2026, 3, 6), end : new Date(2026, 3, 11) },
{ id : '2', resource : 2, title : 'REST API Development', start : new Date(2026, 3, 6), end : new Date(2026, 3, 11) },
{ id : '3', resource : 3, title : 'Wireframes v2', start : new Date(2026, 3, 6), end : new Date(2026, 3, 9) },
{ id : '4', resource : 4, title : 'Regression Suite', start : new Date(2026, 3, 6), end : new Date(2026, 3, 8) }
]
});
Four setup details require attention:
- The
selectedDateproperty uses a timestamp. Calling.getTime()avoids string parsing and timezone ambiguity. - Events use the
dataproperty, notevents. - The resource field on each event is
resource, notresourceId. - Calling
mobiscroll.setOptions()before any component mount applies the theme globally.

Mobiscroll includes resource scheduling and all view types in a single package
The timeline view, drag-and-drop, drag-to-create, and resize ship in the same package as the time-grid scheduler, calendar, and agenda views. Switching between view types requires only a view config change. Resource scheduling does not require a separate purchase or upgrade.
The view.timeline.type property accepts 'day', 'week', 'month', or 'year', so teams cover daily planning, weekly rosters, monthly roadmaps, and annual capacity views without additional plugins. Unlike Schedule-X, which gates drag-and-drop and resource scheduling behind a paid Premium tier, and DHTMLX Scheduler, which reserves timeline and resource views for its Commercial license, Mobiscroll includes all of these in its base package.
Mobiscroll requires CLI authentication for every developer and CI/CD environment
Every developer and CI/CD environment must complete the CLI authentication step before npm install works. This adds friction at onboarding and in automated pipelines, and any agent that runs npm install @mobiscroll/javascript without prior authentication fails. This is the only product in this comparison that requires private registry authentication before installation, unlike Schedule-X, DHTMLX Scheduler, and Bryntum Calendar, which all offer trial or core packages on the public npm registry.
Event dependencies are not supported. The library has no undo/redo stack. Excel export is absent. Mobiscroll ships no MCP server, no Claude Code skill, and no AI tooling.
Mobiscroll pricing: from $995 per internal project, perpetual license
Mobiscroll uses a per-project perpetual licensing model for internal applications:
- Scheduling and Calendaring: $995 (includes Event Calendar, single internal project)
- Complete: $1,955 (includes source code and priority support)
- Complete Company: $8,955 (multiple internal projects within one organization)
SaaS and multi-customer product licensing uses a subscription model with custom pricing based on customer count. Mobiscroll offers a 90-day trial and a 30-day money-back guarantee on purchases.
DHTMLX Scheduler
DHTMLX Scheduler is a JavaScript event scheduler with a GPL-licensed Standard edition covering day, week, month, year, agenda, and map views. The library uses a global scheduler singleton: all configuration goes on that global object before scheduler.init() is called. Resource timeline views require a Commercial license or higher.
Installing DHTMLX Scheduler
The Standard (GPL) package is on the public npm registry:
npm install dhtmlx-scheduler@7.2.13
This minimal setup shows a week view with events spanning April 27 to May 1:
<!-- index.html -->
<style>
html, body { margin: 0; height: 100%; }
#container { width: 100%; height: 100vh; }
</style>
<div id="container"></div>
import { scheduler } from 'dhtmlx-scheduler';
import 'dhtmlx-scheduler/codebase/dhtmlxscheduler.css';
scheduler.config.date_format = '%Y-%m-%d %H:%i';
scheduler.config.first_hour = 8;
scheduler.config.last_hour = 20;
scheduler.init('container', new Date(2026, 3, 28), 'week');
scheduler.parse([
{ id : 1, text : 'Team Standup', start_date : '2026-04-27 09:00', end_date : '2026-04-27 09:30' },
{ id : 2, text : 'Sprint Planning', start_date : '2026-04-27 10:00', end_date : '2026-04-27 12:00' },
{ id : 3, text : 'Design Review', start_date : '2026-04-27 14:00', end_date : '2026-04-27 15:00' },
{ id : 4, text : 'API Workshop', start_date : '2026-04-28 11:00', end_date : '2026-04-28 13:00' },
{ id : 5, text : 'Client Demo Prep', start_date : '2026-04-28 15:00', end_date : '2026-04-28 17:00' }
]);
Three setup details require attention:
- The default date format is
DD-MM-YYYY HH:mm. Using ISO-style strings requires settingscheduler.config.date_format = '%Y-%m-%d %H:%i'. scheduler.init()takes a container ID, a date object (not a string), and a view name. Passing a date string produces silent failures.scheduler.parse()must come afterscheduler.init().

DHTMLX Scheduler has a free GPL edition, perpetual commercial licenses, and an HTTP MCP server
The GPL Standard edition is free for open-source projects with no time limit and no per-developer fee. Day, week, month, year, agenda, and map views are fully functional in Standard with drag-and-drop, custom tooltips, dark theme, and CSS variable theming.
Paid licenses are perpetual with no annual subscription. The Individual license at $599 covers timeline views and is the lowest entry price among commercial schedulers that include resource views. The public npm registry install works without any private registry configuration, which simplifies CI/CD setup. It is the only option here that ships an HTTP MCP server, giving it a lead over Schedule-X and Mobiscroll for teams integrating AI development tooling, though Bryntum Calendar pairs its HTTP MCP server with an additional Claude Code skill.
DHTMLX ships an HTTP MCP server covering Scheduler, Gantt, Suite, Kanban, Diagram, and Spreadsheet. Registering it in Claude Code takes one command:
claude mcp add --transport http dhtmlx-mcp https://docs.dhtmlx.com/mcp
DHTMLX Scheduler locks timeline and resource views behind the Commercial license
The timeline view, units view, grid view, and week agenda view are all Pro-only. Any application where resource scheduling is the primary use case has a weak starting point in the Standard edition. DHTMLX Scheduler and Schedule-X both keep timeline and resource views outside the free tier, while Mobiscroll and Bryntum Calendar include them in the base package.
Multiple independent scheduler instances on the same page require the Commercial license at $1,299. The global singleton also makes unit testing harder: state persists between tests unless explicitly reset.
DHTMLX Scheduler has no general-purpose undo/redo stack. Online export uses a DHTMLX-hosted service, and GPL output includes a watermark. Watermark-free export is tied to paid-license support.
DHTMLX Scheduler pricing: free GPL, Individual at $599, Commercial at $1,299
The Standard (GPL) edition is free for open-source projects. Commercial licenses are perpetual:
- Individual: $599 (includes Pro features, including the timeline view)
- Commercial: $1,299 (required for multiple independent instances on the same page)
- Enterprise: $2,899
Bryntum Calendar
Bryntum Calendar is a commercial JavaScript calendar component with 11 view types: day, week, month, year, agenda, list, multi-day, resource day, resource week, resource month, and scheduler resource. Resource scheduling, Excel and ICS export, undo/redo, and drag-and-drop are all in the base license. The component sits on Bryntum Grid, so sorting, filtering, and grouping carry over without extra configuration.
Installing Bryntum Calendar
The trial package is on the public npm registry without authentication:
npm install @bryntum/calendar@npm:@bryntum/calendar-trial@7.3.0
This minimal team calendar shows five resources across a work week. Three CSS imports are required in order before instantiation:
<!-- index.html -->
<style>
html, body { margin: 0; padding: 0; }
#app { padding: 1rem; background: #f8f9fa; min-height: 100vh; }
</style>
<div id="app"></div>
import '@bryntum/calendar/fontawesome/css/fontawesome.css';
import '@bryntum/calendar/fontawesome/css/solid.css';
import '@bryntum/calendar/calendar.css';
import '@bryntum/calendar/svalbard-light.css';
import { Calendar } from '@bryntum/calendar';
new Calendar({
appendTo : 'app',
date : '2025-10-12',
height : 700,
mode : 'week',
modes : {
week : { showAllDayHeader : true },
month : true,
day : true
},
resources : [
{ id : 'bryntum', name : 'Bryntum team', eventColor : 'blue' },
{ id : 'hotel', name : 'Hotel Park', eventColor : 'orange' },
{ id : 'michael', name : 'Michael Johnson', eventColor : 'deep-orange' }
],
events : [
{ id : 1, name : 'Hackathon 2025', startDate : '2025-10-11T14:00:00', endDate : '2025-10-18T12:00:00', allDay : true, resourceId : 'bryntum', eventColor : 'green' },
{ id : 2, name : 'Breakfast', startDate : '2025-10-12T09:00:00', endDate : '2025-10-12T10:00:00', resourceId : 'hotel' },
{ id : 3, name : 'Team Scrum', startDate : '2025-10-12T10:00:00', endDate : '2025-10-12T12:00:00', resourceId : 'bryntum' },
{ id : 4, name : 'Scheduler Grid introduction + review', startDate : '2025-10-12T12:00:00', endDate : '2025-10-12T14:00:00', resourceId : 'bryntum' }
]
});
The three imports cover FontAwesome icons, the structural calendar.css, and a theme file. Bryntum ships ten themes across five light/dark pairs, all switchable at runtime via DomHelper.setTheme().

Resource scheduling, export, and undo/redo in the base license
All 11 view types, including the four resource scheduling views, ship in the base license without add-ons. The base license also includes:
- Recurring events and all-day events
- Drag-and-drop across views
- Undo/redo
- Client-side export to Excel, ICS, and print
- 45 built-in locales
The theming system is consistent across the Bryntum product suite (Gantt, Scheduler, Grid, Task Board), so mixing components on the same page requires no visual reconciliation.
Bryntum Calendar: large bundle and separate configuration objects
The trial watermark persists during evaluation, which complicates stakeholder demos before a license purchase. The uncompressed bundle exceeds 4 MB. Applications where initial load time is a constraint should measure this impact early. The API surface (Calendar, ResourceStore, EventStore, and the view configuration layer) takes time to learn relative to lighter alternatives.
Bryntum Calendar pricing: from $680 per developer, perpetual with 12 months of updates
Per-developer licensing starts at $680 for a small team, with a $600-per-developer rate at volume. OEM licensing for SaaS applications requires a separate quote. All licenses are perpetual and include 12 months of updates.
MCP server and Claude Code skill
Bryntum ships two complementary AI tools: an MCP server for documentation retrieval and a Claude Code skill for agent-level judgment about common coding mistakes.
The MCP server at mcp.bryntum.com exposes a search_bryntum_docs tool that returns version-specific documentation, source code examples, and API references for Calendar and the rest of the Bryntum suite. The Claude Code skill covers the mistakes documentation retrieval alone misses: CSS import order, view configuration structure, and the correct dark mode pattern via DomHelper.setTheme().
Bryntum also ships an experimental, disabled-by-default AI chat panel for Calendar. End users give natural language instructions such as "move the team standup to 10 AM every day this week" without touching the interface directly.
Teams that need resource scheduling, export, undo/redo, and AI tooling in one calendar package can start with the Bryntum Calendar free trial.
