██████╗ ██████╗ █████╗ ██╗ ██╔══██╗██╔════╝██╔══██╗██║ ██║ ██║██║ ███████║██║ ██║ ██║██║ ██╔══██║██║ ██████╔╝╚██████╗██║ ██║███████╗ ╚═════╝ ╚═════╝╚═╝ ╚═╝╚══════╝
IPC
The dcal daemon exposes a scriptable IPC surface, handy for compositor keybinds and automation. Invoke a method and pass params as key=value pairs:
dcal ipc ui.toggle
dcal ipc events.list from=2026-06-01T00:00:00Z to=2026-06-30T23:59:59Z
dcal ipc reminders.upcoming limit=5
List every available method and its params:
dcal ipc list
Results are printed as JSON, so they pipe cleanly into jq and friends.
Common Methods
UI
| Method | Description |
|---|---|
ui.show | Show the calendar window |
ui.hide | Hide the calendar window |
ui.toggle | Toggle the calendar window |
ui.openEvent | Open a specific event's details window — uid*, start (RFC3339) |
ui.quit | Quit the running daemon |
ui.openEvent addresses events by their iCal UID (events.list includes it as uid), so external tools like bar widgets can jump straight to an event's native details view. Recurring occurrences share the series UID; pass the occurrence's start to pin a specific instance:
If the calendar window isn't open yet, it launches and navigates once loaded.
Events
| Method | Params |
|---|---|
events.list | query, from (RFC3339), to (RFC3339), limit, offset (all optional) |
events.get | uid*, calendarId, start (occurrence start RFC3339 for recurring events) |
events.create | calendarId*, summary*, start*, end*, description, location, allDay, status, reminders |
events.update | id*, plus any of the create fields |
events.delete | id* |
Calendars
| Method | Params |
|---|---|
calendars.list | — |
calendars.setHidden | calendarId*, hidden* (true|false) |
calendars.rename | calendarId*, name (empty clears) |
Accounts
| Method | Params |
|---|---|
accounts.list | — |
accounts.refresh | accountId (empty syncs all) |
Reminders
| Method | Params |
|---|---|
reminders.upcoming | limit (default 20) |
reminders.test | Fire a test notification |
System
| Method | Params |
|---|---|
system.autostart.get | Report autostart status |
system.autostart.set | enabled* (true|false) |
* marks a required param. Run dcal ipc list for the complete, always-up-to-date set of methods on your installed version.
Keybind Example
Bind a key in your compositor to toggle the calendar. For niri:
binds {
Mod+Shift+C { spawn "dcal" "ipc" "ui.toggle"; }
}