Native-like scrolling
Wheel and touch scroll through days, months, and years — not another month grid with endless next/prev taps.
Fast. Lightweight. Framework agnostic.
The dependency-free scrolling date picker for modern apps.
Native-like wheel scrolling. Single, range & multi select. Optional time. Popup or inline. Zero runtime dependencies — just JavaScript.
npm install @rolldate/core
Why RollDate
Wheel and touch scroll through days, months, and years — not another month grid with endless next/prev taps.
No React, Vue, jQuery, Moment, or Day.js. Drop in JS + CSS and ship.
new RollDate('#date') — then add options only when you need them.
Optional tick on month/year/time changes — vibrate or soft click on supported devices.
Single, range, and multi-select without swapping libraries or rewriting your form.
Built for mobile inertia and desktop wheel. Popup or inline, dark or light.
Why RollDate
Just JavaScript.
Works everywhere
No official wrappers required — mount it from plain JS inside your framework of choice.
Made for developers
Playground
Change options on the left — the picker and generated code update instantly.
Live demo
Interactive instances. Switch any card to Code to copy the snippet.
Default popup on one input.
new RollDate('#ex-single');
Start and end in a single field.
new RollDate('#ex-range', {
selectType: 'range'
});
Toggle several days; stays open while picking.
new RollDate('#ex-multi', {
selectType: 'multi',
closeOnSelect: false
});
Time columns, 5-minute step, footer actions.
new RollDate('#ex-datetime', {
enableTime: true,
timeStep: 5,
closeOnSelect: false,
footerButtons: [
{ text: 'Now', action: 'today' },
{ text: 'Apply', onClick: (p) => p.close() }
]
});
External control opens the picker with triggerSelector.
new RollDate('#ex-trigger', {
triggerSelector: '#ex-trigger-btn'
});
Override month/weekday names; format follows locale by default.
new RollDate('#ex-i18n', {
locale: 'fr-FR',
startWeekFromMonday: true,
monthsNames: [
'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'
],
monthsShortNames: [
'Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jun',
'Jul', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc'
],
weekDaysNames: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa']
});
Example
Easy to learn. No complex configuration required.
import RollDate from "@rolldate/core"; new RollDate("#date");
Configuration
Full details live in the API reference.
themetriggerSelectorstartDateselectTypecloseOnSelectlocaledateFormatminDatemaxDatedisabledDatesenableTimeuse12HourtimeStepselectDateonOpenonCloseonHoverDateonViewChangeComparison
A factual snapshot next to common lightweight pickers. Pick what matches your constraints — not a ranking.
| RollDate | Flatpickr | Litepicker | |
|---|---|---|---|
| Runtime dependencies | None | None | None |
| Scroll / wheel day list | Yes | Grid | Grid |
| Single / range / multi | All three | Single / range / multi | Single / range |
| Time picker | Built-in | Plugin / built-in | Limited |
| Popup + inline | Yes | Yes | Yes |
| License | MIT | MIT | MIT |
| TypeScript definitions | Yes | Community / partial | Yes |
| Approx. JS size | ~46 KB min / ~11.5 KB gzip | ~50 KB+ range* | Smaller* |
*Sizes vary by version and plugins. Check each project’s current build for exact numbers.
Installation
# install npm install @rolldate/core <!-- or CDN --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@rolldate/core/dist/css/rolldate.min.css"> <script src="https://cdn.jsdelivr.net/npm/@rolldate/core/dist/js/rolldate.min.js"></script> <input id="date" placeholder="Select a date">
import '@rolldate/core/css/min'; import RollDate from '@rolldate/core'; new RollDate('#date', { theme: 'dark', selectType: 'single', selectDate(date) { console.log(date); }, });
Standalone package with JS, CSS, and a ready example.
AI agents
Agents can install assets, scaffold examples, and pull options/snippets.
Package: @rolldate/mcp.
npx -y @rolldate/mcp npm install @rolldate/mcp
{
"mcpServers": {
"rolldate": {
"command": "npx",
"args": ["-y", "@rolldate/mcp"]
}
}
}
License
Free for personal and commercial use.