99tools

Calendar (.ics) Viewer & Builder

runs in your browser

Open the .ics somebody sent and read what is in it — times, attendees, recurrence, reminders — or build a single event and download it.

I want to

Open the invite somebody sent and see what is actually in it. Nothing is uploaded.

Drop a file here, or .

Drop the .ics you were sent

iCalendar

about this tool

Somebody sent you an invite. Open it here and see what it actually says, without adding it to anything — or fill in one event and download a file any calendar will take.

Reading one

Title, when, where, who, how often it repeats and what reminders it carries. Fields the tool does not model are kept rather than dropped, so nothing disappears quietly.

Three kinds of time

This is where .ics files catch people, and it is worth knowing which one you are looking at:

A date20260315 — is a whole day, not midnight.

A Z time20260315T090000Z — is a real instant in UTC, so it can be shown in your own timezone and that reading is correct.

A zoned wall-clock time20260315T090000 with TZID=Europe/London — is nine in the morning there. Converting it needs that zone's daylight-saving rules, and guessing moves the meeting by an hour. So it is shown exactly as the file wrote it, labelled with its zone, rather than converted into something that might be wrong.

The things that break naive readers

Folding. Any line past 75 bytes wraps onto the next with a leading space. Unfold before parsing or a description breaks mid-word and a URL loses its tail. The join adds nothing back, because a fold can split anywhere — which is exactly why a description read carelessly comes out with words welded together.

Escaping. Inside a text value, \n is a newline and \, \; \\ are those characters. A comma left escaped shows as \,; a comma left unescaped when writing splits one value into two.

DTEND is exclusive on an all-day event. A one-day event on the 15th ends on the 16th. That reads oddly and is correct, and it is what this writes.

Building one

One event, downloadable. Times are written without a zone, so a calendar reads them as local wherever the file is opened — which is usually what you want for "lunch at one" and not what you want for a call across three countries.

Leave the start time empty for an all-day event. Put an RRULE in the repeats box for something recurring; the RRULE builder writes and explains those.

Nothing is uploaded

The file is read in your browser. An invite carries the names and email addresses of everyone on it, which is not something to hand to a website that offers to look at it for you.

For working out what a time is somewhere else, the time zone converter does that.

questions

How do I open an .ics file without adding it to my calendar?
Drop it here. The file is read in your browser and shown as plain text — title, times, attendees, recurrence and reminders — and nothing is added anywhere or uploaded.
Why does a time show as written instead of in my timezone?
Because the file gave a wall-clock time in a named zone rather than an instant. Converting it needs that zone’s daylight-saving rules; guessing would move the meeting by an hour, so it is shown exactly as the file wrote it, with the zone named.
Why does my all-day event end the next day?
DTEND is exclusive for an all-day event: a one-day event on the 15th ends on the 16th. That is correct per RFC 5545 and it is what this writes, even though it reads oddly.
What is line folding?
iCalendar wraps any line past 75 bytes onto the next one with a leading space. The join adds nothing back, because a fold can split mid-word — which is why a description read by a naive parser often has words stuck together or broken apart.
Can I make a repeating event?
Yes — put an RRULE in the repeats box, such as FREQ=WEEKLY;BYDAY=MO. The RRULE builder writes and explains those if you are not sure what to type.