Skip to content
CanopyX

Calendar

Month, week, day, agenda and year views of grid records, with recurrence, time zones and iCalendar export.

CanopyCalendar45 operations, month to agendaDocumentation for the calendar

7 demos

Operations calendar Open this demo full screen

Month, week, day, agenda and year views of grid records, with recurrence, time zones and iCalendar export.

Build one like it

The smallest complete version, in each language CanopyX supports for this view. The demo above is the same API with more data.

using CanopyX;
using CanopyX.Html;

static DateTime At(int day, int hour, int minute = 0) =>
    new(2026, 10, day, hour, minute, 0, DateTimeKind.Utc);

var calendar = new CanopyCalendar("operations", "Operations calendar", new[] {
    new CanopyCalendarEvent("Core switch firmware upgrade", At(14, 22)) {
        End = At(15, 3),
        Tone = CanopyTone.Info
    },
    new CanopyCalendarEvent("Database failover test", At(16, 9)) {
        End = At(16, 11),
        Description = "DBA team, db-02"
    },
    new CanopyCalendarEvent("Disk latency on fs-01", At(16, 10, 15)) {
        End = At(16, 12),
        Tone = CanopyTone.Danger
    },
    new CanopyCalendarEvent(
        "Certificate expires: portal.example.com", At(21, 13, 45)) {
        Tone = CanopyTone.Warning
    },
    new CanopyCalendarEvent("Data centre power test", At(24, 6)) {
        End = At(24, 18)
    },
    new CanopyCalendarEvent("Weekly maintenance window", At(6, 20)) {
        End = At(6, 23),
        Recurrence = CanopyRecurrence.Weekly(DayOfWeek.Tuesday)
    },
    new CanopyCalendarEvent("Change freeze", new DateTime(2026, 10, 26)) {
        AllDay = true,
        End = new DateTime(2026, 10, 31)
    }
}, CanopyCalendarPreset.Standard);
calendar.Date = new DateTime(2026, 10, 16);
calendar.FirstDay = DayOfWeek.Monday;
calendar.SaveHtmlPage("calendar.html");

Run this snippet (calendar, C#)Its output, generated with the site.

Try this in the demo

  1. Views of one record set

    Switch between Month, Week, 3 days, Agenda and Year.

    Every view reads the same grid records; search, filters and saved views carry across.

  2. Recurring windows

    Find the daily stand-up and the weekly maintenance window, then open one occurrence.

    Series come from a recurrence rule, with one skipped date and one moved occurrence kept as exceptions.

  3. Background ranges

    Look at the change freeze and the company holiday in month view.

    Ranges shade the days behind the events instead of competing with them.

  4. Record panel

    Open any event.

    The record opens in the panel with its ticket, owner and notes, the same panel the grid uses.