Duck Calendar
Headless calendar engine. Ships Gregorian, Islamic, Persian, and Hebrew systems, seven date adapters, full keyboard and ARIA support. ~5 KB gzipped.
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.