Computer file format. From Wikipedia, the free encyclopedia

Not to be confused with Apple's Calendar application (previously named iCal).

Filename extension
.ical, .ics, .ifb, .icalendar
Internet media type
Type of formatCalendar data exchange
StandardRFC 5545
(Updated by: RFC 5546, RFC 6868, RFC 7529, RFC 7986)
Open format?Yes

iCalendar components and their properties

The Internet Calendaring and Scheduling Core Object Specification (iCalendar) 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.[1] 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 (RFC 5545) for calendar data exchange.[nb 1]

iCalendar is used and supported by many products, including Google Calendar, Apple Calendar (formerly iCal), HCL Domino (formerly IBM Notes and Lotus Notes),[2] Yahoo! Calendar, GNOME 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 (using just the HTTP protocol) 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 (X)HTML.

History and design[edit]

iCalendar was first created in 1998[3] 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 (IMC). iCalendar data files are plain text files with the extension .ics or .ifb (for files containing availability information only). 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 (if the transport method used supports MIME, such as Email or HTTP).

Each line is terminated by CR+LF (in hexadecimal: 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).

Actual line feeds in data items are encoded as a backslash followed by the letter n or N (the bytes 5C 6E or 5C 4E in UTF-8).

Limitations and future[edit]

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.[nb 2]

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 (VJOURNAL). VTODOs have had conversion problems as well.[nb 3]

iCalendar's calendar is also not compatible with some non-Gregorian calendars such as the lunar calendars used in Israel and Saudi Arabia.[nb 4]

The memo "Calendar Access Protocol" (RFC 4324) was an initial attempt at a universal system to create real-time calendars, but was eventually abandoned. In its stead, iCalendar saw some adoption for such purposes with ad hoc extensions such as GroupDAV and CalDAV emerging as informal standards and seeing some adoption in both client and server software packages.

A first effort to simplify iCalendar standards by the IETF "Calendaring and Scheduling Working Group" (ietf-calsify WG) ended in January 2011 without seeing adoption.[4][5] The work was then picked up by the "Calendaring Extensions Working Group" (ietf-calext WG).[6]

Technical specifications[edit]

Core object[edit]

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.[7] Note that while this article frequently uses an email style UID, this is now considered bad practice and a UUID should be used instead.[8]

VERSION is 2.0 for the current iCalendar format. VERSION:1.0 was used to specify that data is in the old vCalendar format.

The body of the iCalendar object (the icalbody) contains single-line Calendar Properties that apply to the entire calendar, as well as one or more blocks of multiple lines that each define a Calendar Component such as an event, journal entry, alarm, or one of the other types described below.[nb 5] Here is a simple example of an iCalendar object with a single calendar containing a single Calendar Component, a "Bastille Day Party" event starting at 5pm on July 14, 1997, and ending at 4am the following morning.

PRODID:-//hacksw/handcal//NONSGML v1.0//EN
ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
SUMMARY:Bastille Day Party

[nb 6]

Date and time format[edit]

The most common representation of date and time is a tz timestamp such as 20010911T124640Z with the format <year (4 digits)><month (2)><day (2)>T<hour (2)><minute (2)><second (2)>Z for a total fixed length of 16 characters. Z indicates the use of UTC (referring to its "***Z**ulu*" time zone).[9] When used in DTSTART and DTEND properties, start times are inclusive while end times are not. This allows an event's end time to be the same as a consecutive event's start without those events overlapping and potentially creating (false) scheduling conflicts.[10]

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.[nb 7] 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 (reminder 1 day before):


VEVENT also is used for calendar events without a specific time, such as anniversaries and daily reminders.[nb 8] 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.


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

SEQUENCE:<Num of Update>

I.e., for the first update:


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)[edit]

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.[11]

The following is an example of a to-do due on April 15, 1998.[nb 6] 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.

PRODID:-//ABC Corporation//NONSGML My Product//EN
SUMMARY:Submit Income Taxes

Journal entry (VJOURNAL)[edit]

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 (just like TRANSPARENT entries). 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:[nb 6]

PRODID:-//ABC Corporation//NONSGML My Product//EN
CATEGORIES:Project Report, XYZ, Weekly Meeting
DESCRIPTION:Project xyz Review Meeting Minutes\n
 Agenda\n1. Review of project version 1.0 requirements.\n2.
 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.

(Note: This example is taken from RFC 2445 with the correction of changing the word 'CATEGORY' to 'CATEGORIES', which is a mistake in the original RFC)

Free/busy time (VFREEBUSY)[edit]

VFREEBUSY is a request for free/busy time, is a response to a request, or is a published set of busy time.[clarification needed] [nb 9]

The following is an example of published busy time information:[nb 10]

PRODID:-//RDU Software//NONSGML HandCal//EN

Other component types[edit]

Other component types include VAVAILABILITY, VTIMEZONE (time zones) and VALARM (alarms). Some components can include other components (VALARM is often included in other components).[nb 11]

Distributing updates[edit]

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.[nb 12]

Calendar extensions[edit]

vCalendar and iCalendar support private software extensions, with a "X-" prefix, a number of which are in common usage.

Some of these include:

vCalendar 1.0[edit]

iCalendar's design was based on the previous file format vCalendar created by the Internet Mail Consortium (IMC).[13]

Here is an example of information in vCalendar format:

SUMMARY:Your Proposal Review
DESCRIPTION:Steve and John to review newest proposal material

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."[14]



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


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


hCalendar is an (x)HTML representation of a subset of iCalendar data using microformats.


