Information About

Icalendar





File Information

  Name iCalendar
  Extension ical ics<br />icalendar
  Mime text/calendar
  Genre Calendar data exchange
  Standard RFC 2445


iCalendar is a standard (RFC 2445) for Calendar data exchange. The standard is sometimes referred to as "iCal", which also is the name of the Apple, Inc. calendar program (see ICal ) that provides one of the implementations of the standard.

iCalendar allows users to send meeting requests and tasks to other users through email. Recipients of the iCalendar email (with supported software) can respond to the sender easily or counter propose another meeting date/time.

It is implemented/supported by a large number of products, including 37signals Backpack, 30 Boxes , Apple 's ICal application, Darwin Calendar Server , Contactizer and IPod . Buni Meldware Communication Suite , Chandler , Drupal with its event module, TYPO3 via its Calendar Base Extension, Citadel , Facebook , FirstClass , Google Calendar , Horde , Jalios JCMS , Joyent Connector, KOrganizer , Lotus Notes , Microsoft Entourage , Microsoft Exchange , Mozilla Calendar (including Mozilla Sunbird and Lightning ), Mulberry , Novell Evolution , Novell GroupWise , Nuvvo , Simple Groupware , SOHO Organizer , Sun Java Calendar Server , Upcoming.org , Windows Calendar , Webical , Zimbra Collaboration Suite , and, in its latest version of the software, Microsoft Outlook ( See Below ). BlackBerry , Internet edition from v2.3 onwards now recognizes iCalendar and iCalendar invites can be sent and received with the Blackberry Server. Notably missing from this list is the Palm Desktop , Palm (PDA) , and Now-Up-To-Date.

iCalendar data is typically exchanged using traditional email, but the standard is designed to be independent of the transport protocol. For example, it can also be shared and edited by using a representation of iCalendar in semantic (X)HTML .


SPECIFICATION BASICS

