Skip to content

Releases: schappim/ekctl

v1.5.0

10 Jun 04:51

Choose a tag to compare

What's New

  • --time-format rfc3339|compact on every command (#3). compact renders +1100-style offsets — and +0000 instead of Z — so jq's strptime("%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-date now take Z, +11:00, or +1100 offsets, with or without fractional seconds. Every timestamp ekctl emits is now valid ekctl input.
  • Invalid --availability values are rejected on add event/update event with 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

10 Jun 04:28

Choose a tag to compare

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

21 Jan 06:16

Choose a tag to compare

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 ekctl

Or upgrade:

brew upgrade ekctl

v1.1.0 - Calendar Aliases

21 Jan 03:30

Choose a tag to compare

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 work

Aliases are stored in ~/.ekctl/config.json.

Installation

brew tap schappim/ekctl
brew install ekctl

Or upgrade:

brew upgrade ekctl

v1.0.0

21 Jan 03:14

Choose a tag to compare

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 ekctl

Or build from source:

swift build -c release