Releases: schappim/ekctl
Releases · schappim/ekctl
v1.5.0
What's New
--time-format rfc3339|compacton every command (#3).compactrenders+1100-style offsets — and+0000instead ofZ— so jq'sstrptime("%Y-%m-%dT%H:%M:%S%z")can parse every timestamp directly. The default (rfc3339) is unchanged from previous releases.- Date inputs accept more ISO 8601 forms (#3):
--from/--to/--start/--end/--due/--recurrence-end-datenow takeZ,+11:00, or+1100offsets, with or without fractional seconds. Every timestamp ekctl emits is now valid ekctl input. - Invalid
--availabilityvalues are rejected onadd event/update eventwith the list of valid values, instead of being silently ignored. - Scoped permission prompts: commands request only the Calendar or Reminders access they actually use; a denied-but-needed permission fails fast naming the exact Settings pane and exits with code
2. - Faster large listings: the output date formatter is built once per run instead of once per event.
- CI + automated releases: every push/PR is built and tested, and every
v*tag automatically publishes a prebuilt universal binary (#11).
Install (prebuilt universal binary, no Xcode required)
curl -L -o ekctl.tar.gz https://github.com/schappim/ekctl/releases/download/v1.5.0/ekctl-v1.5.0.tar.gz
tar -xzf ekctl.tar.gz
xattr -d com.apple.quarantine ekctl 2>/dev/null || true
sudo mv ekctl /usr/local/bin/The binary is universal (arm64 + x86_64) and ad-hoc signed. The xattr step clears the quarantine flag Gatekeeper puts on downloaded binaries; it is safe to skip if you build from source instead.
Full Changelog: v1.4.0...v1.5.0
v1.4.0
Install (prebuilt universal binary, no Xcode required)
curl -L -o ekctl.tar.gz https://github.com/schappim/ekctl/releases/download/v1.4.0/ekctl-v1.4.0.tar.gz
tar -xzf ekctl.tar.gz
xattr -d com.apple.quarantine ekctl 2>/dev/null || true
sudo mv ekctl /usr/local/bin/The binary is universal (arm64 + x86_64) and ad-hoc signed. The xattr step clears the quarantine flag Gatekeeper puts on downloaded binaries; it is safe to skip if you build from source instead.
Full Changelog: v1.2.0...v1.4.0
v1.2.0
What's New
- Local timezone support: Dates are now output in the user's local timezone with offset (e.g.,
2026-01-23T12:00:00+11:00) instead of UTC (Z suffix). This makes the output more intuitive for users.
Installation
brew tap schappim/ekctl
brew install ekctlOr upgrade:
brew upgrade ekctlv1.1.0 - Calendar Aliases
What's New
Calendar Aliases
You can now use friendly names instead of long calendar IDs:
# Set up aliases
ekctl alias set work "CA513B39-1659-4359-8FE9-0C2A3DCEF153"
ekctl alias set groceries "E30AE972-8F29-40AF-BFB9-E984B98B08AB"
# Use them in any command
ekctl list events --calendar work --from 2026-01-01T00:00:00Z --to 2026-01-31T23:59:59Z
ekctl add event --calendar work --title "Meeting" --start 2026-01-15T09:00:00Z --end 2026-01-15T10:00:00Z
ekctl add reminder --list groceries --title "Buy milk"
# Manage aliases
ekctl alias list
ekctl alias remove workAliases are stored in ~/.ekctl/config.json.
Installation
brew tap schappim/ekctl
brew install ekctlOr upgrade:
brew upgrade ekctlv1.0.0
Initial release of ekctl - macOS EventKit CLI tool
Features
- List, create, show, and delete calendar events
- List, create, complete, and delete reminders
- JSON output for scripting and automation
- Support for all calendar types (iCloud, Exchange, local)
Installation
brew tap schappim/ekctl
brew install ekctlOr build from source:
swift build -c release