- v10.0.1-develop.5Latest
- v10.0.1-develop.4
- v10.0.1-develop.3
- v10.0.1-develop.2
- v10.0.1-develop.1
- v10.0.0
- v10.0.0-develop.4
- v10.0.0-develop.3
- v10.0.0-develop.2
- v10.0.0-develop.1
- v9.0.1-develop.18
- v9.0.1-develop.17
- v9.0.1-develop.16
- v9.0.1-develop.15
- v9.0.1-develop.14
- v9.0.1-develop.13
- v9.0.1-develop.12
- v9.0.1-develop.11
- v9.0.1-develop.10
- v9.0.1-develop.9
- v9.0.1-develop.8
- v9.0.1-develop.7
- v9.0.1-develop.6
- v9.0.1-develop.5
- v9.0.1-develop.4
- v9.0.1-develop.3
- v9.0.1-develop.2
- v9.0.1-develop.1
- v9.0.0-develop.8
- v9.0.0-develop.7
- v9.0.0
- v9.0.0-develop.6
- v9.0.0-develop.5
- v9.0.0-develop.4
- v9.0.0-develop.3
- v9.0.0-develop.2
- v9.0.0-develop.1
- v8.1.2-develop.9
- v8.1.2-develop.8
- v8.1.2-develop.7
- v8.1.2-develop.6
- v8.1.2-develop.5
- v8.1.2-develop.4
- v8.1.2-develop.3
- v8.1.2-develop.2
- v8.1.2-develop.1
- v8.1.1-develop.3
- v8.1.1-develop.2
- v8.1.1
- v8.1.1-develop.1
- v8.1.0
- v8.1.0-develop.2
- v8.1.0-develop.1
- v8.0.2-develop.6
- v8.0.2-develop.5
- v8.0.2-develop.4
- v8.0.2-develop.3
- v8.0.2-develop.2
- v8.0.2-develop.1
- v8.0.1
- v8.0.1-develop.8
- v8.0.1-develop.7
- v8.0.1-develop.6
- v8.0.1-develop.5
- v8.0.1-develop.4
- v8.0.1-develop.3
- v8.0.1-develop.2
- v8.0.1-develop.1
- v8.0.0
- v8.0.0-develop.1
- v7.2.1-develop.4
- v7.2.1-develop.3
- v7.2.1-develop.2
- v7.2.1-develop.1
- v7.2.0
- v7.2.0-develop.5
- v7.2.0-develop.4
- v7.2.0-develop.3
- v7.2.0-develop.2
- v7.2.0-develop.1
- v7.1.0
- v7.1.0-develop.3
- v7.1.0-develop.2
- v7.1.0-develop.1
- v7.0.1-develop.2
- v7.0.1-develop.1
- v7.0.0
- v7.0.0-develop.6
- v7.0.0-develop.5
- v7.0.0-develop.4
- v7.0.0-develop.3
- v7.0.0-develop.2
- v7.0.0-develop.1
- v6.0.2-develop.13
- v6.0.2-develop.12
- v6.0.2-develop.11
- v6.0.2-develop.10
- v6.0.2-develop.9
- v6.0.2-develop.8
- v6.0.2-develop.7
- v6.0.2-develop.6
- v6.0.2-develop.5
- v6.0.2-develop.4
- v6.0.2-develop.3
- v6.0.2-develop.2
- v6.0.2-develop.1
- v6.0.1
- v6.0.1-develop.10
- v6.0.1-develop.9
- v6.0.1-develop.8
- v6.0.1-develop.7
- v6.0.1-develop.6
- v6.0.1-develop.5
- v6.0.1-develop.4
- v6.0.1-develop.3
ical-generator is a small but fine library with which you can very easily create a valid iCal calendars, for example
to generate subscriptionable calendar feeds.
⚠️ Migration to v6
In version 6 some breaking changes were made to make ical-generator even better. A short list of
these breaking changes and how you can adapt your code can be found in our
Migration Guide.
📦 Installation
npm install ical-generator⚡️ Quick Start
import ical, {ICalCalendarMethod} from 'ical-generator';
import http from 'node:http';
const calendar = ical({name: 'my first iCal'});
// A method is required for outlook to display event as an invitation
calendar.method(ICalCalendarMethod.REQUEST);
const startTime = new Date();
const endTime = new Date();
endTime.setHours(startTime.getHours()+1);
calendar.createEvent({
start: startTime,
end: endTime,
summary: 'Example Event',
description: 'It works ;)',
location: 'my room',
url: 'http://sebbo.net/'
});
http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/calendar; charset=utf-8',
'Content-Disposition': 'attachment; filename="calendar.ics"'
});
res.end(calendar.toString());
}).listen(3000, '127.0.0.1', () => {
console.log('Server running at http://127.0.0.1:3000/');
});See the examples folder for more examples.
📑 API-Reference
🕒 Date, Time & Timezones
ical-generator supports native Date,
Day.js, Luxon’s DateTime
and the older moment.js and moment-timezone
objects. You can also pass a string which is then passed to javascript’s Date internally.
It is recommended to use UTC time as far as possible. ical-generator will output all time information as UTC time as
long as no time zone is defined. For day.js, a plugin is necessary for this, which is a prerequisite. If a time zone is
set, ical-generator assumes that the given time matches the time zone. If a time zone is used, it is also recommended
to use a VTimezone generator. Such a function generates a VTimezone entry and returns it. For example, ical-timezones can
be used for this:
import {ICalCalendar} from 'ical-generator';
import {getVtimezoneComponent} from '@touch4it/ical-timezones';
const cal = new ICalCalendar();
cal.timezone({
name: 'FOO',
generator: getVtimezoneComponent
});
cal.createEvent({
start: new Date(),
timezone: 'Europe/London'
});If a moment-timezone object or Luxon’s setZone method works, ical-generator sets it according to the time zone set
in the calendar/event.
🚦 Tests
npm test
npm run coverage🙋 FAQ
Where’s the changelog?
It’s here. If you need the changelog for
ical-generator 1.x.x and older, you’ll find it here.
I get a ReferenceError: TextEncoder is not defined error (in some browsers)
This library uses TextEncoder, which
is available in node.js ≥ 11.0.0 and all modern browsers.
Outdated browsers may not have the necessary API and generate this error when generating the calendar.
🙆🏼♂️ Copyright and license
Copyright (c) Sebastian Pekarek under the MIT license.