This file contains a brief summary of new features and dependency changes or releases, in reverse chronological order.


  • The man page has been improved. sphinx-click is now required to build the documentation.


  • Don’t display list if there’s only one list (of one list has been specified).
  • Fixed several issues when using dates with no times.
  • Dropped support for Python 3.4.


  • Properly support iCal files with dates (instead of datetimes).


  • Allow passing a custom configuration file with the --config/-c option.
  • Cached list metadata is now invalidated when it has changed on-disk.
  • Support for click < 6.0 has been dropped (it wasn’t actually working perfectly any more anyway). Click 7.x is the only currently supported version.
  • click-repl is now listed as an optional dependency. It is required for the todo repl command.
  • Add the default_priority config setting.
  • Drop support for Python 3.4.


  • Fix crashes due to API changes in icalendar 4.0.3.
  • Dropped compatibility for icalendar < 4.0.3.


  • Support Python 3.7.
  • Support click>=7.0.
  • Properly parse RBGA colours.


  • Add -r option to new to read description from stdin.
  • Add a dedicated zsh completion function.
  • Lists matching is now case insensitive, unless there are multiple lists with colliding names, in which case those will be treated case-sensitive.
  • Fix some tests that failed due to test dependency changes.


  • New runtime dependency: click-log.
  • Drop support for Python 3.3, which has reached its end of life cycle.
  • Add –raw flag to edit. This allows editing the raw icalendar file, but only use this if you really know what you’re doing. There’s a big risk of data loss, and this is considered a developer / expert feature!


  • Deploy new versions to PyPI using twine. Travis doesn’t seem to be working.


  • Tests should no longer fail with pyicu installed.
  • Improved documentation regarding how to test locally.


  • Initial support for (bash) autocompletion.
  • The location field is not printed as part of --porcelain.


  • Fix start-up crash caused by click_log interface change.
  • Dropped runtime dependency: click_log.


  • Completing recurring todos now works as expected and does not make if disappear forever.


  • Last-modified fields of todos are now updated upon edition.
  • Sequence numbers are now properly increased upon edition.
  • Add new command todo cancel to cancel an existing todo without deleting it.
  • Add a new setting default_command.
  • Replace --all and --done-only with --status, which allows fine-grained status filtering. Use --status ANY or --status COMPLETED to obtain the same results as the previous flags.
  • Rename --today flag to --startable.
  • Illegal start dates (eg: start dates that are not before the due date) are ignored and are removed when saving an edited todo.


  • Fix a crash for users upgrading from pre-v3.0.0, caused due to the cache’s schema not being updated.


New features

  • Add a today setting and flag to exclude todos that start in the future.
  • Add the --humanize to show friendlier date times (eg: in 3 hours).
  • Drop --urgent and introduced --priority, which allows fine-filtering by priority.
  • Add support for times in due dates, new time_format setting.
  • Use the system’s date format as a default.
  • Add list selector to the interactive editor.
  • Add --start=[before|after] [DATE] option for list to only show todos starting before/after given date.
  • Add flag “–done-only” to todo list. Displays only completed tasks.
  • Make the output of move, delete, copy and flush consistent.
  • Porcelain now outputs proper JSON, rather than one-JSON-per-line.
  • Increment sequence number upon edits.
  • Print a descriptive message when no lists are found.
  • Add full support for locations.

Packaging changes

  • New runtime dependency: tabulate.
  • New runtime dependency: humanize.
  • New supported python version: pypy3.
  • Include an alternative [much faster] entry point (aka “bin”) which we recommend all downstream packagers use. Please see the Notes for Packagers documentation for further details.


  • The global --verbosity option has been introduced. It doesn’t do much for now though, because we do not have many debug logging statements.
  • New PyPI dependency click-log.
  • The --no-human-time flag is gone. Integrations/scripts might want to look at --porcelain as an alternative.
  • Fix crash when running todo new.
  • Fixes some issues when filtering todos from different timezones.
  • Attempt to create the cache file’s directory if it does not exist.
  • Fix crash when running --porcelain show.
  • Show id for todos everywhere (eg: including new, etc).
  • Add the ctrl-s shortcut for saving in the interactive editor.


  • Fix a crash after editing or completing a todo.


  • Fix a packaging error.


New features

  • New flag --porcelain for programmatic integrations to use. See the integrations section here for details.
  • Implement a new configuration option: default_due.
  • The configuration file is now pre-emptively validated. Users will be warned of any inconsistencies.
  • The list command has a new --due flag to filter tasks due soon.
  • Todo ids are now persisted in a cache. They can be manually purged using flush.

Packaging changes

  • New runtime dependency: configobj
  • New runtime dependency: python-dateutil
  • New test dependency: flake8-import-order.