Guide
Best CLI Calendar Tools Compared
Compare six CLI calendar tools for developer workflows: gcalcli, khal, calcurse, remind, vdirsyncer, and Nylas CLI. Covers provider support, CalDAV sync, JSON output, scheduling, and AI agent integration.
Written by Caleb Geene Director, Site Reliability Engineering
Disclosure: Nylas CLI is built by Nylas, the publisher of this guide. We have aimed to present an honest comparison, but readers should be aware of this relationship.
How do CLI calendar tools compare?
A CLI calendar tool lets you view, create, and manage calendar events from the terminal instead of a browser or desktop app. Six tools cover the space in 2026: gcalcli for Google Calendar, khal for CalDAV providers, calcurse for local scheduling, remind for scripted rules, vdirsyncer for syncing between CalDAV servers, and Nylas CLI for multi-provider access across Google, Outlook, Exchange, iCloud, and Yahoo from a single command.
The table below shows how each tool handles providers, sync, output format, and scheduling features. If you only use Google Calendar, gcalcli is a strong fit. If you need one CLI for 5+ providers, Nylas CLI is the only tool that covers them all without separate sync daemons.
| Feature | gcalcli | khal | calcurse | remind | vdirsyncer | Nylas CLI |
|---|---|---|---|---|---|---|
| Language | Python | Python | C | C | Python | Go |
| Providers | Google only | CalDAV (via vdirsyncer) | Local / CalDAV (manual) | Local only | CalDAV / CardDAV | Google, Outlook, Exchange, Yahoo, iCloud |
| Sync | Live API calls | vdirsyncer required | caldav-sync script | None | Built-in (it is the sync tool) | Live API calls |
| JSON output | No (TSV with --tsv) | No | No | No | N/A (sync only) | Yes (--json) |
| Create events | Yes | Yes (interactive) | Yes (TUI) | Yes (.rem files) | No (sync only) | Yes |
| Availability / free-busy | No | No | No | No | No | Yes |
| Find meeting times | No | No | No | No | No | Yes |
| AI agent integration | No | No | No | No | No | MCP server built-in |
| TUI (interactive) | No | Yes | Yes (ncurses) | tkremind (optional) | No | No |
| Install | pip install gcalcli | pip install khal | brew install calcurse | brew install remind | pip install vdirsyncer | brew install nylas/nylas-cli/nylas |
| License | MIT | MIT | BSD | GPL | BSD | MIT |
Among the six tools, only Nylas CLI provides free/busy availability checks, mutual meeting-time discovery, and AI scheduling from the terminal. gcalcli is the most popular Google-only option with over 3,000 GitHub stars. khal paired with vdirsyncer is the standard CalDAV stack for privacy-conscious users who want local storage with server sync.
Why manage calendars from the terminal?
Terminal calendar tools give developers, sysadmins, and power users direct access to their schedule without leaving the command line. A 2024 Stack Overflow survey found that 47% of professional developers use Linux as their primary OS, and many of those developers prefer keyboard-driven workflows for everything from Git to scheduling. Terminal tools also integrate into scripts, cron jobs, CI/CD pipelines, and AI agent workflows where a GUI isn't available.
Common use cases include checking today's agenda before a standup, creating events from a build script, querying availability across time zones before scheduling a meeting, and piping calendar data into reports. A cron job that runs nylas calendar events list --days 1 --json every morning and sends a Slack summary replaces a manual check that takes 2-3 minutes per day.
What is gcalcli?
gcalcli is a Python CLI for Google Calendar with over 3,000 stars on GitHub. It connects directly to the Google Calendar API using OAuth2, so you get live reads and writes without any sync daemon. The tool supports agenda views, quick-add with natural language, event search, and colored terminal output. It's the most popular Google Calendar CLI, first released around 2012 and actively maintained.
The main limitation is provider lock-in: gcalcli only works with Google Calendar. If you also use Outlook, Exchange, or iCloud, you'll need separate tools for each. It also lacks JSON output natively, though the --tsv flag gives tab-separated output that scripts can parse. Setup takes about 5 minutes because you need to create Google API credentials and complete the OAuth consent flow.
# Install gcalcli
pip install gcalcli
# View your agenda for the next 7 days
gcalcli agenda
# Quick-add an event using natural language
gcalcli quickadd "Team standup tomorrow at 9am for 15 min"
# Search for events matching a keyword
gcalcli search "sprint review"
# List calendars
gcalcli listWhat is khal?
khal is a Python-based terminal calendar that reads and writes vdir/iCalendar files stored locally. It doesn't talk to any server directly. Instead, you pair it with vdirsyncer to sync events from CalDAV providers like Google Calendar, iCloud, Fastmail, or Nextcloud. The interactive TUI shows a date-range view with color-coded calendars, and you can create events interactively or via command-line flags.
khal is popular among privacy-focused users who want their calendar data stored locally and synced on their own terms. The trade-off is setup complexity: configuring vdirsyncer, setting up CalDAV credentials, and mapping remote calendars to local directories takes 15-20 minutes for a first-time setup. Once configured, the pair is reliable and works with any CalDAV provider.
# Install khal and vdirsyncer
pip install khal vdirsyncer
# After configuring vdirsyncer, sync calendar data
vdirsyncer discover
vdirsyncer sync
# View events for the next 7 days
khal list
# Create an event interactively
khal new 2026-05-23 10:00 11:00 "Code review"
# Launch the interactive TUI
khal interactiveWhat is calcurse?
calcurse is a C-based calendar and TODO manager with an ncurses TUI, first released in 2004 and maintained at calcurse.org. It stores appointments, todos, and notes locally in plain text files under ~/.local/share/calcurse/. The interactive interface splits the terminal into three panels: calendar, appointments, and todos. It's fast, lightweight (under 1 MB compiled), and has zero runtime dependencies beyond ncurses.
calcurse supports CalDAV sync via a bundled calcurse-caldav script, but the sync is one-shot (not a daemon) and requires manual configuration. The tool shines as a local-first planner for developers who want appointments and tasks in one place without cloud dependencies. It doesn't support JSON output, provider-specific APIs, or non-interactive batch operations.
# Install calcurse
brew install calcurse
# Launch the interactive TUI
calcurse
# Add an appointment from the command line
calcurse --add "05/23/2026 @ 14:00 -> 05/23/2026 @ 15:00 |Sprint planning"
# Export appointments to iCalendar format
calcurse --export > calendar.ics
# Run CalDAV sync (after configuring ~/.config/calcurse/caldav/config)
calcurse-caldav --syncWhat is remind?
remind is a C-based scriptable calendar system created by David Skoll in 1992 and still actively maintained at dianne.skoll.ca. Instead of a database or API, you write events as rules in .rem files using a domain-specific language. The rule engine handles complex recurring patterns that most calendar apps can't express: "the third Thursday of every month except December" or "every weekday until June 15, then switch to weekly."
remind generates text, PostScript, or PDF calendar output and has an optional Tk GUI called tkremind. The power is in the rule language. The trade-off: remind has no sync, no server integration, and no provider support. It's a local computation engine for dates and reminders, not a connected calendar client. Setup takes under 2 minutes since it's just a binary and a text file.
# Install remind
brew install remind
# Create a reminder file (~/.reminders or custom .rem)
# Contents of meetings.rem:
# REM May 23 2026 AT 10:00 MSG Sprint planning %b
# REM Mon Tue Wed Thu Fri AT 09:00 MSG Daily standup %b
# REM Third Thu MSG Monthly architecture review %b
# View upcoming reminders
remind ~/.reminders
# Generate a PostScript calendar for the current month
remind -c ~/.reminders
# Generate a simple calendar view
remind -c1 ~/.remindersHow does Nylas CLI handle calendar?
Nylas CLI connects to Google, Outlook, Exchange, Yahoo, and iCloud calendars through a single authenticated session. One nylas init command handles OAuth setup, API key configuration, and mailbox connection in about 2 minutes. Events, availability, and scheduling all work across providers without separate credentials or sync daemons. The CLI outputs structured JSON with --json, making it usable in scripts and AI agent tool calls.
The calendar commands go beyond list and create. nylas calendar find-time queries multiple attendees' calendars and returns mutual open slots. nylas calendar availability check returns free/busy data for a given time range. nylas calendar ai adds AI-powered scheduling intelligence. None of the other 5 tools offer availability checks or meeting-time discovery.
# List calendars across all connected providers
nylas calendar list
# List events for the next 7 days with timezone info
nylas calendar events list --days 7 --timezone America/New_York --show-tz
# List events from a specific calendar as JSON
nylas calendar events list --calendar CAL_ID --json --limit 20
# Create a new event
nylas calendar events create
# Find mutual meeting times across attendees
nylas calendar find-time
# Check free/busy availability
nylas calendar availability check
# AI-powered scheduling
nylas calendar aiWhat is vdirsyncer?
vdirsyncer is a Python sync tool for CalDAV and CardDAV, maintained by the pimutils project. It doesn't display or edit events. Instead, it syncs calendars and contacts between remote CalDAV servers and local vdir directories, which tools like khal and todoman then read. Think of it as rsync for calendars. It supports Google Calendar, iCloud, Fastmail, Nextcloud, Radicale, and any standard CalDAV server.
Initial setup takes 10-15 minutes: you configure server URLs, authentication (OAuth for Google, app-specific passwords for iCloud), and local storage paths in ~/.config/vdirsyncer/config. After that, vdirsyncer sync runs in under 5 seconds for typical calendars. Most users add it to a cron job that runs every 5-10 minutes for near-real-time sync.
# Install vdirsyncer
pip install vdirsyncer
# Discover available calendars on the remote server
vdirsyncer discover
# Sync all configured calendar pairs
vdirsyncer sync
# Example cron entry: sync every 5 minutes
# */5 * * * * vdirsyncer sync >> /tmp/vdirsyncer.log 2>&1
# Then view synced events with khal
khal listWhich CLI calendar tool should you use?
The right tool depends on two things: which calendar providers you use and whether you need programmatic access (JSON output, availability queries, AI integration) or a visual TUI. The decision tree below covers the 5 most common scenarios, ordered by provider complexity. Single-provider Google users have the most options. Multi-provider users who need scheduling features are limited to Nylas CLI.
By provider
- Google Calendar only — gcalcli is purpose-built for Google and works without a sync daemon. 3,000+ GitHub stars and a 12-year track record. If you also want a TUI, pair khal + vdirsyncer with Google's CalDAV endpoint.
- iCloud, Fastmail, or Nextcloud — khal + vdirsyncer is the standard CalDAV stack. iCloud requires app-specific passwords (generate at appleid.apple.com). Fastmail and Nextcloud work with regular credentials.
- Outlook / Exchange / Microsoft 365 — Nylas CLI is the simplest path. Outlook's CalDAV support is limited, so gcalcli and khal don't work. The alternative is Microsoft's Graph API, which requires Azure AD app registration.
- Multiple providers — Nylas CLI handles Google, Outlook, Exchange, Yahoo, and iCloud from one command. The other tools each cover a subset.
- No provider (local only) — remind for scripted rules, calcurse for a visual planner with todos. Both store everything on disk with zero cloud dependencies.
By use case
- Quick agenda check — gcalcli (Google) or
nylas calendar events list --days 1(any provider). Both return results in under 2 seconds. - Scripting and CI/CD — Nylas CLI's
--jsonoutput pipes intojqand works in non-interactive environments. gcalcli's--tsvflag is an alternative for Google-only scripts. - Privacy-first local storage — khal + vdirsyncer syncs to local vdir files. calcurse stores everything in
~/.local/share/calcurse/. remind uses plain.remtext files. - Complex recurring rules — remind's DSL handles patterns like "third Thursday except holidays" that other tools can't express.
- Meeting scheduling with availability — only Nylas CLI offers
find-timeandavailability checkacross multiple attendees and providers. - AI agent calendar access — Nylas CLI's built-in MCP server exposes calendar tools to Claude, Cursor, and VS Code. See the MCP setup guide for configuration.
Next steps
- Manage calendar from the terminal — create, list, update, and delete events with timezone and DST handling
- Google Calendar CLI — Google-specific calendar workflows with Nylas CLI
- Email CLI tools compared — the same comparison format for email tools
- Check calendar availability — free/busy queries and scheduling windows
- Create calendar invites — add attendees, locations, and notifications from the CLI
- Getting started — install and set up Nylas CLI in under 2 minutes
- Full command reference — every flag, subcommand, and example