What is a ICS file?
An ICS file is an iCalendar (RFC 5545) text file: a VCALENDAR with VEVENT entries, each with a UID, start and end, summary and optional rules. Lines end in CRLF and are folded at 75 octets.
Calendar bugs hide in recurrence and time zones: an RRULE with an EXDATE, a moved occurrence with RECURRENCE-ID, a TZID that needs its VTIMEZONE, floating times, all-day dates, and folding that must not split a UTF-8 character.
Anatomy of a ICS file
BEGIN:VCALENDARThe calendar, with VERSION and PRODIDBEGIN:VTIMEZONERules for each TZID usedDTSTART;TZID=…Start in a named zone, UTC (Z), floating or a DATERRULERecurrence: FREQ, COUNT, INTERVALEXDATE / RECURRENCE-IDRemoved and moved occurrencesBEGIN:VALARMA reminder
What you can generate
- Up to 5,000 events
- Europe/Stockholm, America/New_York, Asia/Tokyo, Australia/Sydney, mixed, UTC or floating time
- Recurring events with EXDATE and RECURRENCE-ID overrides
- All-day events, alarms, attendees and an organizer
- Cancelled events
- Long descriptions folded at 75 octets without splitting UTF-8
- Unicode summaries and locations
How to make one
- Open the ICS generator, or start from a preset above.
- Set the size and switch on the edge cases you need; the preview and size estimate follow every change.
- Generate, then download. The file is made in your browser, and the same preset and seed always give you the same file.
Questions
The file follows RFC 5545: CRLF lines, folding at 75 octets, escaped text, a VTIMEZONE for every TZID and a UID and DTSTAMP on every event. The tests check each of these.
Each VTIMEZONE has the current daylight-saving rules for that zone, which is what calendar apps need for dates from 2026 on.
A time with no zone, such as 09:00 wherever you are. Pick Floating (no zone) to test how your app treats it.