← All Addons

Simple Calendar

widget

Simple Calendar

A day/week/month calendar view — the modern, settings-driven replacement for the legacy Calendar addon. Shows either:

  • an external ics feed URL you paste in, or
  • notes matching a Trilium search query, mapped to configurable start/due date (and recurrence) labels — generated fresh on every request, no separate file to keep in sync.

Setup

After installing, open the addon's root note (simplecalendar@beatlink) to see the calendar, or use TAM's "Settings" button to configure it:

Field Description
mode Trilium Search or External Feed URL
feedUrl Used when mode is External Feed URL
searchQuery Trilium search query for notes to show (mode Trilium Search)
startDateLabel Label holding each note's start datetime
dueDateLabel Label holding each note's due datetime
recurrenceLabel Label holding an RRULE string, if any (default recurrence)

Settings are saved to a persisted note (see TAM's Persistence mechanism) and provided by libsettings@beatlink.

How it works

In Trilium Search mode, the calendar view fetches custom/simpleCalendarFeed — a customRequestHandler endpoint (simpleCalendarFeed.js) that reads the current settings, searches for matching notes, and generates a fresh ics feed on every request via libCalendar.js's generateCalendar/respondWithCalendar. There's no intermediate .ical file to keep in sync — the feed is always current as of the last fetch.

In External Feed URL mode, the calendar just points directly at whatever URL you configured; the endpoint above isn't used.

The calendar grid itself is libcalendarwidget@beatlink, a Preact wrapper around the vendored FullCalendar.

Relationship to the legacy Calendar addon

This subsumes the legacy addon's functionality with three fixes: no hardcoded http://127.0.0.1:PORT/... URL (the endpoint is fetched as a relative custom/... path, which works regardless of what port Trilium happens to be running on), no redundant triple-triggered regeneration (hourly cron + require-time side effect + explicit call all firing independently), and vendored FullCalendar/ical.js instead of runtime CDN fetches — see the calendar-addon comparison discussion in this repo's history for the full writeup.