Skip to main content

chainmail event create

Create an event on an account's calendar, the default one unless --calendar names another. Each --attendee is invited.

--all-day takes dates: --start is the first day and --end the last, or --duration a number of days such as 2d; one day by default. The event takes the dates typed, in any zone: the CLI sends them as 00:00 UTC of those dates, as the daemon stores all-day events. Otherwise --end or --duration, such as 30m or 1h30m, is required.

--tz names a timed event's zone as well as the zone times are read in. Without it the event takes the daemon's [calendar] timezone.

Running the same create again within 7 days returns the event already created instead of creating it twice: without --idempotency-key, the key is derived from the account, calendar and every field. The attendees are sent sorted, and an address given twice in different case once, so their order does not change the key. To create the same event again on purpose, pass a new --idempotency-key.

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 create --title T --start T (--end T | --duration D) [--all-day] [--attendee ADDR]... [flags]

Examples​

chainmail event create --account work --title "Planning" --start "2026-11-10 09:00" --duration 30m --attendee [email protected]
chainmail event create --title "Offsite" --all-day --start 2026-11-11 --end 2026-11-13
chainmail event create --title "Gym" --start "2026-11-10 07:00" --end "2026-11-10 08:00" --rrule "FREQ=WEEKLY;BYDAY=TU" --tz Europe/London

Flags​

--account string the account whose calendar holds the event (default: the daemon's choice)
--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)
--calendar string the calendar ID (default: the account's default calendar)
--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
--idempotency-key string the key that stops a repeat from creating twice (default: derived from the event)
--location string where it takes place
--rrule string a recurrence rule, such as FREQ=WEEKLY;BYDAY=MO
--start string when the event starts, or its first day with --all-day
--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)

See also​