Owlery.Maui.Scheduler
0.1.33
dotnet add package Owlery.Maui.Scheduler --version 0.1.33
NuGet\Install-Package Owlery.Maui.Scheduler -Version 0.1.33
<PackageReference Include="Owlery.Maui.Scheduler" Version="0.1.33" />
<PackageVersion Include="Owlery.Maui.Scheduler" Version="0.1.33" />
<PackageReference Include="Owlery.Maui.Scheduler" />
paket add Owlery.Maui.Scheduler --version 0.1.33
#r "nuget: Owlery.Maui.Scheduler, 0.1.33"
#:package Owlery.Maui.Scheduler@0.1.33
#addin nuget:?package=Owlery.Maui.Scheduler&version=0.1.33
#tool nuget:?package=Owlery.Maui.Scheduler&version=0.1.33
Owlery.Maui.Scheduler
A .NET MAUI week-view scheduler control, built from plain MAUI primitives — no XAML, no Blazor, and exactly one package reference of its own.
- Infinite horizontal paging through weeks, three days, or a single day, and a month surface.
- Drag-and-drop rescheduling, including across weeks by holding at the edge.
- A drawn grid — hour lines, configurable sub-hour marks, non-working days and hours, today.
- Semantic colours as ordinary bindable properties, so a MAUI
StyleorAppThemeBindingis the theme. - Appointment views are pooled and rebound, never rebuilt.
Getting started
dotnet add package Owlery.Maui.Scheduler
The control needs one line from the host, because MAUI gives a library no way to register a handler for itself:
builder.UseOwleryScheduler();
Then supply appointments and respond to what the user did:
new SchedulerView
{
ItemsSource = appointments, // IEnumerable<ISchedulerAppointment>
AppointmentTemplate = template,
SlotMinutes = 60, // a tap selects a whole hour
DragSnapMinutes = 15, // a drag lands on the quarter
}
VisibleDatesChanged is the data-loading hook: it reports the range on screen plus a prefetch window,
including on first layout.
Documentation
| Document | Answers |
|---|---|
docs/API.md |
The public surface — properties, events, contracts, defaults |
docs/design/ |
Why it is built this way — decisions, alternatives rejected, costs |
docs/requirements/ |
What it does, as behaviour |
AGENTS.md |
How to work on it |
Repository layout
| Project | |
|---|---|
Owlery.Maui.Scheduler |
The control. Targets net10.0, net10.0-android, net10.0-ios. |
Owlery.Maui.Scheduler.Sample |
A bare MAUI playground with a drawer of knobs bound to the public properties. |
Owlery.Maui.Scheduler.Tests |
Headless NUnit tests on net10.0 — no simulator, no device. |
dotnet test Owlery.Maui.Scheduler.Tests/Owlery.Maui.Scheduler.Tests.csproj
dotnet build Owlery.Maui.Scheduler.Sample/Owlery.Maui.Scheduler.Sample.csproj -f net10.0-ios -t:Run
Releasing
Versions come from Nerdbank.GitVersioning
(version.json), so a release on tag v0.1.4 publishes 0.1.4.
Run the Create release tag workflow against a branch or commit. It tags that commit with the version NBGV computes for it and pushes the tag — you never type a version number, so the tag and the package cannot disagree.
Then create a GitHub release on that tag by hand — the GitHub UI, or
gh release create <tag> --generate-notes --verify-tag. Publishing that release runs
.github/workflows/publish-nuget.yml, which builds every target framework, runs the tests, and
pushes the package and symbols to nuget.org.
Creating the release by hand is deliberate. A release created with the built-in GITHUB_TOKEN raises
no event, so the publish workflow would never run, and a PAT would mean keeping a RELEASE_TAG_TOKEN
secret. Using your own identity raises the event without either. Authentication to nuget.org is
Trusted Publishing — the workflow
proves its identity with a short-lived OIDC token, so there is no API key stored anywhere. That also
means the policy on nuget.org names this workflow file: renaming or moving it breaks publishing until
the policy is updated to match.
workflow_dispatch builds and packs without pushing, so the whole pipeline can be exercised before a
real release.
License
MIT — see LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-android36.0 is compatible. net10.0-browser was computed. net10.0-ios was computed. net10.0-ios26.0 is compatible. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Maui.Controls (>= 10.0.100)
-
net10.0-android36.0
- Microsoft.Maui.Controls (>= 10.0.100)
-
net10.0-ios26.0
- Microsoft.Maui.Controls (>= 10.0.100)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.