Skip to main content

Non-interactive CLI for managing local iCalendar (.ics) files

Project description

kcal

Non-interactive CLI for managing local iCalendar (.ics) files. Designed for scripting and AI agent integration — no GUI, no server, just direct .ics file manipulation.

Install

pip install kcal-cli

Or with uv:

uv tool install kcal-cli

Usage

All commands require -f <path> pointing to your .ics file.

List events

kcal -f ~/calendar.ics list
kcal -f ~/calendar.ics list --date 2026-06-25

Recurring events show their frequency in brackets: [weekly], [monthly], etc.

Add a timed event

kcal -f ~/calendar.ics add "Meeting" -s "2026-06-26 09:00" -e "2026-06-26 10:00"

Add an all-day event

kcal -f ~/calendar.ics add "Holiday" -s "2026-07-04" --allday

For multi-day events, set --end to the day after the last day (iCal convention):

kcal -f ~/calendar.ics add "Conference" -s "2026-08-01" -e "2026-08-04" --allday

Add a recurring event

kcal -f ~/calendar.ics add "Standup" -s "2026-06-26 09:00" -e "2026-06-26 09:15" --repeat weekly --byday MO,WE,FR
kcal -f ~/calendar.ics add "Review" -s "2026-07-01 14:00" -e "2026-07-01 15:00" --repeat monthly --count 6
kcal -f ~/calendar.ics add "Sync" -s "2026-07-01 10:00" -e "2026-07-01 11:00" --repeat weekly --interval 2 --until "2026-12-31"

Edit an event

kcal -f ~/calendar.ics edit 1cc4704e --summary "New title"
kcal -f ~/calendar.ics edit 1cc4704e --start "2026-06-26 10:00" --end "2026-06-26 11:00"
kcal -f ~/calendar.ics edit 1cc4704e --start "2026-06-26" --allday
kcal -f ~/calendar.ics edit 1cc4704e --repeat weekly --byday MO,FR
kcal -f ~/calendar.ics edit 1cc4704e --no-repeat

Delete an event

kcal -f ~/calendar.ics delete 1cc4704e

UID prefix matching — only the first few characters of the event UID are needed.

Options

Flag Description
-f, --file Path to .ics file (required)
-s, --start Start date/time (YYYY-MM-DD HH:MM or YYYY-MM-DD)
-e, --end End date/time (optional for all-day events)
--allday Create/convert to all-day event (uses VALUE=DATE)
--repeat Recurrence: daily, weekly, monthly, yearly
--interval Repeat every N periods (default: 1)
--count Total number of occurrences
--until Recurrence end date (YYYY-MM-DD)
--byday Days for weekly recurrence (e.g. MO,WE,FR)
--no-repeat Remove recurrence rule (edit only)
-d, --description Event description
-l, --location Event location

Notes

  • Creates the .ics file if it doesn't exist
  • All-day events use proper VALUE=DATE entries (not midnight-to-midnight)
  • Works with KOrganizer, GNOME Calendar, Thunderbird, or any iCal-compatible app
  • If your calendar app is open, you may need to refresh to see changes

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kcal_cli-0.2.0.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kcal_cli-0.2.0-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file kcal_cli-0.2.0.tar.gz.

File metadata

  • Download URL: kcal_cli-0.2.0.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for kcal_cli-0.2.0.tar.gz
Algorithm Hash digest
SHA256 2aa73b17766991b5d69a31c5eafb177d5254ae0fa8e0160822eda834b9fde3b3
MD5 2dbec138d9466aa206f3831ec1698b1c
BLAKE2b-256 3b7b24ac1cce182f1485dfbe5c4f6b200c223a137678d4eac1cd1a465bb0e03a

See more details on using hashes here.

File details

Details for the file kcal_cli-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: kcal_cli-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for kcal_cli-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c80fbebc67749fb6d006e6799696db63d9b84e3426c738c411662da43c53fc3b
MD5 101175aa4497dca0907af82ecd670f3a
BLAKE2b-256 301662b403688e62e6af6ceb1d8f9a762f12dfdf4101015b518e0e2deaaebb74

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page