ICalendar


The Internet Calendaring and Scheduling Core Object Specification is a media type which allows users to store and exchange calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information. Files formatted according to the specification usually have an extension of .ics. With supporting software, such as an email reader or calendar application, recipients of an iCalendar data file can respond to the sender easily or counter-propose another meeting date/time. The file format is specified in a proposed internet standard for calendar data exchange.
iCalendar is used and supported by many products, including Google Calendar, Apple Calendar, IBM Notes, Yahoo! Calendar, Evolution, eM Client, Lightning extension for Mozilla Thunderbird and SeaMonkey, and partially by Microsoft Outlook and Novell GroupWise.
iCalendar is designed to be independent of the transport protocol. For example, certain events can be sent by traditional email or whole calendar files can be shared and edited by using a WebDav server, or SyncML. Simple web servers are often used to distribute iCalendar data about an event and to publish busy times of an individual. Publishers can embed iCalendar data in web pages using hCalendar, a 1:1 microformat representation of iCalendar in semantic HTML.

History and design

iCalendar was first created in 1998 by the Calendaring and Scheduling Working Group of the Internet Engineering Task Force, chaired by Anik Ganguly of Open Text Corporation, and was authored by Frank Dawson of Lotus Development Corporation and Derik Stenerson of Microsoft Corporation. iCalendar is heavily based on the earlier vCalendar by the Internet Mail Consortium. iCalendar data files are plain text files with the extension .ics or .ifb. RFC 5545 replaced RFC 2445 in September 2009 and now defines the standard.
iCalendar data have the MIME content type text/calendar.
The filename extension of ics is to be used for files containing calendaring and scheduling information, ifb for files with free or busy time information consistent with this MIME content type. The equivalent file type codes in Apple Macintosh operating system environments are iCal and iFBf.
By default, iCalendar uses the UTF-8 character set; a different character set can be specified using the "charset" MIME parameter.
Each line is terminated by CR+LF. Lines should be limited to 75 octets long. Where a data item is too long to fit on a single line it can be continued on following lines by starting the continuation lines with a space character or a tab character.
Actual line feeds in data items are encoded as a backslash followed by the letter n or N.

Limitations and future

The iCalendar format is designed to transmit calendar-based data, such as events, and intentionally does not describe what to do with that data. Thus, other programming may be needed to negotiate what to do with this data.
iCalendar is meant to "provide the definition of a common format for openly exchanging calendaring and scheduling information across the Internet". While the features most often used by users are widely supported by iCalendar, some more advanced capabilities have problems. For example, most vendors do not support Journals. VTODOs have had conversion problems as well.
iCalendar's calendar is also not compatible with some non-Gregorian calendars such as the lunar calendars used in Israel and Saudi Arabia.
The memo "Calendar Access Protocol" was an initial attempt at a universal system to create real-time calendars. This protocol was eventually abandoned, possibly because of excessive complexity. Regardless, iCalendar-based code such as GroupDAV and CalDAV are now being used more frequently in both client and server software packages.
The IETF "Calendaring and Scheduling Working Group" has published additional proposed revisions to the iCalendar standards, but as of January 2011, the group has 'ended'. The work being picked up by the "Calendaring Extensions Working Group".

Technical specifications

Core object

The top-level element in iCalendar is the Calendaring and Scheduling Core Object, a collection of calendar and scheduling information. Typically, this information will consist of a single iCalendar object. However, multiple iCalendar objects can be grouped together.
The first line must be BEGIN:VCALENDAR, and the last line must be END:VCALENDAR; the contents between these lines is called the "icalbody".

The body MUST include the "PRODID" and "VERSION" calendar properties. In addition, it MUST include at least one calendar component.
VERSION:1.0 was used to specify that data is in the old vCalendar format.
The body of the iCalendar object is made up of a list of calendar properties and one or more calendar components. The calendar properties apply to the entire calendar. The calendar components are several calendar properties which create a calendar schematic. For example, the calendar component can specify an event, a to-do list, a journal entry, time zone information, free/busy time information, or an alarm. Empty lines are not allowed in some versions of usage.
Here is a simple example of an iCalendar object, "Bastille Day Party" event which occurs July 14, 1997 17:00 through July 15, 1997 03:59:59 :

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:uid1@example.com
DTSTAMP:19970714T170000Z
ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
GEO:48.85299;2.36885
END:VEVENT
END:VCALENDAR

There are many different types of components which can be used in iCalendar, as described below.

Events (VEVENT)

VEVENT describes an event, which has a scheduled amount of time on a calendar. Normally, when a user accepts the calendar event, this will cause that time to be considered busy. A VEVENT may include a VALARM which allows an alarm. Such events have a DTSTART which sets a starting time, and a DTEND which sets an ending time. If the calendar event is recurring, DTSTART sets up the start of the first event.
A VALARM code :

BEGIN:VALARM
TRIGGER:-PT1440M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM

VEVENT also is used for calendar events without a specific time, such as anniversaries and daily reminders.
If the user needs to send in a cancellation for an event, the UID should be the same as the original event, and the component properties should be set to cancel Ex.