hEvent is an HTML representation of a subset of iCalendar data using Microformats addressing some accessibility concerns with the hCalendar format.

See also[edit]


  1. 1(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-2 "Jump up") The standard and file type are sometimes referred to as "iCal", which was the name of the Apple Inc. calendar program until 2012 (see iCal), which provides one of the implementations of the standard.

  2. 2(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-5 "Jump up") A companion standard, "iCalendar Transport-Independent Interoperability" (iTIP) (RFC 2446), defines a protocol for exchanging iCalendar objects for collaborative calendaring and scheduling between "Calendar Users" (CUs) facilitated by an "Organizer" initiating the exchange of data. 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) explains how iCalendar interacts with other calendar computer language (current and future).

  3. 3(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-6 "Jump up") CalConnect, 2004

  4. 4(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-7 "Jump up") 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.

  5. 5(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-13 "Jump up") Note that Apple iCal and Microsoft Outlook use additional descriptors, as follows, to provide further information about the calendar.
    X-WR-CALNAME:Revolution Parties
    X-WR-CALDESC:Celebrations of various revolutionary activities.

    Where the X-WR-RELCALID is a UUID.

  6. ^ Jump up to: a b c From RFC 2445

  7. 6(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-17 "Jump up") But an event can be set to be "TRANSPARENT" to change this interpretation.

  8. 7(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-18 "Jump up") 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.

  9. 8(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-20 "Jump up") As described in RFC 2445:

    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.

  10. 9(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-21 "Jump up") From RFC 2445 The iCalendar object might be placed at some URL with the extension ".ifb"

  11. 10(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-22 "Jump up") Some components are often defined to support other components defined after them (VTIMEZONE is often used this way).[clarification needed]

  12. 11(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-23 "Jump up") An example UID might be "Y2007S2C131M5@example.edu", for the 5th meeting of class 131 in semester 2 at a hypothetical college.


  1. 12(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-1 "Jump up") Desruisseaux, Bernard, ed. (September 2009). Internet Calendaring and Scheduling Core Object Specification (iCalendar). Internet Engineering Task Force. doi:10.17487/RFC5545. RFC 5545. Retrieved 2018-12-07.
  2. 13(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-3 "Jump up") "IBM Lotus Notes 8.5 iCalendar: Interoperability, implementation, and application". IBM DeveloperWorks. Retrieved 2015-04-05.
  3. 14(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-4 "Jump up") "iCalendar.org". Z Content. Retrieved 2018-03-28.
  4. 15(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-8 "Jump up") "Calendaring and Scheduling Standards Simplification (calsify)". IETF. Retrieved 2015-04-05.
  5. 16(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-9 "Jump up") Lear, Eliot (2010-12-10). "the end of calsify working group– not the end of the mailing list". ietf-calsify mailing list. Retrieved 2015-04-05.
  6. 17(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-10 "Jump up") "Calendaring Extensions (calext)". IETF. Retrieved 2016-12-01.
  7. 18(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-11 "Jump up") "Section 3.6 Calendar Components". Internet Calendaring and Scheduling Core Object Specification (iCalendar). sec. 3.6. doi:10.17487/RFC5545. RFC 5545. Retrieved 1 July 2020.
  8. 19(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-12 "Jump up") "UID Property". iCalendar Property Extensions. sec. 5.3. doi:10.17487/RFC7986. RFC 7986. Retrieved 3 October 2022.
  9. 20(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-15 "Jump up") "Section 3.3.5 Date-Time". Internet Calendaring and Scheduling Core Object Specification (iCalendar). sec. 3.3.5. doi:10.17487/RFC5545. RFC 5545.
  10. 21(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-16 "Jump up") "Section 3.6.1 Event Components". Internet Calendaring and Scheduling Core Object Specification (iCalendar). sec. 3.6.1. doi:10.17487/RFC5545. RFC 5545.
  11. 22(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-19 "Jump up") "[RFC5546] Section 3.4 Methods for VTODO Components". Microsoft Developer Network. Retrieved 7 August 2015.
  12. 23(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-24 "Jump up") "[MS-OXCICAL]: Property: X-WR-RELCALID". msdn.microsoft.com. Retrieved 2016-02-23.
  13. 24(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-25 "Jump up") "vCalendar: The Electronic Calendaring and Scheduling Exchange Format, Version 1.0". Internet Mail Consortium. 1996-09-18. Archived from the original on 2016-03-21. Retrieved 2018-03-28.
  14. 25(chrome-extension://pcmpcfapbekmbjjkdalcgopdkipoggdi/_generated_background_page.html#cite_ref-26 "Jump up") "Personal Data Interchange - vCard and vCalendar". Internet Mail Consortium. 2006-11-26. Archived from the original on 2015-09-06. Retrieved 2016-02-28.

External links[edit]

iCalendar - Wikipedia

  1.  ↩︎

  2.  ↩︎

  3.  ↩︎

  4.  ↩︎

  5.  ↩︎

  6.  ↩︎

  7.  ↩︎

  8.  ↩︎

  9.  ↩︎

  10.  ↩︎

  11.  ↩︎

  12.  ↩︎

  13.  ↩︎

  14.  ↩︎

  15.  ↩︎

  16.  ↩︎

  17.  ↩︎

  18.  ↩︎

  19.  ↩︎

  20.  ↩︎

  21.  ↩︎

  22.  ↩︎

  23.  ↩︎

  24.  ↩︎

  25.  ↩︎