ICS Calendar Viewer
Paste the contents of an iCalendar .ics file and read the events inside it without importing them into a calendar app. The viewer unfolds wrapped lines, splits the file into VEVENT blocks, and reads each event's summary, start and end (handling all-day VALUE=DATE values and TZID time zones), location, description, organizer, status, and recurrence rule. Events are shown as cards sorted by start time, each with a readable date and a computed duration, and simple RRULE repeats are described in plain words. Everything happens in your browser — nothing is uploaded.
How to use the ICS Calendar Viewer
Open the .ics file — a calendar export, a meeting invite saved from an email, or a subscription file — in a text editor and paste its full contents into the box, or load the file directly with the picker. The viewer parses it at once and shows the calendar name when present, then a card for every event it finds. If the input is not a valid calendar (no BEGIN:VCALENDAR or no events), it tells you what was missing.
Each event card lists the title, a human-readable start and end time, the computed duration, and any location, organizer, status, UID, and description. All-day events are recognized from the VALUE=DATE form and shown as whole days rather than midnight timestamps, and a TZID parameter is displayed so you can see which time zone a local time belongs to. Folded lines — long values that the spec breaks across multiple physical lines with a leading space or tab — are stitched back together before parsing, and escaped characters in descriptions (\\n, \\,, \\;, \\\\) are decoded. When an event repeats and its RRULE is straightforward, the viewer translates it into a sentence like "every week on Monday."
iCalendar (RFC 5545): how calendars travel as text
iCalendar is the open standard, defined in RFC 5545, that nearly every calendar program uses to exchange events. A .ics file is plain UTF-8 text built from nested blocks. The outer wrapper is BEGIN:VCALENDAR … END:VCALENDAR, which carries a VERSION and a PRODID identifying the software that wrote it. Inside live components: VEVENT for appointments, VTODO for tasks, VJOURNAL for notes, VFREEBUSY for availability, VTIMEZONE for time-zone definitions, and VALARM for reminders. Each component is a list of properties written as NAME;PARAM=value:VALUE, one per logical line.
Dates are where most confusion lives. A date-time looks like 20260527T140000; a trailing Z (20260527T140000Z) means UTC, no Z with a TZID=Europe/London parameter means a local time in that zone, and a property tagged VALUE=DATE such as 20260527 is an all-day event with no time at all. Because lines may not exceed 75 octets, long values are "folded": the encoder inserts a line break followed by a single space or tab, and a reader must remove that break to recover the original value. Text values escape special characters, so a description's literal commas, semicolons, backslashes, and newlines arrive as \\,, \\;, \\\\, and \\n.
Recurrence is expressed with a single RRULE property: FREQ=WEEKLY;BYDAY=MO,WE;COUNT=10 means "weekly on Monday and Wednesday, ten times." Combined with EXDATE exceptions and RECURRENCE-ID overrides, one stored event can describe an entire series. When you receive a meeting invite, your mail client attaches a VEVENT with a METHOD:REQUEST and ORGANIZER and ATTENDEE properties; accepting it sends back a METHOD:REPLY. That text-based, standardized flow is what lets an invite created in one app appear correctly in a completely different one.
Common use cases
- Inspect an invite. Read exactly what a meeting
.icscontains — time, organizer, location, recurrence — before adding it to your calendar. - Debug a generated file. Verify that software you wrote emits correct
DTSTART,DTEND, andRRULEvalues. - Audit a subscription feed. Skim every event in a calendar export to spot wrong dates or missing fields.
- Understand a recurrence. Turn a cryptic
RRULEinto a plain-language description of when an event repeats. - Recover details privately. Read events from a file you have on hand without importing them anywhere or syncing to a service.
Frequently asked questions
What is line folding and does the viewer handle it?
How are all-day events and time zones shown?
VALUE=DATE (for example DTSTART;VALUE=DATE:20260527) is treated as an all-day event and shown as a whole day. A TZID parameter is displayed alongside the time so you can see which zone a local time belongs to, and a trailing Z is read as UTC.Can it describe recurring events?
RRULE and, when the rule is simple — a daily, weekly, monthly, or yearly frequency with an optional interval, weekday list, count, or until date — describes it in plain words. Complex rules are shown as the raw RRULE so nothing is lost.Why are the descriptions full of backslashes in the raw file?
\,, a semicolon \;, a backslash \\, and a line break \n. The viewer decodes these so the description reads naturally, with real line breaks and punctuation.Is my calendar file uploaded?
.ics text is parsed entirely in your browser with client-side JavaScript. Nothing is transmitted, so private meetings and personal events stay on your device.