DayPilot Lite

Open-Source JavaScript Scheduler Component with a Horizontal Timeline

DayPilot Lite is a free and open-source version of DayPilot — a library of calendar and scheduler UI components. It helps you build event calendars, resource schedules, project timelines, and maintenance schedules.

The scheduling components are available for plain JavaScript, Angular, React, and Vue.

License: Apache License 2.0

Download & NPM Live Demo

Features

The open-source edition includes the following features by component. See the feature matrix for the full list.

Scheduler

DayPilot JavaScript Scheduler Component

  • Horizontal timeline with resources as rows (people, rooms, machines, vehicles)

  • Adjustable Scheduler scale: minutes, hours, days, and weeks, plus custom minute blocks with cellDuration; grouped time headers can show higher-level labels, such as months above days or months above weeks

  • Day/week/month view switching and runtime density levels

  • Drag-and-drop event creation, moving, resizing, and copying, with snap-to-grid support

  • Asynchronous post-drop validation of drag-and-drop changes (accept or reject a move after a server check)

  • Overlap handling using event handlers (for example, pushing existing events back)

  • Cell styling: alternating colors, weekend shading, and global or resource-specific holidays with blocked actions

  • Read-only mode (global or per event)

  • Icons, buttons, progress bars, custom drag handles, and other custom elements inside events and headers

  • Framework-rendered content in events and grid cells (JSX in React, templates in Vue)

  • Progressive rendering for large boards

  • Touch device support: tap, tap-and-hold, and touch-drag gestures

  • Undo/redo

  • CSS themes, editable by hand or generated in the Theme Designer

  • Built-in XSS protection: text values are encoded automatically

  • Localization (12/24-hour clock, day and month names, date and time format, first day of the week)

Calendar

DayPilot JavaScript Calendar Component

  • Day and week views with time on the vertical axis, plus integrated day/week/month switching using a single data source

  • Resource view with any number of custom columns, such as people, tools, or rooms

  • Drag-and-drop event creation, moving, and resizing

  • Custom event data properties to adjust the appearance of individual events

  • Zoom-style density controls, plus column selection and highlighting

  • Read-only mode with per-event locks

  • Date navigation via the Navigator date picker

  • CSS themes, editable by hand or generated in the Theme Designer

  • Built-in XSS protection: text values are encoded automatically

  • Localization (12/24-hour clock, day and month names, date and time format, first day of the week)

  • Right-to-left (RTL) mode

  • Undo/redo

Month and Navigator

DayPilot JavaScript Month Component

  • Monthly event calendar with one cell per day

  • Navigator date picker with busy-day highlighting, freehand range selection, week numbers, and diagonal cell splits for partially busy days

  • Built-in XSS protection: text values are encoded automatically

  • Localization (12/24-hour clock, day and month names, date and time format, first day of the week)

  • Undo/redo

Common

  • Bundled modal dialog (DayPilot.Modal) for quick prototyping

  • Context menu

  • TypeScript definitions

  • NPM packages for JavaScript/TypeScript, Angular, React, and Vue, plus a standalone production file for use with a script tag

  • 90+ open-source tutorials (including downloadable projects and GitHub source code)

UI Builder

DayPilot UI Builder

Build a prototype in minutes: configure a Scheduler or Calendar in the UI Builder and download a ready-to-run DayPilot Lite project for JavaScript, TypeScript, Angular, React, Vue, or Next.js.

Open the UI Builder

Scheduler with Horizontal Timeline

Open-Source Scheduler Component with Horizontal Timeline

The Scheduler displays resources as rows on a horizontal timeline: rooms, people, machines, vehicles. It is the board for reservation systems, production planning, and dispatch, where the question is who is doing what, and when.

A working open-source Scheduler is a short configuration. The timeline is defined by properties: the scale sets the cell size from minutes to weeks, grouped time headers stack labels such as month over day, and the visible range is a start date and a length, so switching the board to the next quarter is a property change. Day, week, and month views are the same mechanism: predefined configurations that your application swaps at runtime, and zoom sliders and density buttons ride on it too.

