Custom Plugins

Write your own plugin

A plugin can be any object that has a name property, and an init method. The $app object, the "control center" object of the calendar, is then received as the first argument of the init method. This gives you access to most of the calendar's global, internal APIs.

If you're writing TypeScript, the type of this object is CalendarAppSingleton. If you're writing JavaScript, just leave out the type annotation, but then take a moment to study the following interface and its nested interfaces to get an idea of what's available to you: (opens in a new tab)

A simple example

import { CalendarAppSingleton } from '@schedule-x/shared'
class LoggerPlugin {
  name = 'logger-plugin'
  init($app: CalendarAppSingleton) {
    $app.calendarEvents.list.value.forEach((event) => {
      console.log('init', event)
const calendar = createCalendar({
  // ...other configuration
  plugins: [new LoggerPlugin()],