METHOD:CANCEL
STATUS:CANCELLED

For sending an UPDATE for an event the UID should match the original UID. The other component property to be set is:
SEQUENCE:

I.e., for the first update:
SEQUENCE:1

In Microsoft Outlook, the SUMMARY corresponds to the "Subject" entry in the "Appointment" form, and DESCRIPTION to the descriptive text below it. In addition, Outlook 2002 and Outlook 2003 demand a UID and a DTSTAMP.

To-do (VTODO)

VTODO explains a to-do item, i.e., an action-item or assignment.
Not all calendar applications recognize VTODO items. In particular, Outlook does not export Tasks as VTODO items, and ignores VTODO items in imported calendars.
The following is an example of a to-do due on April 15, 1998. An audio alarm has been specified to remind the calendar user at noon, the day before the to-do is expected to be completed and repeat hourly, four additional times. The SEQUENCE element shows this to-do has been modified twice since it was initially created.

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ABC Corporation//NONSGML My Product//EN
BEGIN:VTODO
DTSTAMP:19980130T134500Z
SEQUENCE:2
UID:uid4@example.com
DUE:19980415T235959
STATUS:NEEDS-ACTION
SUMMARY:Submit Income Taxes
BEGIN:VALARM
ACTION:AUDIO
TRIGGER:19980414T120000
ATTACH;FMTTYPE=audio/basic:http://example.com/pub/audio-
files/ssbanner.aud
REPEAT:4
DURATION:PT1H
END:VALARM
END:VTODO
END:VCALENDAR

Journal entry (VJOURNAL)

VJOURNAL is a journal entry. They attach descriptive text to a particular calendar date, may be used to record a daily record of activities or accomplishments, or describe progress with a related to-do entry. A "VJOURNAL" calendar component does not take up time on a calendar, so it has no effect on free or busy time. In practice, few programs support VJOURNAL entries, although examples exist: Plum Canary's Chirp software uses VTODO and VJOURNAL together. Also KOrganizer from the KDE desktop and Evolution from the GNOME desktop support VJOURNAL.
The following is an example of a journal entry:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ABC Corporation//NONSGML My Product//EN
BEGIN:VJOURNAL
DTSTAMP:19970324T120000Z
UID:uid5@example.com
ORGANIZER:MAILTO:jsmith@example.com
STATUS:DRAFT
CLASS:PUBLIC
CATEGORIES:Project Report, XYZ, Weekly Meeting
DESCRIPTION:Project xyz Review Meeting Minutes\n
Agenda\n1. Review of project version 1.0 requirements.\n2.
Definition
of project processes.\n3. Review of project schedule.\n
Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was
decided that the requirements need to be signed off by
product marketing.\n-Project processes were accepted.\n
-Project schedule needs to account for scheduled holidays
and employee vacation time. Check with HR for specific
dates.\n-New schedule will be distributed by Friday.\n-
Next weeks meeting is cancelled. No meeting until 3/23.
END:VJOURNAL
END:VCALENDAR

Free/busy time (VFREEBUSY)

VFREEBUSY is a request for free/busy time, is a response to a request, or is a published set of busy time.
The following is an example of published busy time information:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//RDU Software//NONSGML HandCal//EN
BEGIN:VFREEBUSY
DTSTAMP:20151013T080000Z
UID:uid6@example.com
ORGANIZER:MAILTO:jsmith@example.com
DTSTART:19980313T141711Z
DTEND:19980410T141711Z
FREEBUSY:19980314T233000Z/19980315T003000Z
FREEBUSY:19980316T153000Z/19980316T163000Z
FREEBUSY:19980318T030000Z/19980318T040000Z
URL:http://www.example.com/calendar/busytime/jsmith.ifb
END:VFREEBUSY
END:VCALENDAR

Other component types

Other component types include VAVAILABILITY, VTIMEZONE and VALARM. Some components can include other components.

Distributing updates

The UID field distributes updates when a scheduled event changes. When the event is first generated a globally unique identifier is created. If a later event is distributed with the same UID, it replaces the original one.

Calendar extensions

vCalendar and iCalendar support private software extensions, with a "X-" prefix, a number of which are in common usage.
Some of these include:
iCalendar's design was based on the previous file format vCalendar created by the Internet Mail Consortium.
Here is an example of information in vCalendar format:

BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
CATEGORIES:MEETING
STATUS:TENTATIVE
DTSTART:19960401T033000Z
DTEND:19960401T043000Z
SUMMARY:Your Proposal Review
DESCRIPTION:Steve and John to review newest proposal material
CLASS:PRIVATE
END:VEVENT
END:VCALENDAR

It has the.vcs file extension.
After iCalendar was released, the Internet Mail Consortium stated that it "hopes that all vCalendar developers take advantage of these new open standards and make their software compatible with both vCalendar 1.0 and iCalendar."

Representations

xCal

xCal is an XML representation of iCalendar data, as defined in.

jCal

jCal is a JSON representation of iCalendar data, as defined in.