Editing is drag and drop: users create, move, resize, and copy events directly on the board (see Drag and Drop Scheduling). Events carry custom data that drives their appearance, and grid cells carry calendar context such as weekend shading and holidays (see Event Appearance and Cell Styling below).

Tutorials:

Resource Calendar with Vertical Timeline

Open-Source JavaScript Resource Calendar with Vertical Timeline

The resource calendar is the same board with the axes switched: time runs down, and the columns are your resources instead of days. It is the shape for one day in detail, with people, rooms, or tools side by side, in any number.

Columns can be selected and highlighted by clicking their headers, and right-to-left (RTL) mode is supported for RTL locales. The editing model is shared with the Scheduler: selecting a time range, moving, resizing, and the modal dialog work the same way in both orientations.

Tutorials:

Day/Week/Month Calendar

Open-Source JavaScript Calendar with Day, Week, and Month Views

The traditional calendar, the view people know from Outlook and Google Calendar. The Calendar component displays days as columns at hour or minute resolution, and the Month component displays events in a month grid for date-first overviews.

The flagship pattern combines them: an integrated day/week/month calendar over one data source, with the views switched at runtime and a date picker keeping them in sync. The tutorials build it for React, Angular, Vue, and Next.js. Grid cells carry calendar context here as well: business hours, a highlighted today column, or a blocked lunch break.

Tutorials:

Large Boards

A scheduling board grows in two directions at once: more resources, and a longer timeline. The open-source Scheduler is built for both, using the same progressive rendering engine as DayPilot Pro. Grid cells, events, and row headers are all rendered progressively: the component draws the current viewport first and fills in the rest as the user scrolls. This is the default behavior in all three layers, and the live demo runs it at full size, a thousand resources on a one-year, day-by-day timeline.

The rendering pipeline is tunable, not a black box. Each layer has its own scroll debounce delay (scrollDelayEvents, scrollDelayCells, scrollDelayRows), so you decide what draws immediately and what waits until scrolling settles; out of the box, cells and row headers render immediately and events follow after 200 ms. Buffers control how far beyond the viewport the component renders ahead (dynamicEventRenderingMargin for events, progressiveRowRenderingPreload for rows), and a cache keeps a limited number of rendered events alive and purges the rest, so a long scrolling session does not accumulate DOM (dynamicEventRenderingCacheSize, dynamicEventRenderingCacheSweeping). The defaults are starting values; the knobs exist so you can tune the board against your own data.

Two default-on details keep a long board readable while all of this is happening. Floating time headers pin the label of a partially scrolled header cell, so the current month stays visible on a year-long timeline. Floating events do the same for event text: when a long event starts off-screen, its text floats into the visible part.

Demo:

Drag and Drop Scheduling

JavaScript Scheduler with Horizontal Timeline during Drag and Drop

All editing follows one model: the component fires an event, and your code persists the change or vetoes it. Users create an event by selecting a time range on a row, and the bundled modal dialog closes the loop from selection to saved event. Moving and resizing are enabled by default, snap to grid keeps the results aligned to the timeline cells, and events can be copied instead of moved.

The same handlers implement your scheduling policies. When a dropped event lands on an occupied slot, your code decides what happens next, for example shifting the existing events back to make room. A change can also be validated asynchronously after the drop: the application checks the move against the server and accepts or rejects it before the board updates. Real-time validation during the drag itself is a DayPilot Pro feature (see the Feature Matrix).

When a schedule should not be edited, the whole board switches to read-only at runtime, or individual events are locked through their data, with a padlock icon marking them.

Tutorials:

CSS Themes

Open-Source Scheduler with Custom CSS Theme

The components are styled using CSS. The default theme is embedded, so a first board needs no separate stylesheet; a custom theme is a stylesheet plus the theme property. You can build one visually in the Theme Designer, against a live preview, and export a stylesheet you keep in source control.

