Free and open-source React date picker components built for modern applications and websites. These date pickers are built using React Aria and styled with Tailwind CSS.
Installation
You can add this date picker component using our CLI or manually:
npx untitledui@latest add date-picker
Date picker examples
Below are examples and variations of this date picker component:
October 2026
Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
October 2026
Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
October 2026
Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
November 2026
Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
October 2026
Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
November 2026
Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
API reference
Calendar
Import Calendar from @/components/application/date-picker/calendar.
Props from react-stately (29)
Also accepts the global HTML attributes (dir, lang, hidden, inert, translate), all standard React DOM event handlers.
CalendarCell
Import CalendarCell from @/components/application/date-picker/cell. Renders React Aria’s CalendarCell — all of its props are supported.
Props from React Aria Components (8)
Also accepts the global HTML attributes (dir, lang, hidden, inert, translate), all standard React DOM event handlers.
CalendarContextProvider
Import CalendarContextProvider from @/components/application/date-picker/calendar.
DatePicker
Import DatePicker from @/components/application/date-picker/date-picker. Renders React Aria’s DatePicker — all of its props are supported.
Props from React Aria (42)
Also accepts the global HTML attributes (dir, lang, hidden, inert, translate), all standard React DOM event handlers.
DateRangePicker
Import DateRangePicker from @/components/application/date-picker/date-range-picker. Renders React Aria’s DateRangePicker — all of its props are supported.
Props from React Aria (43)
Also accepts the global HTML attributes (dir, lang, hidden, inert, translate), all standard React DOM event handlers.
RangeCalendar
Import RangeCalendar from @/components/application/date-picker/range-calendar.
Props from react-stately (31)
Also accepts the global HTML attributes (dir, lang, hidden, inert, translate), all standard React DOM event handlers.
RangeCalendarContextProvider
Import RangeCalendarContextProvider from @/components/application/date-picker/range-calendar.
FAQs
Please refer to our frequently asked questions page for more.
It works with DateValue objects from @internationalized/date, not JavaScript Date — create one with helpers like today(getLocalTimeZone()) or parseDate("2025-01-31"). To hand the value to an API, convert it back with value.toDate(getLocalTimeZone()).
Pass value with onChange for a controlled picker, or defaultValue alone for an uncontrolled one. The popover stays open after a day is picked, and onChange fires on every click, so the value is already updated before the user presses Apply. Cancel only closes the popover and calls onCancel; it does not restore the previous value, so handle that yourself if you need it.
Use DateRangePicker from the same folder. Its value is an object of DateValues shaped { start, end }. From the lg breakpoint up it shows nine presets in a sidebar (Today, Yesterday, This week, Last week, This month, Last month, This year, Last year and All time), and below md it shows Last week, Last month and Last year as inline buttons instead. The week presets use the current locale's first day of the week.
All React Aria date picker props are forwarded, so use minValue and maxValue to bound the range and isDateUnavailable to disable individual days such as weekends or booked dates. isDisabled and isReadOnly work the same way on the whole field.
RangeCalendar reads the months value of visibleDuration. If you leave it out, it shows two months from the md breakpoint up and one month below, with start and end date inputs above the grid on small screens. The layout renders at most two month grids, so use visibleDuration={{ months: 1 }} or visibleDuration={{ months: 2 }}.
Both DatePicker and DateRangePicker take a size prop that is passed to the underlying Button, and it defaults to "sm".
Pass an array of DateValues to the highlightedDates prop on Calendar, and matching days get a small dot under the number. Today always gets the dot in every calendar. RangeCalendar accepts the prop in its types but doesn't apply it to its cells, and DatePicker and DateRangePicker don't expose it, so use Calendar directly when you need custom highlights.