Zero-dependency calendar logic for enterprise applications. Runs anywhere JavaScript runs: browser, Node, serverless, and edge.
Complete control over calendar state, navigation, and rendering logic without DOM dependencies.
Loading...
import { Calendar } from '@forcecalendar/core';
const calendar = new Calendar({
locale: 'en-US',
timeZone: 'America/New_York',
weekStartsOn: 0
});
calendar.setView('month');
calendar.goToDate(new Date('2026-03-16'));
calendar.on('viewChange', ({ view, date }) => {
console.log('View:', view, date);
});Every class exported from @forcecalendar/core.
CalendarCore calendar engine with state, navigation, timezone conversion, and event management
EventEvent model with validation, normalization, and timezone-aware accessors
EventStoreIndexed event storage with range queries and conflict detection
StateManagerReactive state management with subscribe/unsubscribe and history
DateUtilsDate math, formatting, and week/month grid helpers
EventSearchFull-text search across event titles, descriptions, and fields
ICSParserRFC 5545 iCalendar import and export
RecurrenceEngineRRULE expansion with exceptions, overrides, and hard occurrence caps
EnhancedCalendarCalendar extended with worker-backed search and RecurrenceEngineV2
ICSHandlerHigh-level ICS import/export API over ICSParser, including URL fetch
RecurrenceEngineV2Extended recurrence engine with modified instances and complex DST handling
RRuleParserStandalone RFC 5545 RRULE string parser
SearchWorkerManagerOffloads search indexing and queries to a Web Worker
InvertedIndexTerm-to-event index powering fast full-text lookups
TimezoneManagerIANA timezone conversions, DST detection, and offset math
ConflictDetectorTime, attendee, and resource overlap detection across event sets
Full API documentation at docs.forcecalendar.org/docs/api
npm install @forcecalendar/coreimport { Calendar } from '@forcecalendar/core';
const calendar = new Calendar({
locale: 'en-US',
timeZone: 'America/New_York'
});calendar.addEvent({
title: 'Team Meeting',
start: new Date('2026-03-16T10:00:00'),
end: new Date('2026-03-16T11:00:00')
});