What is an .ics file?
An .ics file is a plain text event that any calendar app can read. What each line means, why the time comes out wrong, and what to do with one.
Someone sends you briefing.ics, or a registration page hands you one after you sign up.
It weighs about a kilobyte, it opens in Notepad, and the contents look like shouting. What
you have is a single appointment written down in a shared grammar.
The grammar is called iCalendar, and .ics is only the extension it usually wears. It
is a published internet standard: RFC 5545, issued in 2009, which replaced the original
RFC 2445 from 1998. That lineage is the whole reason the thing is useful — Apple, Google,
Microsoft, Mozilla and several thousand booking systems settled on one grammar, so a file
written by any of them is legible to all the others.
One caution on names. iCalendar is the format. iCal was what Apple called its desktop calendar program until 2012, when it was renamed Calendar. The two words get used interchangeably online, and they mean different things.
What each line says
Here is a complete, valid file describing one meeting:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//creatorvalet.com//ICS Generator//EN
BEGIN:VEVENT
UID:9f2kx7m3q1@creatorvalet.com
DTSTAMP:20260406T091500Z
DTSTART:20260415T170000Z
DTEND:20260415T183000Z
SUMMARY:Spring product briefing
LOCATION:Pier 27\, San Francisco
END:VEVENT
END:VCALENDAR
Everything sits between a BEGIN: and a matching END:, and the blocks nest. The outer
VCALENDAR is the container; the VEVENT inside it is the appointment. A file can hold
one VEVENT or four hundred of them, which is how a conference publishes its entire
program as a single download.
The individual lines:
VERSION:2.0is the version of iCalendar, not of the file. It has said2.0since 1998 and there is no 3.0.PRODIDnames the software that wrote the file. It is required, nobody is ever shown it, and it is the quickest way to find out what produced a file you did not expect.UIDis the event’s permanent identity. Re-download a corrected version and your calendar replaces the old entry rather than adding a second one — but only if theUIDmatches. This is the field cheap generators randomize, and duplicates are the result.DTSTAMPrecords when the file itself was written, which is not when the meeting is.DTSTARTandDTENDare the meeting. The trailingZmeans UTC, so this event runs 10:00 to 11:30 in San Francisco and 19:00 to 20:30 in Berlin — one moment, shown correctly to everybody.SUMMARYbecomes the title in your calendar;LOCATIONbecomes the address.
Notice the backslash in Pier 27\, San Francisco. Commas, semicolons and backslashes
carry structural meaning in this format, so inside a text value they have to be marked as
literal. Forget it and a location with a comma in it arrives truncated. Two more rules of
the same kind: lines end with a carriage return and a line feed, not a bare newline, and no
line may exceed 75 bytes — longer ones are broken and continued on the next line with a
leading space.
Opening one you were sent
On iPhone, iPad, macOS and Outlook for Windows, opening the file is the whole procedure: the calendar app takes over, shows you the event, and asks whether to add it. Thunderbird behaves the same way.
Google Calendar is the exception, and it catches people out. Its web interface does not react to a file being opened at all — the event has to be pulled in from the settings screen instead. That is a short procedure, but it is a procedure, and it means that publishing only a downloadable file quietly loses a large slice of any audience.
The time is where it goes wrong
Not every file writes UTC. A start time can also be recorded like this:
DTSTART:20260812T140000
No Z, no timezone. That is a floating time, and it means “14:00 wherever the reader
happens to be”. For a birthday or a public holiday that is exactly right. For a webinar it
is a bug: the organizer in Lisbon sees 14:00 and is satisfied, while the attendee in Denver
also sees 14:00 and misses it by seven hours. The person who created the file never
witnesses the failure, because their own machine is in the timezone it was written for.
The safe form is the one in the example above — an absolute instant in UTC, which every calendar then renders in its owner’s local time.
All-day events end a day late
The second classic mistake has nothing to do with clocks. DTEND is exclusive: it
marks the boundary the event stops before, not the last day it covers. A single day on the
12th is therefore written like this:
DTSTART;VALUE=DATE:20260812
DTEND;VALUE=DATE:20260813
Put 20260812 in both fields and the event has zero length. Some calendars hide it,
others draw it across two days. Everybody who writes one of these files by hand gets this
wrong once.
Making one
You do not have to type any of this. The ICS file generator takes a title, a date and a timezone and returns the finished file, along with the pre-filled links that cover the Google side of your audience. If the events already exist as rows in a spreadsheet — a course timetable, a season’s fixtures, a conference program — Excel to Calendar turns the sheet into one combined file plus one file per row. Both run entirely in the browser; a text file this small does not need a server.
Related extensions
.ical, .icalendar and .ifb are the same iCalendar format under different names —
.ifb conventionally holds free/busy information rather than events, but the grammar is
identical, and renaming any of them to .ics costs nothing. The registered media type for
all of them is text/calendar.
.vcs is the one genuine outsider. It is vCalendar 1.0, the 1996 predecessor that
iCalendar was designed to replace, and it survives mainly in old phone backups and legacy
groupware exports. The blocks look similar enough to fool you at a glance, but the details
differ, and a modern calendar may or may not accept one.
- How to import an .ics file into Google CalendarGoogle Calendar will not open a downloaded .ics file. The import lives in Settings, the mobile apps have none at all, and duplicates are preventable.
- ICS file structureA field reference for the iCalendar format: line grammar, folding at 75 octets, escaping, required properties, recurrence rules and a complete file.