Todotxt for task management

April 22, 2022
6 minute read

I suppose everyone needs to track the things they need to do. Since a long time I try to follow the getting things done method and its workflow. The basic assumptions are quite convincing and it helps me to be more confident that nothing falls through the cracks.

Like others I tried and used lots of different tools to implement it over the years ranging from Outlook tasks to Emacs Orgmode and a lot between.

Since a while I try to reduce the tools I use to simple ones and in particular I want to independent of the operating system I use. This leads to using plain-text as a basis and for a long time I was happy using Orgmode. It’s awesome software but - being based on Emacs - there includes an incredible amount of options and capabilities. Hence on average I spent more time fiddling with the tooling rather than closing tasks. In the meantime I moved away from Emacs for text processing and didn’t want to keep it just for task management. Hence I looked for something simple and came across todotxt.

Todotxt sits in the sweet spot between being simple and hence just working and being powerful enough to support all my needs.

In case you want to give it a try here is how I set it up and the tools I use.


At its core it is a set of rules how tasks are written into a plain text file together with a command line script to manage it. The quick start guide describes the installation but on the Windows platform you should rather install it in WSL (the windows subsystem for Linux) rather than using cygwin.

While there are a number of GUI tools available for the different platforms I stick to the CLI usually in the terminal of Visual Studio Code.

Configuration file

I keep the todo file in a separate folder so I set TODO_DIR to that folder.

I like the coloring of the output and set a few items:

export PRI_A=$YELLOW              
export COLOR_PROJECT=$BROWN       
export COLOR_CONTEXT=$GREEN       


I have set these commands in my bashrcand .zshrc:

alias t=''
alias ta=' add'
alias txp=' xp -o -7'
source ~/.todo/todo_completion

The first one allows me to call a shorter alias for to get a listing of my tasks The next two aliases simple reduce the keystrokes I need to enter to run commands. The third one sets parameters for one of the plugins I use see below.


Part of the power of it lies in the fact that you can extend the core cli by add-ons. You can find a long list in the todotxt wiki. You can install them following this guide. Most of these add-ons are shared as git repos so I clone it onto a subdirectory of ~/.todo/.todo.actions.d/.

Here are the ones that I find useful:

Mobile tools

One of the things I like is that there are good mobile clients to manage tasks also on the go. On Android I use Simpletask which is free and open source and on iOS I use Swifttodo which isn’t free but worth the price in my opinion.


During the day

Here are the commands I use regularly to get an overview of my tasks:

todo view past shows overdue tasks and tasks due today. I run this at least once in the morning to see if there are any deadlines I missed and hence need to prioritise or renegotiate.

todo view tomorrow shows tasks due to day or tomorrow. Similarly I run this at least once to get an idea if there are any deadlines I need to keep in mind.

todo ls @context shows me all tasks for a single context which is the main view I need during the day to see what I might do next.

During the weekly review

As part of the “get current” phase of my weekly review I use these commands:

Part of my self-reflection during the weekly review is to look at the cycle time of my tasks. My aim is to close all tasks within a month from entering it on average. Here close can also mean that I decide to cancel it because priorities may have changed or a project doesn’t seem worthwhile any more.

Thanks to the simplicity of the todotxt format it was easy for me to create an add on that calculates these averages. That’s also an example of the advantages of this tool and format: I’m absolutely sure you can develop this in Emacs-lisp as well. Unfortunately it exceeds my lisp knowledge by far but it’s well within my python capabilities 😄. If you want to give it a try you can find it on Github.

Share on:

Using Dendron with Github and Git

March 31, 2021
2 minute read
dendron software productivity

Why yet another blog?

January 30, 2021
2 minute read
productivity hugo

Working with Git on Android

December 21, 2020
3 minute read
dendron software productivity