Calendar (.ics) Viewer & Builder
runs in your browserOpen the .ics somebody sent and read what is in it — times, attendees, recurrence, reminders — or build a single event and download it.
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 date — 20260315 — is a whole day, not midnight.
A Z time — 20260315T090000Z — is a real instant in UTC, so it can be
shown in your own timezone and that reading is correct.
A zoned wall-clock time — 20260315T090000 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.