Make a calendar file every app accepts.
Fill in an event, add a repeat rule, pick a time zone. iCalForge writes the RFC 5545 text in front of you and hands you a .ics file — one meeting, a whole series, or a spreadsheet turned into a calendar.
Free. No account. Your event text never leaves this tab.
The .ics builder
Fill in the fields; the file text updates on every keystroke.
Event
When
The file will carry a VTIMEZONE block with the zone's DST rules.
Repeat
Reminders
No reminders yet. Add one or more — they become VALARM blocks with ACTION:DISPLAY.
People and details
One per line: “Name <mail@example.com>” or just the address.
Comma separated.
Leave empty to generate one. Re-sending the same UID updates the event instead of adding a second copy.
Why iCalForge
See the series before you send it
The recurrence builder writes RRULE for you and immediately shows the rule in plain words, the next ten dates and a month grid. Click any date to drop it from the series — it becomes an EXDATE line.
Time zones written out in full
Pick any IANA zone and the file gets a real VTIMEZONE block — STANDARD and DAYLIGHT sub-components with the actual transition dates, derived from your browser's own zone data. Floating and UTC times are one click away.
The file, visible while you type
The output panel shows the exact bytes you are about to download: folded at 75 octets, commas and semicolons escaped, DTSTAMP and UID in place. Copy it, or save it as .ics.
A spreadsheet in, a calendar out
Drop a CSV, map its columns onto title, start, end, location and time zone, and check the preview table row by row. Valid rows become one calendar file with many VEVENTs and a name of your choosing.
About iCalForge
An .ics file is the one calendar format that Google Calendar, Outlook, Apple Calendar, Thunderbird, Fastmail and almost every scheduling app agree on. It is plain text defined by RFC 5545: a VCALENDAR wrapper holding one or more VEVENT blocks, each with a start, an end, a summary and a stable UID. iCalForge is a free online .ics generator that builds that text for you. Type a title, choose a date and time, add a location, a link, reminders and attendees, and the file appears next to the form, line by line, exactly as it will be saved. When you are happy with it, download the .ics or copy the text — then import it, attach it to an email, or publish it for other people to subscribe to.
The parts that usually go wrong get the most attention here. Recurring events are built with a visual RRULE editor that shows the rule in words and lists the next occurrences, so “every second Tuesday” is something you can verify rather than hope for; single dates are removed with EXDATE by clicking them. Time zones are written as a full VTIMEZONE component with real daylight-saving transitions, and floating times are available for events like a birthday that should stay at the same clock time everywhere. A CSV importer turns a spreadsheet of dates into one calendar file, and everything — parsing, recurrence expansion, zone maths, file assembly — happens in your browser with JavaScript. Nothing is uploaded, there is no account, and the page keeps working after you go offline.
Guides & articles
What the iCalendar format actually says — and where calendar apps disagree.
Jul2026The .ics file format explained: VCALENDAR, VEVENT and what each line means
An .ics file is a few dozen lines of plain text. Here is what each of those lines does, why some of them break in the middle of a word, and which ones decide whether your import works.
Sep2026Recurring events and RRULE: every-second-Tuesday without losing your mind
One line of a calendar file can describe a thousand meetings. Here is how FREQ, INTERVAL, BYDAY and BYSETPOS fit together, when to reach for COUNT instead of UNTIL, and what daylight saving does to a weekly stand-up.
Jun2026Time zones in calendar invites: UTC, floating times and VTIMEZONE
A calendar file can say nine o'clock in three different ways, and they do not mean the same thing. Here is what TZID, the trailing Z and floating times actually promise — and what a VTIMEZONE block is doing in your file.
Frequently asked questions
Is my event data uploaded anywhere?
No. iCalForge is a static page: the form, the recurrence expansion, the time-zone maths and the file assembly all run as JavaScript inside your browser tab. Titles, descriptions, attendee addresses and CSV files are never sent to a server, and there is no account, no analytics and no tracking. Once the page has loaded you can disconnect from the network and keep using it.
How do I import the file into Google Calendar?
Open Google Calendar on a desktop browser, click the gear icon and choose Settings, then Import & export in the left column. Select the .ics file, pick which of your calendars should receive the events, and press Import. Google confirms how many events it added. Mobile apps cannot import files directly — email the .ics to yourself and open the attachment, or use the web version.
What about Outlook and Apple Calendar?
In desktop Outlook: File → Open & Export → Import/Export → Import an iCalendar (.ics) file, then choose Import to add the events to your existing calendar. In Outlook on the web: Calendar → Add calendar → Upload from file. In Apple Calendar, double-click the file or drag it onto the app and pick the target calendar; on iPhone and iPad, open the .ics attachment and tap Add All.
Which recurrence patterns can I build?
Daily, weekly with any combination of weekdays, monthly by day-of-month (including “last day”), monthly by weekday position (“second Tuesday”, “last Friday”), and yearly — each with an interval, so “every 3 weeks” or “every 2 years” work too. A series can run forever, stop after a number of occurrences (COUNT) or end on a date (UNTIL), and any individual date can be excluded with EXDATE. Rarer RFC 5545 pieces such as BYSETPOS with multiple weekdays, BYWEEKNO or BYYEARDAY are not exposed in the builder; if you need one, edit the RRULE line after copying the text.
Will my reminders survive the import?
It depends on the app. Reminders are written as VALARM blocks with ACTION:DISPLAY and a relative TRIGGER such as -PT15M. Apple Calendar, Thunderbird and most desktop clients honour them. Google Calendar imports alarms on events you own but will also apply your own default notification settings, and some corporate Exchange setups strip alarms from imported files entirely. If a reminder matters, check the event after importing.
Which time zone should I choose?
For a meeting, choose the zone the meeting actually happens in — your browser's zone is pre-selected. The file then carries a VTIMEZONE block, and every attendee sees the event converted into their own local time. Choose “floating time” only for things that should read the same everywhere, such as a birthday or a daily habit: a floating 09:00 stays 09:00 in Tallinn, Lisbon and Tokyo. All-day events never carry a zone at all, by design.
What should my CSV look like?
One row per event, with a header row naming the columns. A title column and a start column are the minimum; end, all-day, location, description and time zone are optional. Dates are read as 2026-10-05, 05.10.2026 or 10/05/2026, with an optional time after a space or a T (2026-10-05 14:30). Column names in English or Russian are matched automatically, and you can re-map any column by hand before generating. Download the sample CSV from the From CSV tab to see a working file.
Can I change an event after I have already sent the file?
Yes, if you keep the UID. Set a custom UID before the first export, then build the corrected event with the same UID and send the new file: calendar apps treat a matching UID as an update to the existing event rather than a second copy. Increase the SEQUENCE number by editing the copied text when you want clients to be certain the new version wins. Without a matching UID, importing again simply creates a duplicate.
Is there a limit on how many events one file can hold?
The format has no limit and neither does the tool, but practical ceilings exist: the CSV importer refuses files over 8 MB, and calendar apps get slow with very large imports — Google Calendar, for example, is happiest under a few thousand events per import. A recurring event is also far cheaper than the same dates listed one by one: one VEVENT with an RRULE replaces hundreds of separate entries and stays editable as a series.