Issue Description
CalendarEvent/set does not persist useDefaultAlerts: false.
An event created or updated with useDefaultAlerts: false is subsequently returned by CalendarEvent/get with useDefaultAlerts: true.
This is also reproducible against current Stalwart main.
Expected Behavior
Per the JMAP Calendars specification, useDefaultAlerts is an optional Boolean with a default value of false.
When an event is created or updated with:
"useDefaultAlerts": false
a subsequent CalendarEvent/get should return false, and the event should not use the calendar’s default alerts.
Actual Behavior
Stalwart accepts the CalendarEvent/set request and reports the object as successfully created/updated, but a subsequent CalendarEvent/get returns:
"useDefaultAlerts": true
The same behavior occurs both when:
- creating a new event with
useDefaultAlerts: false - changing an existing event from
truetofalse
Current source appears to treat a missing per-user event preference as true in CalendarEvent/get, while CalendarEvent/set does not persist the false state.
Reproduction Steps
- Create a calendar event using
CalendarEvent/setwith:
{
"uid": "default-alert-test",
"calendarIds": {
"<calendar-id>": true
},
"title": "Default alert test",
"start": "2026-09-30T12:00:00",
"duration": "PT30M",
"timeZone": "Pacific/Auckland",
"useDefaultAlerts": false
}
-
Confirm that
CalendarEvent/setreports the object as successfully created. -
Fetch the event using
CalendarEvent/get, explicitly requestinguseDefaultAlerts. -
Observe that Stalwart returns:
"useDefaultAlerts": true
The issue can also be reproduced by creating an event with useDefaultAlerts: true and then updating it with:
{
"useDefaultAlerts": false
}
The update succeeds, but CalendarEvent/get still returns true.
Relevant Log Output
No error is reported. CalendarEvent/set returns a successful created or updated response and advances the collection state.
Stalwart Version
v0.16.x
Installation Method
Built from source
Database Backend
RocksDB
Blob Storage
RocksDB
Search Engine
Internal
Directory Backend
Internal
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on