calcurse – free calendar and scheduling application for the command line

Last Updated on August 11, 2021

calcurse is an open source, text-based calendar and scheduling application. The software keeps track of events, appointments and everyday tasks.

The software is lightweight, fast and reliable. It’s designed for the console or terminal, locally or on a remote machine.

A configurable notification system reminds users of upcoming deadlines, the curses based interface can be customized to suit user needs, and a very powerful set of command line options can be used to filter and format appointments, making it suitable for use in scripts.


The project’s GitHub offers zip and tar.gz files. And their website offers links to packages for most popular Linux distributions including Ubuntu, Fedora, openSUSE, Debian, and Arch Linux. There’s also packages for OpenBSD, FreeBSD, NetBSD as well as Mac OS X.

You may not get the latest version if you use a distribution’s package. So it’s often best to download the source package from the project’s website (at the time of writing, calcurse-4.3.0.tar.gz) and compile it yourself.

$ tar zxvf calcurse-4.3.0.tar.gz
$ cd calcurse
$ ./configure && make -j4
$ sudo make install

the -j flag speeds up compilation for systems with multi-core processors.

In operation

calcurse runs in 2 modes: interactive or non-interactive mode.

Interactive mode

In the interactive mode you view your own personal organizer with a text-based interface.

The screen is divided into 3 panels: appointments, calendar, and TODO. At the bottom of the screen, there’s a notification bar, and a status bar.  The panels are navigated using the the tab key.

Click for full size image

In the calendar panel, days with non-recurrent items have a different color as days containing recurrent items only. There’s lots of flexibility. For example, there’s support for punctual appointments (which have no end time), recurring appointments, todo items with a defined priority or an undefined priority, powerful duration strings, Vim-like copy/paste, and much more.

All of calcurse’s parameters are configurable from the Configuration menu available when pressing C. You are then driven to a submenu with six possible choices: general options, layout options, sidebar, colour theme, and keys configuration. The sidebar option lets you change the width of the calendar / todo panels.

I’ll illustrate one of these choices, the layout configuration. As the image below shows, the user can choose the layout of the 3 panels.

calcurse layout configuration
Click for full size image

The default layout has calendar panel at the top-right corner of the terminal, the todo panel at the bottom-right corner, and the appointment panel is displayed on the left hand-side of the screen.

Non-interactive mode

Non-interactive mode permits to easily build reminders just by adding calcurse with appropriate command line arguments inside a cron tab or within a shell init script. This means the desired information will be displayed, and after that, calcurse simply quits and you are returned back to the shell prompt.

There’s a powerful set of command line options available. There’s filter switches which restrict the set of items read from the appointments file. You can grep, query, filter, and much more.

Say you want to know your appointments for the next 7 days. Enter at a shell:

calcurse -r7

calcurse appointments
Click for full size image

One of the areas open source software could sometimes do better is user documentation. calcurse provides an online help system invoked by pressing the ? key. All of the commands are documented within this help system. It’s useful for newcomers as it gives help on calcurse’s specific features and key bindings.

When the daemon mode is enabled in the notification configuration menu calcurse stays in background when the user interface is not running. In background mode, calcurse checks for upcoming appointments and runs the user-defined notification command when necessary.

The software is written in the C programming language.

Other Features:

  • Hooks – run scripts when loading/saving data, e.g. to put your calendar data under version control. This feature can be used to automatically make Git commits or synchronize with a server when the data files are written. The project provides some example scripts.
  • Experimental CalDAV support – synchronize calcurse with your mobile devices or another computer. This is a Python script that synchronizes calcurse with a CalDAV server.
  • Support for services requiring OAuth2 authentication such as Google Calendar.
  • Support for various types of appointments and TODO items, including all-day events and recurring appointments (daily, weekly, monthly and yearly).
  • Weekly calendar view with the display of the week number and colored slices indicating appointment times.
  • Fast and customizable curses-based interface.
  • Regex-based searches.
  • Powerful non-interactive command line interface useful for scripts.
  • User-definable key bindings. The default keys will be familiar to vi users.
  • Fully user-configurable notification system (ability to send mails or anything else that could remind you of your upcoming appointments).
  • Cut and paste feature,  move items from one day to another.
  • Attach notes to appointments, events and todos.
  • Moon phase calculation.
  • Import capabilities with support for iCalendar format. Data in icalendar format as described in the rfc2445 specification can be imported.
  • Export capabilities with support for iCalendar and pcal formats.
  • Attach notes to each calendar element, and to edit them with your favorite text editor.
  • Support for non-color terminals.
  • Support for internationalization (i18n) with texts in English, French, German, Dutch, Spanish, and Italian.
  • UTF-8 support.


calcurse is designed to be lean, fast, and easy-to-use. It’s a wonderful text-based calendar and scheduling tool.

Support: GitHub code repository
Developer: Lukas Fleischer and contributors (original developer: Frederic Culot)
License: 2-clause BSD License

calcurse is written in C. Learn C with our recommended free books and free tutorials.

Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Newest Most Voted
Inline Feedbacks
View all comments
guncharez (@guncharez)
guncharez (@guncharez)
5 years ago

there is #crash on trying to change the color 🙁

5 years ago

Here’s what you can do:

1) Fix the issue yourself and send a commit to the developers, or
2) After determining the issue is not caused by your own system, contact the developers and provide them with a full bug report
3) Pay someone to fix the issue

5 years ago

Alter the conf file. I’ve had the crash issue too.