The iCalendar specification is a result of the work of the Internet Engineering Task Force Calendaring and Scheduling Working Group (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 industry specification by the Internet Mail Consortium (IMC). After iCalendar was released, IMC 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."

iCalendar data has the MIME content type ''text/calendar''.

The file extension of "ics" is to be used to designate a file containing (an arbitrary set of) calendaring and scheduling information consistent with this MIME content type.

The file extension of "ifb" is to be used to designate a file containing free or busy time information consistent with this MIME content type.

The file type code of "iCal" is to be used in Apple Macintosh operating system environments to designate a file containing calendaring and scheduling information consistent with this MIME media type.

The file type code of "iFBf" is to be used in Apple Macintosh operating system environments to designate a file containing free or busy time information consistent with this MIME media type.

iCalendar data files are ASCII plain text files with each line terminated by CRLF (in hex: 0D0A). Lines should be limited to 75 octets (not characters) 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 (in hex: 20) or a tab character (in hex: 09). If a data item needs to contain a linefeed this is encoded as
(in hex: 5C6E).


CORE OBJECT

The top-level object in iCalendar is the Calendaring and Scheduling Core Object. This is a collection of calendaring and scheduling information. Typically, this information
will consist of a single iCalendar object. However, multiple iCalendar objects can be sequentially 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 of the iCalendar object (the icalbody) consists of a sequence of calendar properties and one or more calendar components. The calendar properties are attributes that apply to the calendar as a whole. The calendar components are collections of properties that express a particular calendar semantic. For example, the calendar component can specify an event, a to-do, a journal entry, time zone information, or free/busy time information, or an alarm.

Here is a simple example (from RFC 2445 or RFC2445 Syntax Reference ) of an iCalendar object that defines a "Bastille Day Party" event occurring from July 14, 1997 17:00 (UTC) through July 15, 1997 03:59:59 (UTC):

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR

There are many different types of components defined in the standard, as described below.


Events (VEVENT)

A "VEVENT" component provides a grouping of component properties that describe an event that represents a scheduled amount of time on a calendar. Normally, an accepted event will cause that time to be considered busy, but an event can be set to be "TRANSPARENT" to change this interpretation. A VEVENT may include a VALARM calendar component to define alarms. Such events have a DTSTART property that defines its starting time, and a DTEND property defining its ending time. If the event is recurring, DTSTART defines the start of the first event.

Repeated events without a specific time, such as anniversaries and daily reminders, are also represented using VEVENT. These events would have a DATE value type for the "DTSTART" property instead of the default DATE-TIME, and need not include a "DTEND" property


To-do (VTODO)

The VTODO component describes a to-do item, i.e., an action-item or assignment.

The following is an example of a to-do due on April 15, 1998, from RFC 2445 or RFC2445 Syntax Reference . 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 to-do definition 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@host1.com
ORGANIZER:MAILTO:unclesam@us.gov
ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com
DUE:19980415T235959
STATUS:NEEDS-ACTION
SUMMARY:Submit Income Taxes
BEGIN:VALARM
ACTION:AUDIO
TRIGGER:19980403T120000
ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-
files/ssbanner.aud
REPEAT:4
DURATION:PT1H
END:VALARM
END:VTODO
END:VCALENDAR


Journal entry (VJOURNAL)

VJOURNAL components describe a journal entry. They simply attach descriptive text notes with a particular calendar date, might 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 (just like TRANSPARENT entries). In practice, few implementations of iCalendar support VJOURNAL entries, though examples exist: Plum Canary's Chirp software uses VTODO and VJOURNAL together as the data format for a project task status management solution.

The following is an example of a journal entry, from RFC 2445 or RFC2445 Syntax Reference :

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ABC Corporation//NONSGML My Product//EN
BEGIN:VJOURNAL
DTSTAMP:19970324T120000Z
UID:uid5@host1.com
ORGANIZER:MAILTO:jsmith@host.com
STATUS:DRAFT
CLASS:PUBLIC
CATEGORY:Project Report, XYZ, Weekly Meeting
DESCRIPTION:Project xyz Review Meeting Minutes

Agenda
1. Review of project version 1.0 requirements.
2.
Definition
of project processes.
3. Review of project schedule.

Participants: John Smith, Jane Doe, Jim Dandy
-It was
decided that the requirements need to be signed off by
product marketing.
-Project processes were accepted.

-Project schedule needs to account for scheduled holidays
and employee vacation time. Check with HR for specific
dates.
-New schedule will be distributed by Friday.
-
Next weeks meeting is cancelled. No meeting until 3/23.
END:VJOURNAL
END:VCALENDAR


Free/busy time (VFREEBUSY)


A VFREEBUSY component describes either a request for free/busy time, describes a response to a request, or describes a published set of busy time.

As described in RFC 2445 or RFC2445 Syntax Reference :

When used to request free/busy time information, the "ATTENDEE" property specifies the calendar users whose free/busy time is being requested; the "ORGANIZER" property specifies the calendar user who is requesting the free/busy time; the "DTSTART" and "DTEND" properties specify the window of time for which the free/busy time is being requested; the "UID" and "DTSTAMP" properties are specified to assist in proper sequencing of multiple free/busy time requests.


When used to reply to a request for free/busy time, the "ATTENDEE" property specifies the calendar user responding to the free/busy time request; the "ORGANIZER" property specifies the calendar user that originally requested the free/busy time; the "FREEBUSY" property specifies the free/busy time information (if it exists); and the "UID" and "DTSTAMP" properties are specified to assist in proper sequencing of multiple free/busy time replies.


When used to publish busy time, the "ORGANIZER" property specifies the calendar user associated with the published busy time; the "DTSTART" and "DTEND" properties specify an inclusive time window that surrounds the busy time information; the "FREEBUSY" property specifies the published busy time information; and the "DTSTAMP" property specifies the date/time that iCalendar object was created.


The following is an example of published busy time information from RFC 2445 or RFC2445 Syntax Reference . The
iCalendar object might be placed at some URL with the extension ".ifb":

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


Other component types

Other component types defined by the standard include VTIMEZONE (for defining time zones) and '''VALARM''' (for defining alarms). Note that some components can include other components (VALARM is often included in other components), and some components are often defined to support other components defined after them (VTIMEZONE is often used this way).


Distributing updates

The UID field is used to facilitate distribution of updates, should a scheduled event change. When the event is first generated a type of Globally Unique identifier should be generated. If a later event is distributed with the same UID, it is meant to replace the original one. An example UID might be "Y2007S2C131M5@bigcitycollege.org", for the 5th meeting of class 131 in semester 2 at a hypothetical college.


ICALENDAR DATA EXCHANGE

The iCalendar format is designed to describe calendar-based data (like events), and intentionally does not describe what to do with that data. Thus, other protocols may be needed to negotiate what to do with this data.

A companion standard, "iCalendar Transport-Independent Interoperability" (iTIP) (RFC 2446), defines a protocol for exchanging iCalendar objects for the purposes of group calendaring and scheduling between "Calendar Users" (CUs); whoever initiates the exchange of data takes on the role of the "Organizer". This standard defines methods such as PUBLISH, REQUEST, REPLY, ADD, CANCEL, REFRESH, COUNTER (to negotiate a change in the entry), and DECLINE-COUNTER (to decline the counter-proposal).

Another companion standard, "iCalendar Message-based Interoperability Protocol (IMIP)" (RFC 2447), defines a standard method for implementing iTIP on standard Internet email-based transports.

The "Guide to Internet Calendaring" (RFC 3283) describes the relationship of iCalendar to various related standards (current and future).

The iCalendar format was designed to support interoperability of calendar data; while the features most often used by users are widely supported by iCalendar implementations and can be exchanged, interoperation between implementations of some more advanced capabilities is spotty. Most vendors do not support Journals (VJOURNAL). Recurring and repeating meetings still have a "bit of mystery and ambiguity associated with them", causing some interoperability problems in some cases. VTODO's have had interoperability problems as well. (CalConnect, 2004).

iCalendar also is not suitable for calendaring in some non-Gregorian calendar scales such as the lunar calendars used in Israel or Saudi Arabia. Although there exist one-to-one mappings between Gregorian and many other calendar scales, the lack of defined CALSCALE values for those calendars and limitations in various date fields can make native support impossible. For example the Hebrew Calendar year may contain either 12 or 13 months, and the Japanese Emperor-based calendar scale contains many eras.

"Calendar Access Protocol" (RFC 4324) was an initial attempt at a universal methodology for implementing real-time calendaring. This protocol was eventually set aside, having never enjoyed any real implementations, possibly due to excessive complexity. Pragmatic iCalendar-based transports such as GroupDAV and CalDAV are now appearing in both client and server software packages, and appear to be gaining traction as common calendar access methods for standards compliant software.

The IETF Calendaring and Scheduling (calsify) Working Group is in the process of revising the iCalendar standards. Nearly all of the work focuses on clarifications to the previous standards, and is often based on work done by another group, the Calendaring and Scheduling Consortium , also known as Calconnect . Formed in 2004, Calconnect addresses interoperability issues through scheduled interoperability tests and through technical committees and surveys to determine actual use cases. Any organization or individual is eligible to join the consortium.


MICROSOFT OUTLOOK

Microsoft Outlook also supports iCalendar, though there are some known problems with its support (many of which can be fixed by installing patches) in particular, Outlook 2000 users cannot process iCalendar files created by Outlook 2002 without patching because Outlook 2000 has an error in its iCalendar implementation [http://support.microsoft.com/default.aspx?scid=kb;en-us;307313 .
Users of Microsoft Outlook 2003 can install RemoteCalendars
in order to subscribe, delete and reload a generic iCalendar through the web.

On import of some iCalendar files, Outlook 2003 will complain "You have attempted to save a recurring Lunar appointment in iCalendar format. To avoid this error, set the appointment option to Gregorian instead of Lunar.". Outlook requires the iCalendar file have lines UID, DTSTAMP, and METHOD:PUBLISH in order to avoid this nonsense error. This error will also be presented if there are other errors in the iCalendar file, such as a DESCRIPTION-tag that spans multiple lines without proper folding.

Outlook 2007 is compatible with the calendaring component of the iCalendar protocol only. Users can add calendars under Account Options and set how often they should be updated. Individual calendars are shown as a list of checkboxes so that they can be viewed or hidden without unsubscribing, and they can be viewed as separate tabs or overlaid into a single calendar. Because Outlook only synchronises calendars, the other components of this protocol such as VTODO, VJOURNAL, etc. are not supported by Outlook 2007, even though equivalent functionality is offered in call cases.

Windows Calendar , found in the newly released Windows Vista, also supports iCalendar.


LOTUS NOTES

IBM Lotus Notes also supports iCalendar since version 6.0 Details can be found by searching for iCal on IBM Lotus Notes support site[http://www-950.ibm.com/search/SupportSearchWeb/SupportSearch?pageCode=SBS&brand=lotus .


MELDWARE COMMUNICATION SUITE


Buni Meldware Communication Suite supports iCalendar feeds. It also supports an embedded iCalendar format via WCAP .


NOVELL GROUPWISE

Novell GroupWise 7.0.1 and above supports iCalendar through the GroupWise Internet Agent (GWIA). iCal messages appear as any other appointment and can be Accepted or Declined from within the native GroupWise client (Windows, Mac, Linux) or from GroupWise WebAccess.

GWIA Overview, iCal section


ORACLE COLLABORATION SUITE

Oracle Collaboration Suite supports iCalendar and has a Java API to help server invocation.


SEE ALSO



EXTERNAL LINKS



Language Support for iCalendar



Sources for Published iCalendars

  • DateDex - Calendar directory, listing global events. Download / Subscribe to calendars in iCalendar format.

  • EventSetter.com - A free online calendar for finding and promoting upcoming events in hundreds of cities across North America, Europe, Australia, and New Zealand. Download any event listing in iCalendar format.

  • iCalShare.com - the largest directory of shared calendars on the web, with over 4500 calendars in more than 35 different categories

  • Memotoo.com - manage and share your calendar/notes - export/import iCalendar format - sync with Mozilla Sunbird and Calendar project for Mozilla Thunderbird and Mozilla Firefox

  • Project24 - site for downloading / subscribing dynamically generated calendars