jsCalendar
jsCalendar (RFC 8984) defines a JSON data model for calendar data. It provides the same scheduling capabilities as iCalendar — events, tasks, recurrence, time zones, and participant management — but in a format that integrates naturally with web APIs and modern application stacks.
Why jsCalendar
iCalendar’s text-based format, designed in the late 1990s, requires custom parsers and has quirks like line folding, property parameter syntax, and ambiguous date-time representations. jsCalendar addresses these with:
- Native JSON — No custom parser needed. Every programming language has a JSON parser.
- Type safety — Properties use native JSON types (strings, numbers, booleans, arrays, objects) instead of encoded text values.
- Extensibility — Custom properties use the
@typediscriminator pattern, making it easy to add application-specific data without breaking interoperability.
Data Model
{
"@type": "JSCalendar",
"prodId": "ExampleApp/1.0",
"uid": "a1b2c3d4",
"title": "Team Standup",
"start": "2025-03-15T09:00:00",
"duration": "PT30M",
"timeZone": "America/New_York",
"participants": {
"p1": {
"@type": "Participant",
"name": "Alice",
"email": "alice@example.com",
"roles": ["owner"],
"participationStatus": "accepted"
}
},
"alerts": {
"a1": {
"@type": "Alert",
"trigger": "-PT5M"
}
}
}
Core Types
- JSEvent — A calendar event with start time, duration, location, participants, and alerts.
- JSTask — A task or to-do item with due date, priority, and progress tracking.
- Group — A collection of events and/or tasks (e.g., a calendar).
- RecurrenceRule — Defines repeating patterns using
frequency,interval,byDay,byMonth, and other modifiers. - Participant — A person or entity involved in the event, with roles and RSVP status.
- Alert — A reminder or notification trigger, expressed as an offset or absolute time.
Relationship to iCalendar
jsCalendar and iCalendar cover the same domain but are separate formats. A calendar application may support both, converting between them as needed. Every iCalendar property has a jsCalendar equivalent, though the reverse is not always true — jsCalendar includes features (like patching and multilingual titles) that iCalendar does not natively support.