A macOS CLI tool for reading calendar entries and outputting them in a ledger-compatible format.
Build the project in Xcode, then copy the executable to your PATH:
cp ~/Library/Developer/Xcode/DerivedData/caledger-*/Build/Products/Debug/caledger /usr/local/bin/On first run, macOS will prompt for calendar access. Grant permission in System Settings > Privacy & Security > Calendars.
caledger ls [OPTIONS]| Option | Description |
|---|---|
-c, --calendar <name> |
Calendar name(s) to read from (repeatable, default: all calendars) |
-s, --start <date> |
Start date (YYYY-MM-DD or relative) |
-e, --end <date> |
End date (YYYY-MM-DD or relative) |
-f, --filter <text> |
Filter events by title (case-insensitive) |
-t, --tag |
Tag output with calendar name |
-n, --notes |
Include event notes appended to title |
-b, --break |
Add date headers between days |
--nomap |
Skip title mappings from config |
--config-back |
Merge all configs, distant/parent wins conflicts |
--config-forward |
Merge all configs, closer/local wins conflicts |
-h, --help |
Show help |
Dates/times can be absolute (YYYY-MM-DD or YYYY-MM-DD HH:MM) or relative using these units:
| Unit | Meaning | Type |
|---|---|---|
Y |
year | date |
Q |
quarter (3 months) | date |
M |
month | date |
W |
week | date |
D |
day | date |
h |
hour | time |
m |
minute | time |
Examples: -1Y, +3M, -2W4D, +1h30m, -10m
### 2026-01-06 Monday ###
i 2026-01-06 10:00:00 title notes
; :CalendarName:
o 2026-01-06 11:00:00
### YYYY-MM-DD Day ###header: date separator (if-b)iline: event start time and title (with notes if-n); :CalendarName:line: calendar tag (if-t)oline: event end time
Create calendar events with the mk command:
caledger mk -c <calendar> -t <title> [-s <start>] [-e <end>] [-n <notes>]| Option | Description |
|---|---|
-c, --calendar |
Calendar to add event to (required) |
-t, --title |
Event title (required) |
-s, --start |
Start time (default: now) |
-e, --end |
End time (default: +1h from start) |
-n, --notes |
Event notes |
--nomap |
Don't expand title using mappings |
Examples:
# Create event starting now, ending in 1 hour
caledger mk -c Work -t "Quick meeting"
# Create event with specific times
caledger mk -c Work -t "Lunch" -s "2026-01-07 12:00" -e "2026-01-07 13:00"
# Create event using relative times
caledger mk -c tracked -t "Just did this" -s "-10m" -e "+0m"
# Create event with notes
caledger mk -c Personal -t "Call mom" -s "+1h" -n "Remember to ask about weekend"Manage title mappings that replace event titles in output:
caledger map ls # list all mappings
caledger map ls -f <text> # filter mappings
caledger map add <key> <val> # add or update mapping
caledger map rm <key> # remove mappingCaledger looks for a .caledger file by traversing up from the current directory. If none is found, it falls back to ~/.caledger. This allows project-specific configurations.
By default, only the closest config file is loaded. Use --config-back or --config-forward to merge multiple config files:
- Default: Load closest
.caledgeronly --config-back: Merge all configs; distant/parent settings win conflicts--config-forward: Merge all configs; closer/local settings win conflicts
Create .caledger in your project or home directory:
; Settings
calendar = Work, Personal
start = -1m
end = +0d
filter = wb
; Boolean flags
notes
notag
nomap
; Title mappings (event title = replacement)
wb12345 = expenses:travel:client
proj-abc = income:consulting:acme
| Key | Description |
|---|---|
calendar |
Default calendar(s), comma-separated |
start |
Default start date |
end |
Default end date |
filter |
Default title filter |
notes / nonotes |
Enable/disable notes |
tag / notag |
Enable/disable calendar tags |
break / nobreak |
Enable/disable date headers |
map / nomap |
Enable/disable title mappings |
Any unrecognized key is treated as a title mapping.
Command line options override config file values.
# List all events from last month
caledger ls -s -1m -e +0d
# List events from specific calendars with tags
caledger ls -c Work -c Personal -t
# Filter events and include notes
caledger ls -f "meeting" -n
# Use relative dates
caledger ls -s -1q -e +1w