chainmail event edit
Change the fields of an event the flags name, and only those. --start alone moves the event and keeps its length. --duration alone keeps the start. --attendee replaces the whole attendee list, and --no-attendees clears it. An empty value, such as --location "", clears that field; an empty --rrule removes the recurrence.
An all-day event stays all day: its --start and --end take dates, --end the last day, and --duration whole days such as 2d. To read whether the event is all day, a change of times reads the event first. --all-day with dates makes a timed event all day, and --timed with times and --end or --duration makes an all-day event timed.
The change is refused with EVENT_CONFLICT when the event changed since the etag was read. Without --etag the CLI reads the event first and uses the etag it has now.
Times are RFC 3339, such as 2026-11-10T09:00:00Z, or a time without a zone, 2026-11-10 09:00, or a date, 2026-11-10. A time or date without a zone is read in this machine's local zone, or in the zone --tz names. A time the clocks skip when daylight saving time starts is refused, and a time they show twice when it ends means the first of the two. The daemon's [calendar] timezone does not apply here: the CLI never reads the daemon config.
Usage
chainmail event edit <ref> [field flags] [--etag ETAG] [flags]
Examples
chainmail event edit ce_01jcb7m2k9r8q3v4w5x6y7z8a9 --start "2026-11-10 10:00"
# refuse the change if the event changed since it was read
chainmail event edit ce_01jcb7m2k9r8q3v4w5x6y7z8a9 --location "Room 5" --etag '"e1"'
Flags
--all-day an all-day event, with dates for --start and --end
--attendee stringArray an attendee's address; repeat for more (sent sorted, and once when addresses differ only in case)
--description string the event's description
--duration string how long it lasts, such as 30m, 1h30m or 2d, instead of --end
--end string when it ends; a date alone takes in that whole day
--etag string refuse the change if the event no longer has this etag (default: the etag it has now)
--location string where it takes place
--no-attendees remove every attendee
--rrule string a recurrence rule, such as FREQ=WEEKLY;BYDAY=MO
--start string when the event starts, or its first day with --all-day
--timed make an all-day event a timed one, with times for --start and --end or --duration
--title string the event's title
--tz string the event's IANA zone, also used to read times without a zone (default: this machine's zone for reading, the daemon's [calendar] timezone for the event)
Global flags
--output string output format: json or table (default $CHAINMAIL_OUTPUT, then cli.toml, then table on a terminal, json otherwise)
--socket string daemon socket (default $CHAINMAIL_SOCKET, then cli.toml, then /run/chainmail/chainmail.sock)