Skip to content
Add to Calendar Lab

Guides · Updated

What is an .ics file and how does it work?

An .ics file is a plain-text calendar file in the iCalendar format defined by RFC 5545. It holds one or more events (VEVENT) with a UID, timestamp, start and end time. Opening it copies the event into a calendar once; later changes only arrive through a subscribed feed or a new invitation.

What is an .ics file?

An .ics file is a text file in the iCalendar format, defined in RFC 5545 (September 2009). Google Calendar, Outlook, Apple Calendar and most other calendar apps can import it. Its media type is text/calendar and its default character set is UTF-8 (section 3.1.4).

The file is a set of nested blocks. A VCALENDAR wraps everything, and each event is a VEVENT inside it. Other components include VTODO (tasks) and VTIMEZONE (time zone rules).

What does a minimal valid .ics file look like?

This is a complete one-hour event at 09:00 UTC on 14 November 2026:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Example Org//Event Page//EN
BEGIN:VEVENT
UID:20261114-launch@example.com
DTSTAMP:20261026T120000Z
DTSTART:20261114T090000Z
DTEND:20261114T100000Z
SUMMARY:Product launch webinar
LOCATION:https://example.com/live
DESCRIPTION:Join the live stream.\nSlides are sent afterwards.
END:VEVENT
END:VCALENDAR

Three formatting rules trip up hand-written files:

Which fields are required in an .ics event?

The RFC’s grammar sets a short list of required properties:

Property Where Required? What it does
VERSION VCALENDAR Yes Always 2.0
PRODID VCALENDAR Yes Identifies the software that made the file
UID VEVENT Yes Globally unique ID for the event (section 3.8.4.7)
DTSTAMP VEVENT Yes When the file was created or the event last revised; must be UTC (section 3.8.7.2)
DTSTART VEVENT Yes, if no METHOD Inclusive start (section 3.6.1)
DTEND or DURATION VEVENT No Non-inclusive end; if set, DTEND must be later than DTSTART
SUMMARY, LOCATION, DESCRIPTION VEVENT No Title, place and notes
SEQUENCE VEVENT No Revision number, starts at 0 and goes up with each significant change

Keep the UID stable for an event. Calendar apps use it to recognise the same event when they receive it again; a new UID creates a duplicate.

How do .ics files handle all-day events?

Use date values with no time: DTSTART;VALUE=DATE:20261114. The end is non-inclusive, so a one-day event on 14 November has DTEND;VALUE=DATE:20261115. If DTEND is left out, RFC 5545 says a date-only event lasts one day (section 3.6.1). Setting DTEND to the same day as DTSTART is a common bug.

How do time zones work in .ics files?

A date-time can take three forms (section 3.3.5):

Form Example Meaning
UTC DTSTART:20261114T090000Z A fixed instant; each app converts it to local time
Local with time zone DTSTART;TZID=Europe/Berlin:20261114T100000 Local time in a named zone
Floating DTSTART:20261114T100000 10:00 wherever the viewer is

If you use TZID, the RFC requires a matching VTIMEZONE block in the same file for each TZID value (section 3.2.19). Some apps resolve common names such as Europe/Berlin without it, but not all do.

UTC is the safest choice for one-off events. For a weekly 10:00 meeting, use TZID and VTIMEZONE: a UTC start would move by an hour for attendees when daylight saving time changes. Avoid floating times unless the event should happen at the same clock time everywhere, such as “take medication at 08:00”.

How do recurring events work in .ics files?

Add an RRULE (section 3.8.5.3) to the VEVENT. For example, every Tuesday for ten weeks:

RRULE:FREQ=WEEKLY;BYDAY=TU;COUNT=10

Use COUNT or UNTIL to end the series, not both: the RFC says they must not appear in the same rule. Skip individual dates with EXDATE.

Why don’t changes to an .ics file reach people who already added it?

Because opening a downloaded or emailed .ics file imports a copy. The calendar keeps no link to the source. Microsoft’s Outlook.com help says the calendar “doesn’t refresh the imported events automatically”, even when the owner makes an update.

There are two ways to change an event after people have added it:

Some hosted add-to-calendar services handle the subscription feed for you. See the comparison table for which ones do, or hand-built links and .ics files for the free route.

Questions

Which fields does an .ics event need?

RFC 5545 requires PRODID and VERSION on the calendar, and UID and DTSTAMP on each VEVENT. DTSTART is also required when the file has no METHOD property, which is the case for most downloadable files.

Should .ics times use UTC or a time zone?

UTC (a trailing Z) is the simplest and works everywhere for one-off events. Use TZID with a matching VTIMEZONE block for recurring events, so they keep the same local time across daylight-saving changes.

Why didn't my calendar update when I changed the .ics file?

A downloaded or imported .ics file is a one-time copy. Microsoft's own help says imported events are not refreshed even if the owner updates them; only subscribed calendars refresh.

What is a webcal:// link?

It is a link to an .ics feed that tells the calendar app to subscribe rather than import. webcal is a provisional URI scheme in the IANA registry, not an IETF standard, but major calendar apps recognise it.