The same theme language covers all DayPilot components, in both editions. The demo shows several sample themes, including a diagonal theme built entirely in CSS.

Tutorials:

Date Picker

Date Picker with Partial Free-Busy Highlighting using Diagonal Cell Split

The Navigator is a date picker that switches the visible range of a Calendar, Scheduler, or Month, and it highlights busy days from the same event data, so the picker shows availability before the user commits to a view. Users can select a range free-hand by dragging, and partially busy days can render with a diagonal split, the hospitality pattern where one day holds a check-out and a check-in. Week numbers are supported, and on the Scheduler the Navigator fits naturally into the upper-left corner above the row headers.

Features:

  • Display a custom number of months

  • Vertical or horizontal orientation

  • Optional week numbers

  • Range modes: day, week, month

  • Select a custom date range using drag and drop

  • Highlight busy days automatically (load the data in the same format that is used by the calendar components)

Tutorials:

Cell Styling, Holidays, and Disabled Days

Open-Source Scheduler with Horizontal Timeline with Holiday Highlighting

Grid cells can be styled individually, so the board carries its own calendar context: weekend shading, alternating column colors, and holidays loaded as data. Holidays can be global or resource-specific, so one team's public holiday does not gray out another's row. The same data can guard user actions: selections, moves, and resizes that overlap a holiday can be blocked, so nothing gets scheduled into them by accident. The holiday tutorial builds the full pattern, resource-specific rules first with a global fallback.

Tutorials:

Event Appearance

Open-Source JavaScript Scheduler with Customized Event Appearance

Each event accepts custom data properties, and a rendering hook exposes the event data for your application to adjust before it is drawn: a confirmed reservation turns green, an overdue task gets a warning icon. Active areas add positioned elements inside the event box: status icons, action buttons, custom drag handles, progress bars, and diagonally split corners, the check-in/check-out pattern where one cell shows the outgoing and incoming booking. Active areas work in row headers too, so a resource row can carry its own buttons or indicators.

When markup is not enough, events and grid cells render framework content directly: JSX in React, templates in Vue. A cell can carry a checkbox, a dropdown, a slot price, or a computed marker, and it stays a live framework component.

Tutorials:

Modal Dialog

javascript calendar scheduler open source edit modal dialog

The DayPilot library includes a programmatic modal dialog that lets you edit calendar events. You can use it to edit the scheduler event standard fields (text, start, end) and also any custom fields that you define.

It has built-in support for many field types (such as text, checkbox, radio selection, searchable drop-down list, tabular data, readonly image, HTML and scrollable text). It includes special handling of date and date/time fields that let you modify the scheduler event start and end values using a date and time picker.

Dynamic Context Menu

javascript calendar scheduler open source context menu

You can add a context menu to scheduler events to provide access to additional operations.

  • The context menu can display icons (JPEG, PNG, SVG) before the text.

  • Use separators to group menu items.

  • Menu items can have children (submenu).

  • Bind the context menu to left or right mouse click.

  • Change the context menu item text on the fly, depending on the event type.

  • Enable/disabled menu items dynamically depending on calendar event status.

  • Show a complete list of actions that can be performed on events/tasks.

  • Provide shortcuts to common actions such as lock, duplicate, postpone, copy, assign, change status, export, and print calendar events.

  • The context menu automatically adjusts its own position so that it is displayed inside the current viewport.

Tutorials:

Angular Scheduler and Calendar

DayPilot Lite is available for Angular (@daypilot/daypilot-lite-angular). It includes these Angular components:

React Scheduler and Calendar

The React version of DayPilot Lite is available at NPM as @daypilot/daypilot-lite-react package.

React components:

Vue Scheduler and Calendar

You can use DayPilot Lite in your Vue application as well. The Vue package name is @daypilot/daypilot-lite-vue.

Vue components:

License

DayPilot Lite for JavaScript is open-source (Apache License 2.0).

The following attribution is required:

What's New

Release History

Subscribe to release notifications.