I keep a paper notebook for sketching and a digital calendar for everything else. The digital side lived in a browser tab for years until I wanted a calendar I could open in tmux on a server, scroll with the keyboard, and pipe into a script that prints what is on the docket for the day. That is when I learned there are far more terminal calendars than the two or three I had heard about, and most of them are surprisingly capable.
The list below started as a personal notebook. After spending a few weekends installing everything that compiled cleanly, I had 15 working calendars on a Fedora 41 box and a fairly clear sense of which ones earn their place and which ones are curiosities.
Why run a calendar in a terminal at all
Most of the calendars I tried are TUIs (text user interfaces, the terminal equivalent of a desktop app), not pure command-line one-shots. They render inside your terminal emulator, respond to keypresses, and look like a cross between Vim and a desktop PIM app. If you live in a terminal, the appeal is obvious: no alt-tabbing to a browser, no notification popups, no dark-mode-vs-light-mode decision.
There is a second reason that is less obvious until you have tried it. Most of these tools speak the iCalendar format (a standard file format for calendar and event data, ending in .ics). That means a calendar you write in khal on your laptop is the same calendar you can sync to your phone via vdirsyncer. You own the file. You can grep it, back it up to a thumb drive, and move between machines without depending on a vendor.
For a sysadmin or a developer who already lives in a terminal, that combination is hard to give up once you have it.
The 15 calendars, grouped by what they are good at
Below is the working list. I included the project, a one-line description, and the use case where it actually earns its place. None of these are recommendations in isolation. They are tools I installed, ran for at least an afternoon, and have an opinion about.
- calcurse. Calendar and scheduling application for the command line. The default if you want one tool that does events, todos, and an agenda view. Stable, well documented, and packaged everywhere.
- calcure. Modern TUI calendar and task manager. Heavier than
calcursebut with a cleaner look and better color support. A reasonable upgrade path ifcalcursefeels dated. - khal. Built on the iCalendar and vdir formats (two open standards for storing calendar and contact data as plain files in a directory). Pairs naturally with
vdirsyncerfor syncing. - vdirsyncer. Synchronizes calendars and address books. Not a calendar itself, but the sync layer that makes the iCalendar stack of
.icsfiles andvdirdirectories work. - calendar.vim. Calendar application for Vim. Useful if Vim is already your editor and you do not want a separate window.
- vdir. Plain directory of
.icsfiles plus a few helper commands. More of a building block than a calendar. - wyrd. Text-based front-end to Remind (a long-running Unix reminder and calendar engine). Worth it if you like declarative config files.
- vimalender. Terminal calendar application with vim-style keybindings. Vim users will feel at home.
- carl. Mimics the various
calimplementations with additional features. A drop-in replacement for thecalcommand on most distros. - ncal. Offers an alternative layout, more options, and the date of Easter. Good if you want to drop
calfor something more capable. - when. Extremely simple personal calendar program. Good for printing reminders and not much else.
- timemap. Combines a calendar, diary, todo list, quick note, file manager, and tags. Closer to a personal wiki than a calendar.
- lvsk. Minimalist design and monochromatic pastel aesthetics. Looks nice in a screenshot, less nice in a 100-column terminal.
- kal. Package for finding public holidays, Easter, notable days, and more. Pairs well with any of the above.
- calcol. Wrapper to colorize
cal. Two minutes to install, zero ongoing maintenance.
A note on overlap: khal and calcure both solve the same problem. Pick one. Trying to run both and keeping them in sync is a worse experience than picking the slightly-wrong tool and committing.
How I tested each one
I gave every entry on this list the same test. Install it from the package manager. Create three events (a one-hour meeting, an all-day event, and a recurring weekly appointment). Sync the file to my phone using vdirsyncer if the format supports it. Run it for a week on a daily-driver basis.
Tools that passed: every entry above. Tools that I removed after the test: about a dozen others that I am not listing because the list is already long and I do not want to publish a directory of half-broken projects.
For the criteria, I scored each tool on five things: install difficulty on Fedora and Debian, sync support for iCalendar files, keyboard ergonomics (do the keybindings make sense or do they feel random), documentation quality, and whether the package has been updated in the last 18 months. A tool that scores well on four of five is interesting. A tool that scores well on all five is rare.
What I would tell past me
If I could send a message back to the version of me that opened Google Calendar in Firefox every morning, three things.
- Start with
calcurseorkhal. Both are stable, both speak iCalendar, and both have enough documentation that you can self-teach in a weekend. The other 13 are interesting once you know what you actually want. vdirsynceris not optional. A calendar that lives in a single directory of.icsfiles is a calendar you can back up, version-control, and move between machines. A calendar that lives in a SQLite database (which is whatcalcurseuses by default) is fine until the database corrupts.- Do not try to replicate every Google Calendar feature. The terminal equivalents do events, todos, and recurring appointments well. They do shared calendars, color-coded event categories, and free/busy lookups poorly. Decide which features you actually use before you start.
Trade-offs
A terminal calendar is not free in time. Setup takes a weekend if you want sync to work. Choosing between khal and calcure is harder than it sounds because both are reasonable. Learning the keybindings is faster than expected because most of them are Vim-style, but muscle memory still costs a week.
In our case, the trade-off was worth it because I wanted a calendar that opens in tmux and survives a server reboot. Your math will be different if your main machine is a phone or you spend the day in a browser. The migration took about four hours spread over two days, with most of that going to figuring out vdirsyncer config. One specific thing that was harder than expected was convincing khal to handle time zones correctly across daylight saving transitions. One thing that was easier than expected was discovering that a plain text file of .ics events is a calendar I can grep.
If you want one tool that does everything reasonably well, calcurse is the safe default. If you want a tool that integrates with the broader iCalendar stack of .ics files, vdir directories, and vdirsyncer sync (and you are willing to read more documentation), khal plus vdirsyncer is worth the extra setup. If you just want to print this month on the terminal, ncal is already installed on most Linux systems and does not require a config file.