Todotxt for task management

April 22, 2022
6 minute read

I suppose tracking the things to be done is a must for all of us. Since a fairly long time I try to follow the getting things done methodology and its workflow since the basic assumptions are quite convincing and it helped me to be more confident that nothing falls through the cracks.

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

Since some time 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 quite naturally 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 is an incredible amount of options and capabilities. Hence for a while 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. So I was looking for something simple and I came across todotxt.

Todotxt for me sits nicely 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 installation is described in the quick start guide but for the Windows platform I suggest to 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 mostly in the terminal of Visual Studio Code.

Config file

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

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

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


In addition I have set these commands in my bashrcand .zshrc:

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

As you will imagine the first one allows me to call simply or the alias for it 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 easily extend the core cli by add ons. You can find a fairly long list in the todotxt wiki. Installation of these add ons is quite simple. Most of these add ons are shared as git repos so I usually 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 usually 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. This is also an example of the advantages of this tool and format: I’m absolutely sure this can be acomplished in Emacs-lisp as well but 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
comments powered by Disqus