Welcome to our documentation!
Scheduler | Getting Started
A .NET MAUI scheduling and calendar component library providing three views: a monthly calendar, an agenda timeline, and a vertically scrolling event list. All views are AOT-safe, fully programmatic (no XAML internals), and share a single ISchedulerEventProvider interface for data.
Frameworks
.NET MAUI
Blazor
Screenshots
Section titled “Screenshots”| Calendar | Agenda | Event List |
|---|---|---|
![]() | ![]() | ![]() |
Features
Section titled “Features”- Three views — Monthly calendar grid, day/multi-day agenda timeline, and vertically scrolling event list
- Shared data interface — All views consume
ISchedulerEventProviderso you write your data layer once - AOT-safe — All bindings use static lambda overloads, no string-based reflection
- Custom templates — Every visual element (events, headers, loaders, day pickers) is replaceable via
DataTemplate - Multi-day events — Events spanning multiple days are handled automatically across all views
- Gesture support — Swipe/pan navigation and pinch-to-zoom on all views
- Date constraints —
MinDate/MaxDateon all views to limit navigation and selection - Multiple timezones — Agenda view supports additional timezone columns with sticky headers
- Infinite scroll — Event list loads more data as you scroll in both directions
- Current time marker — Agenda displays a live time indicator that updates every minute
-
Implement
ISchedulerEventProviderpublic class MyEventProvider : ISchedulerEventProvider{public async Task<IReadOnlyList<SchedulerEvent>> GetEvents(DateTimeOffset start, DateTimeOffset end){return await myService.GetEventsAsync(start, end);}public void OnEventSelected(SchedulerEvent selectedEvent){// Handle event tap — navigate to detail, show dialog, etc.}public bool CanCalendarSelect(DateOnly selectedDate) => true;public void OnCalendarDateSelected(DateOnly selectedDate) { }public void OnAgendaTimeSelected(DateTimeOffset selectedTime) { }public bool CanSelectAgendaTime(DateTimeOffset selectedTime) => true;} -
Add a view to your page
<ContentPage xmlns:scheduler="clr-namespace:Shiny.Maui.Scheduler;assembly=Shiny.Maui.Scheduler"><scheduler:SchedulerCalendarViewProvider="{Binding Provider}"SelectedDate="{Binding SelectedDate}" /></ContentPage>
Core Models
Section titled “Core Models”SchedulerEvent
Section titled “SchedulerEvent”public class SchedulerEvent{ public string Identifier { get; set; } // Default: new Guid public string Title { get; set; } public string? Description { get; set; } public Color? Color { get; set; } public bool IsAllDay { get; set; } public DateTimeOffset Start { get; set; } public DateTimeOffset End { get; set; }}ISchedulerEventProvider
Section titled “ISchedulerEventProvider”public interface ISchedulerEventProvider{ Task<IReadOnlyList<SchedulerEvent>> GetEvents(DateTimeOffset start, DateTimeOffset end); void OnEventSelected(SchedulerEvent selectedEvent); bool CanCalendarSelect(DateOnly selectedDate); void OnCalendarDateSelected(DateOnly selectedDate); void OnAgendaTimeSelected(DateTimeOffset selectedTime); bool CanSelectAgendaTime(DateTimeOffset selectedTime);}The provider is not resolved from DI — you pass any implementation directly to the view via the Provider bindable property (from XAML binding or code-behind). This means you can use different providers for different views, or swap providers at runtime.
AI Coding Assistant
Section titled “AI Coding Assistant”Step 1 — Add the marketplace:
claude plugin marketplace add shinyorg/skills Step 2 — Install plugins:
claude plugin install shiny-client@shiny claude plugin install shiny-maui@shiny claude plugin install shiny-controls@shiny claude plugin install shiny-mediator@shiny claude plugin install shiny-data@shiny claude plugin install shiny-aspire@shiny claude plugin install shiny-extensions@shiny Coming soon — Copilot plugin install instructions will be added here.
Next Steps
Section titled “Next Steps”- Calendar View — Monthly calendar grid with event indicators
- Agenda View — Day/multi-day timeline with overlap detection
- Event List — Vertically scrolling event list grouped by day
- Custom Templates — Override any visual element with custom DataTemplates
- Release Notes


