Calendar
Built-in per-namespace calendar system. Create events, manage calendars, check availability, book slots, export/import iCal, and trigger OQL scripts on event reminders. No external calendar service — everything runs on Ocalt.
Quick reference
| Verb | Key modifiers / Returns |
|---|---|
CALENDAR CREATE EVENT "title" | AT "datetime" TO "datetime" USING "timezone" FORMAT "description" WITH "attendees" AS "weekly" ON "monday" FROM "calendar-id" LOCATION "room" REMIND "15m" ON TRIGGER OPEN NEST ... CLOSE NEST → event object |
CALENDAR GET EVENT "id" | → event object or error if not found |
CALENDAR GET EVENTS "today" | → array of event objects for today |
CALENDAR GET EVENTS "this week" | → array of event objects for current week |
CALENDAR GET EVENTS "this month" | → array of event objects for current month |
CALENDAR GET EVENTS FROM "date" TO "date" | → array of event objects in range |
CALENDAR GET EVENTS WHERE "filter" | → array of events matching title filter |
CALENDAR GET NEXT EVENT | → next upcoming event object or null |
CALENDAR UPDATE EVENT "id" | WITH "new title" FORMAT "desc" AT "start" TO "end" USING "tz" → true |
CALENDAR DELETE EVENT "id" | AS "this"|"following"|"all" — default: this occurrence only. → count deleted |
CALENDAR CREATE CALENDAR "name" | FORMAT "description" WITH "#0057FF" → calendar object |
CALENDAR LIST | → array of calendar objects |
CALENDAR DELETE CALENDAR "id" | → count deleted |
CALENDAR CHECK AVAILABILITY FROM "date" TO "date" | WITH "30m" → array of {start_ts, end_ts} free slots |
CALENDAR BOOK SLOT ?slot | WITH "Name" FORMAT "email@x.com" → event object |
CALENDAR COUNT FROM "date" TO "date" | → count of events in range |
CALENDAR EXPORT "calendar-id" | → iCal string (RFC 5545). Empty string = all calendars. |
CALENDAR IMPORT "/root/file.ics" | → count of imported events |
Datetime format
All datetimes are stored as UTC. Accepted input formats: "2026-07-01T09:00:00", "2026-07-01T09:00:00Z", "2026-07-01" (midnight UTC). The USING modifier stores the timezone label for display — it does not offset the stored timestamp.
CREATE EVENT
Recurring events
Use AS for frequency and ON for the day(s). The recurrence is stored as an RFC 5545 RRULE.
Getting events
Update and delete
Calendars
Availability and booking
Reminders & push notifications
Reminders fire via browser push notification 30 seconds before the scheduled check (the reminder engine ticks every 30 seconds). To include a custom audio file, share it publicly first and pass the URL via the push payload in an ON TRIGGER block.
Reminder dispatch is built into the runtime — no extra setup needed. Push subscriptions must be active for the namespace (see Push & Webhooks).
ON TRIGGER — run OQL on reminder
Attach an OQL block to an event. Executes when the reminder fires. Any OQL verb is legal inside the block.
Export / import
Event object fields
| Field | Type | Description |
|---|---|---|
id | string | Unique event ID |
calendar_id | string | Parent calendar ID (default: "default") |
title | string | Event title |
description | string | Event description |
location | string | Location string — set via LOCATION "..." modifier |
start_ts | number | Start time as UTC Unix timestamp |
end_ts | number | End time as UTC Unix timestamp |
timezone | string | Timezone label (display only) |
all_day | boolean | All-day event flag |
attendees | array | Array of email strings |
rrule | string | RFC 5545 RRULE string for recurring events |
series_id | string|null | Shared ID for all occurrences of a recurring series |
created_at | number | Creation UTC Unix timestamp |