If todoman is packaged for your OS/distribution, using your system’s standard package manager is probably the easiest way to install todoman:

  • ArchLinux (AUR)

Install via PIP

Since todoman is written in python, you can use python’s package managers, pip by executing:

pip install todoman

or the latest development version by executing:

pip install git+git://

This should also take care of installing all required dependencies.

Manual installation

If pip is not available either (this is most unlikely), you’ll need to download the source tarball and install via, though this is not a recommended installation method:

python3 install

bash autocompletion (optional)

There is an autocompletion function for bash provided in the contrib directory. If you want to enable autocompletion for todoman in bash, copy the file contrib/autocompletion/bash/_todo to any directory you want. Typically /etc/bash_completion.d is used for system-wide installations or ~/.bash_completion.d for local installations. In the former case, the file is automatically sourced in most distributions, in the latter case, you will most likely need to add:

source ~/.bash_completion.d/_todo

to your ~/.bashrc.

zsh autocompletion (optional)

There is no dedicated zsh completion function for todoman yet, but you can use the bash completion function via zsh’s bash compatibility layer. This can be enabled. Assuming your completion function was copied to ~/.bash_completion.d as described above, you need to add the following lines to your ~/.zshrc:

autoload -U bashcompinit && bashcompinit
source ~/.bash_completion.d/*


Todoman requires python 3.4 or later. Installation of required libraries can be done via pip, or your OS’s package manager.

Todoman will not work with python 2. However, keep in mind that python 2 and python 3 can coexist (and most distributions actually ship both).

Recent versions also have experimental support for pypy3.

Notes for Packagers

All of todoman’s dependencies are listed in the requirements.txt file. New dependencies will be clearly announced in the CHANGELOG.rst file for each release. Patch releases (eg: those where the third digit of the version is incremented) will not introduce new dependencies.

If your packages are generated by running install or some similar mechanism, you’ll end up with a very slow entry point (that’s the file /usr/bin/todo file). Package managers should use the file included in this repository under bin/todo and replace the above one.

The root cause of the issue is really how python’s setuptools generates these and outside of the scope of this project.

If your packages are generated using python wheels, this should not be an issue (much like it won’t be an issue for users installing via pip).