The week ahead
Loading schedule…
Plans events in agenda, week, or month views with date navigation and accessible rescheduling.
Loading schedule…
Loading schedule…
Three ways in. They share one source, so the pixels match whichever you pick.
npm install @noorddev/vlak-react
// once, next to your app's root
import "@noorddev/vlak-react/css";
import { Scheduler } from "@noorddev/vlak-react";Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/scheduler.
npx @noorddev/vlak-cli add scheduler
The StyleX leaf lands in components/vlak/ with its dependencies, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/scheduler.json
The same registry item, installed by shadcn's CLI.
<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />
No React. Link vlak.css and use the markup and classes below.
import { Scheduler } from "@noorddev/vlak-react";
<Scheduler events={events} defaultValue={new Date("2026-09-07T12:00:00Z")} timeZone="Europe/Amsterdam" defaultView="week" onSlotSelect={createEvent} onEventSelect={openEvent} onEventMove={rescheduleEvent} />Agenda, week, and month planning in an explicit or browser-local zone. Mutations are callbacks.
| Prop | Type | Default | Description |
|---|---|---|---|
eventsrequired | readonly SchedulerEvent[] | ||
value | Date | ||
defaultValue | Date | ||
onValueChange | (day: Date) => void | ||
view | SchedulerView | ||
defaultView | SchedulerView | "week" | |
onViewChange | (view: SchedulerView) => void | ||
onEventSelect | (event: SchedulerEvent) => void | ||
onSlotSelect | (start: Date) => void | ||
onEventMove | (event: SchedulerEvent, next: { start: Date; end: Date; }) => void | ||
weekStart | 0 | 1 | 1 | |
locale | string | "en" | |
timeZone | string | IANA zone, for example Europe/Amsterdam. Defaults to the browser zone. | |
label | string | "Schedule" | |
disabled | boolean | false |
Also accepts Omit<HTMLAttributes<HTMLDivElement>, "defaultValue">.
| Keys | Does |
|---|---|
| Tab, Enter, Space | Operates date navigation, event buttons, scheduling actions, and view selection. |
| Escape | Closes the rescheduling dialog and returns focus to the triggering action. |
<div class="rs-scheduler" role="region" aria-label="Schedule"><h3 class="rs-scheduler-title">Monday, 7 September</h3><ol class="rs-scheduler-list"><li class="rs-scheduler-event"><span>Review</span><span class="rs-scheduler-time">09:00–09:30</span></li></ol></div>