One component. Every framework.

A universal calendar web component that works natively in React, Vue, Angular, and plain HTML — with no framework dependency.

View Live Demos GitHub
$npm install kalendly

Why kalendly?

Framework-agnostic

Single <kal-calendar> custom element. No React, Vue, or Angular required.

Type Safe

Written in TypeScript with full type definitions included.

Themeable

CSS variables + JS property API for complete visual customisation.

Event-rich

Categories, priorities, time ranges, attendees, locations, and more.

Lightweight

Zero runtime dependencies. Tree-shakeable ESM + CJS + UMD builds.

Accessible

Semantic HTML, keyboard navigation, and screen-reader friendly markup.

Live Preview

Works everywhere

Vanilla JS

No bundler needed
<kal-calendar
  title="My Calendar"
></kal-calendar>

<script>
  cal.events = myEvents;
</script>

React 19

Native support
import 'kalendly';

<kal-calendar
  events={events}
  oncal-date-select={
    e => onSelect(e)
  }
/>

Vue 3

Native support
import 'kalendly';

<kal-calendar
  :events="events"
  @cal-date-select=
    "onSelect"
/>

Svelte 5

Runes syntax
import 'kalendly';

<kal-calendar
  {events}
  oncal-date-select={
    handleSelect
  }
/>

Angular

schemas config
import 'kalendly';

<kal-calendar
  [events]="events"
  (cal-date-select)=
    "onSelect($event)"
></kal-calendar>

Solid.js

prop:events syntax
import 'kalendly';

<kal-calendar
  prop:events={events}
  on:cal-date-select={
    handleSelect
  }
/>