calendar

Month/week/day calendar written from scratch — no FullCalendar, no upstream JS library at all (~24 KB bundle, 0 npm dependencies). The parts everyone gets wrong run in Go: RRULE expansion (DAILY/WEEKLY/MONTHLY with COUNT/UNTIL/BYDAY, wall-clock anchored, everything else rejected loudly), timezone resolution with an explicit gap/fold policy (spring-forward times carried past the gap, ambiguous hours resolved to the first occurrence — table-tested against America/New_York and Lord Howe's 30-minute step), and conflict detection over resolved instants. The frame renders server-resolved occurrences only and sends move INTENTS — a wall-clock delta — which the host re-resolves: a drag onto a DST boundary can come back with a different wall-clock delta than was dragged, and the demo's live readout shows requested vs wall vs elapsed.

v0.1.0sandboxed iframe

Install and mount

go get github.com/DonaldMurillo/gofastr-plugins@v0.5.0

import "github.com/DonaldMurillo/gofastr-plugins/calendar"

app.RegisterPlugin(calendar.New())

Isolation

Runs in an opaque-origin iframe

The frame never gets allow-same-origin, so it cannot reach host cookies, the database, or the host DOM. It talks to the host only over the versioned postMessage bridge, limited to the capabilities listed below.

Manifest

Plugin version
0.1.0
Framework compat
>=0.28.0
Isolation
sandbox-iframe-opaque
Sandbox tokens
allow-scripts
Capabilities
document:read, document:write, theme:read
Optional capabilities
none
CSP additions
none
Route prefix
/__gofastr/plugin/calendar
Entry
/__gofastr/plugin/calendar/app.html
Schema
calendar-v1
Min height
620px

All plugins