| Ocalt Query Language
Pricing Dashboard ocalt.com v1.0

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

VerbKey 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 ?slotWITH "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

CALENDAR CREATE EVENT "Team Standup" AT "2026-07-01T09:00:00" TO "2026-07-01T09:30:00" USING "Africa/Johannesburg" FORMAT "Daily team sync" WITH "alice@co.com,bob@co.com" LOCATION "Conference Room A" REMIND "15m" SET ?ev AFTER EMIT ?ev(id)
Try it ›

Recurring events

Use AS for frequency and ON for the day(s). The recurrence is stored as an RFC 5545 RRULE.

CALENDAR CREATE EVENT "Weekly Review" AT "2026-07-07T10:00:00" TO "2026-07-07T11:00:00" AS "weekly" ON "monday" SET ?ev AFTER EMIT ?ev(rrule)
Try it ›

Getting events

CALENDAR GET EVENTS "today" SET ?today AFTER EMIT ?today
Try it ›
CALENDAR GET EVENTS FROM "2026-07-01" TO "2026-07-31" SET ?evs AFTER EMIT ?evs
Try it ›
CALENDAR GET NEXT EVENT SET ?ev AFTER EMIT ?ev(title) & " starts at " & ?ev(start_ts)
Try it ›

Update and delete

CALENDAR UPDATE EVENT ?ev(id) WITH "New Title" TO "2026-07-01T10:00:00" SET ?ok AFTER EMIT ?ok
(* Delete just this occurrence *) CALENDAR DELETE EVENT ?ev(id) AS "this" SET ?n AFTER EMIT ?n (* Delete entire recurring series *) CALENDAR DELETE EVENT ?ev(id) AS "all" SET ?n AFTER EMIT ?n

Calendars

CALENDAR CREATE CALENDAR "Work" FORMAT "Work schedule" WITH "#0057FF" SET ?cal AFTER CALENDAR LIST SET ?all AFTER EMIT ?all
Try it ›

Availability and booking

CALENDAR CHECK AVAILABILITY FROM "2026-07-01" TO "2026-07-07" WITH "30m" SET ?slots AFTER EMIT ?slots
Try it ›
CALENDAR CHECK AVAILABILITY FROM "2026-07-01" TO "2026-07-07" WITH "60m" SET ?slots AFTER CALENDAR BOOK SLOT ?slots(0) WITH "Carol" FORMAT "carol@example.com" SET ?booking AFTER EMIT ?booking(id)

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.

CALENDAR CREATE EVENT "Weekly Report" AT "2026-07-07T09:00:00" TO "2026-07-07T09:30:00" AS "weekly" ON "monday" REMIND "10m" ON TRIGGER OPEN NEST EMAIL "Weekly report is starting in 10 minutes." TO "admin@myco.com" WITH "Report Reminder" CLOSE NEST SET ?ev AFTER EMIT ?ev(id)

Export / import

(* Export all events as iCal *) CALENDAR EXPORT "" SET ?ical AFTER WRITE ?ical INTO "/root/backup.ics" AFTER EMIT "exported"
(* Import from iCal file *) CALENDAR IMPORT "/root/events.ics" SET ?n AFTER EMIT "Imported: " & ?n & " events"

Event object fields

FieldTypeDescription
idstringUnique event ID
calendar_idstringParent calendar ID (default: "default")
titlestringEvent title
descriptionstringEvent description
locationstringLocation string — set via LOCATION "..." modifier
start_tsnumberStart time as UTC Unix timestamp
end_tsnumberEnd time as UTC Unix timestamp
timezonestringTimezone label (display only)
all_daybooleanAll-day event flag
attendeesarrayArray of email strings
rrulestringRFC 5545 RRULE string for recurring events
series_idstring|nullShared ID for all occurrences of a recurring series
created_atnumberCreation UTC Unix timestamp