Try out our new RRULE tool for creating RRULE compatible strings.

The body of the iCalendar object consists of a sequence of calendar properties and one or more calendar components. The calendar properties are attributes that apply to the calendar object 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, free/busy time information, or an alarm.

The body of the iCalendar object is defined by the following notation:

 icalbody   = calprops component

 calprops   = *(
            ;
            ; The following are REQUIRED,
            ; but MUST NOT occur more than once.
            ;
            prodid / version /
            ;
            ; The following are OPTIONAL,
            ; but MUST NOT occur more than once.
            ;
            calscale / method /
            ;
            ; The following are OPTIONAL,
            ; and MAY occur more than once.
            ;
            x-prop / iana-prop
            ;
            )

 component  = 1*(eventc / todoc / journalc / freebusyc /
              timezonec / iana-comp / x-comp)

 iana-comp  = "BEGIN" ":" iana-token CRLF
              1*contentline
              "END" ":" iana-token CRLF

 x-comp     = "BEGIN" ":" x-name CRLF
              1*contentline
              "END" ":" x-name CRLF

An iCalendar object MUST include the "PRODID" and "VERSION" calendar properties. In addition, it MUST include at least one calendar component. Special forms of iCalendar objects are possible to publish just busy time (i.e., only a "VFREEBUSY" calendar component) or time zone (i.e., only a "VTIMEZONE" calendar component) information. In addition, a complex iCalendar object that is used to capture a complete snapshot of the contents of a calendar is possible (e.g., composite of many different calendar components). More commonly, an iCalendar object will consist of just a single "VEVENT", "VTODO", or "VJOURNAL" calendar component. Applications MUST ignore x-comp and iana-comp values they don't recognize. Applications that support importing iCalendar objects SHOULD support all of the component types defined in this document, and SHOULD NOT silently drop any components as that can lead to user data loss.

This document was automatically converted to XHTML using an RFC to HTML converter with the original text document at the Internet Engineering Task Force web site at ietf.org .  The original text document should be referred to if there are any errors or discrepancies found in this document.

Need to test your iCalendar feeds? The iCalendar Validator provides developers and testers a method to validate their iCalendar feeds, which can take data from either a URL, file or text snippet and compare it against the RFC 5545 specification.  We believe we have one of the best iCalendar validation tools available on the internet. More information about the validator can be found here.