3.2.0 • Public • Published


    MIT License Module Size CI Status Dependency Status

    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.

    📦 Installation

    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

    ⚡️ Quick Start

    import ical from 'ical-generator';
    import http from 'http';
    const calendar = ical({name: 'my first iCal'});
        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, '', () => {
            console.log('Server running at');

    📑 API-Reference

    🕒 Date, Time & Timezones

    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();
        name: 'FOO',
        generator: getVtimezoneComponent
        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
    npm run browser-test

    🙋 FAQ

    What's Error: Can't resolve 'fs'?

    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

    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 use Typescript and get TS2307: Cannot find module errors

    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.

    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.


    npm i @flowr-es/ical-generator

    DownloadsWeekly Downloads






    Unpacked Size

    246 kB

    Total Files


    Last publish


    • flowr-es