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.
npm install ical-generator
# For TypeScript Users
# (see "I use Typescript and get TS2307: Cannot find module errors" section below)
npm i -D @types/node rrule moment-timezone moment dayjs @types/luxon
import ical from 'ical-generator';
import http from 'http';
const calendar = ical({name: 'my first iCal'});
calendar.createEvent({
start: moment(),
end: moment().add(1, 'hour'),
summary: 'Example Event',
description: 'It works ;)',
location: 'my room',
url: 'http://sebbo.net/'
});
http.createServer((req, res) => calendar.serve(res))
.listen(3000, '127.0.0.1', () => {
console.log('Server running at http://127.0.0.1:3000/');
});
ical-generator supports native Date,
moment.js (and moment-timezone, Day.js and
Luxon's DateTime
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 ical 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.
npm test
npm run coverage
npm run browser-test
ical-generator
uses the node.js fs
module to save your calendar on the filesystem. In browser environments, you usually don't need this, so if you pass null
for fs in your bundler. In webpack this looks like this:
{
"resolve": {
"fallback": {
"fs": false
}
}
}
It's here. If you need the changelog for
ical-generator
1.x.x and older, you'll find it here.
ical-generator
supports some third-party libraries such as moment.js or Day.js. To enable Typescript to do something
with these types, they must of course also be installed. Unfortunately, npm does not install optional peerDependencies
.
Because these modules are not necessary for JavaScript users, I have marked these modules as optional. So if you use
Typescript, you need the following modules to build the code that uses ical-calendar
:
npm i -D @types/node rrule moment-timezone moment dayjs @types/luxon
For JavaScript users they are not necessary.
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 (c) Sebastian Pekarek under the MIT license.