Skip to main content

Duck Calendar

Headless calendar engine. Ships Gregorian, Islamic, Persian, and Hebrew systems, seven date adapters, full keyboard and ARIA support. ~5 KB gzipped.

6 capabilities

Own the markup. Ship the engine.

State machine, adapters, and a11y plumbing ship with the package. You write the markup. 4 calendar systems, 7 date adapters, no framework lock-in.

Headless engine

Framework-agnostic core with compound hooks. You write the markup. duck-calendar handles state, ARIA, and keyboard.

Multi-calendar

Gregorian, Islamic, Persian, and Hebrew systems are built in. Switch systems without rewriting your date UI.

Date adapters

Plug in native Date, date-fns, dayjs, or luxon. Seven adapters included, or write your own against the adapter contract.

75% smaller

5 KB gzipped versus 20 KB for react-day-picker. Zero dependencies. The core ships nothing but your calendar.

Full a11y

Arrow-key navigation, Home/End row jumps, PageUp/PageDown month jumps, and complete ARIA grid semantics.

Single / range / multi

One hook covers every selection mode. Switch from single date to range to multi-select with one prop.

Install

Pick your adapter. Pick your calendar system.

# Install
bun add @gentleduck/calendar

# Use it
import { NativeAdapter, useCalendar } from '@gentleduck/calendar'

Free & open source

gentleduck is MIT licensed and will always be free and open source. Every package ships with full source access — fork it, modify it, own it.

Become a Sponsor