Skip to main content

Calendar

Libre WebUI includes a personal calendar. Every signed-in user gets their own month and week views with one-off and recurring events, and scheduled automations project their upcoming occurrences and run history onto the same grid.

Events

An event has a title, optional notes, a start time, an optional end time, an all-day flag, and an optional recurrence rule. Titles and notes are encrypted at rest with the same envelope used for chats and notes.

Recurrence uses the shared trigger model:

KindFieldsMeaning
onceatA single occurrence
hourlyminute, startHour?, endHour?Every hour within a window
dailyhour, minuteEvery day at a wall-clock time
weeklydayOfWeek, hour, minuteEvery week on a chosen day
monthlydayOfMonth, hour, minuteEvery month on a chosen day
yearlymonth, dayOfMonth, hour, minuteEvery year on a chosen date

Recurring events are stored once. Range queries expand them server-side: each projected occurrence carries a baseEventId pointing back to its source event, so editing the source updates every future occurrence. A dayOfMonth past the end of a month clamps to that month's last day. All recurrence math uses the server's local timezone.

API

All endpoints require authentication and operate only on the caller's own events.

MethodPathPurpose
GET/api/calendar/events?from=&to=Events in a range, recurrence expanded
POST/api/calendar/eventsCreate an event
PUT/api/calendar/events/:eventIdUpdate an event
DELETE/api/calendar/events/:eventIdDelete an event

Range queries take epoch-millisecond from/to bounds and span at most 13 months per request. A user may store up to 2000 events; titles are limited to 200 characters and notes to 10,000.