What is UID?
UID purpose is to define a unique identifier across all the calendar components.
It is basically a random generated sequence that will assure the uniqueness of every calendar component.
This property is mandatory in defining calendar components.
Everyone must assure that this unique identifier is added at the Creation Time of his calendar component, to be sure of the uniqueness of all the components.
An update of the component will not determine an update of the
UID property value.
In order to have certainty of the uniqueness of every
UID, a good algorithm should be created for generating.
An example of an Event containing the
BEGIN:VEVENT SUMMARY:Lunchtime meeting UID:ff808181-1fd7389e-011f-d7389ef9-00000003 DTSTART;TZID=America/New_York:20160420T120000 DURATION:PT1H END:VEVENT
How should an UID be generated
UID globally identifies a calendar component inside a calendaring system.
Because it is randomly generated by the system, the generating mechanism should be created taking into account as many variable as it can in order to generate a unique value.
RFC7986 now recommends that UID values be formed from hex-encoded UUID values.
In addition, if other types of opaque UID values are used, they must have a length less than 255 octets and must use a restricted set of ascii characters.
Previous recommendations in RFC5545 about how to construct the UID value are no longer considered valid, in particular because they represent potential security and privacy threats.
Consequences of not doing it right
UID globally identifies a calendar component, not having a good way of generating this property can cause a lot of problems.
Using a simple
UID generation algorithm might lead to overridden events with the same
UID generated by others using the same generation mechanism.
Every creation of a calendar component with a UID that is already contained by other component will lead in the end to the update of the older component.
Once generated, the calendar component should keep the same
UID all the time, so that no matter which part of the event is changed, the UID-Reference is the same and the calendar can be updated until that event will be deleted.
UID usage in VEVENT, VTODO, and VJOURNAL
UID Property is very important for interoperability between scheduling applications that MUST generate it in
VJOURNAL calendar components.
This property is mandatory for each of the calendar components listed above and should be defined as consistent as possible for correlating scheduling messages.
Handling UIDs inside Recurrent Events
UID is a property that uniquely defined a calendar component at the CREATION Time. No further changes made on that component should affect the value of the
One of the cases is a
RECURRENT-EVENT, which contains a recurrence set of instances and a master event.
In the case one of the instances gets modified a RECURRENT-ID VEVENT is created. The
RECURRENCE-ID field is pointing to the date within the recurring rule but the
UID will remain the same as the master event.
In this scenario, the uniqueness will be assured by the
UID together with the
An example can be seen below:
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//ABC Corporation//NONSGML My Product//EN BEGIN:VEVENT SUMMARY:Lunchtime meeting UID:ff808181-1fd7389e-011f-d7389ef9-00000003 DTSTART;TZID=America/New_York:20160223T120000 DTEND;TZID=America/New_York:20160223T130000 RRULE:FREQ=DAILY LOCATION:Mo's bar - back room END:VEVENT BEGIN:VEVENT SUMMARY:Lunchtime meeting UID:ff808181-1fd7389e-011f-d7389ef9-00000003 RECURRENCE-ID;TZID=America/New_York:20160225T120000 DTSTART;TZID=America/New_York:20160225T110000 DTEND;TZID=America/New_York:20160225T120000 LOCATION:Mo's bar - back room END:VEVENT END:VCALENDAR
On the second event the uniqueness will consist on: