node package manager


todo-md Build Status NPM version Code Climate

![Gitter]( Chat.svg)



Manage your GitHub Flavored Markdown Task List from the command line. A simple (but useful) example built using autocmdr.


Todo-md is meant to be a dead simple text based task manager. There are many task managers out there. What makes todo-md different? todo-md is, first of all, markdown based. todo-md runs off the command line and the task list is stored in a simple markdown file. Text based tasks list are easy to manage as part of a git repository. Furthermore, the todo list is gfm compatible for easy viewing in github and gist. Simply check-in your file along with your source code and readme file. Also, like git and npm, todo-md by default works in the current working directory so each project can have it's own todo list.

I use todo-md all the time. I hope you find it useful as well. Feedback is welcome.


Install todo-md globally

$ npm install -g Hypercubed/todo-md

Autocomplete (optional)

Do one of the following to enable auto-completion in your shell.

  • Add completion helper to ~/.bashrc (or ~/.zshrc) todo completion >> ~/.bashrc
  • Add completion to current shell . <(todo completion)

Quick start

Creating a todo list is done simply by adding your first task. For example

$ todo "Learn to use task-md"

will create a file in the current directory containing a single line:

   - [ ] Learn to use task-md

Note that when adding tasks the add command is optional. You can also type todo add "Learn to use task-md".

To mark a task as done type

$ todo do 1

or undo

$ todo undo 1

To remove a task

$ todo rm 1

After each command you will see a list of your tasks along with line numbers. You can also get the list at anytime by typing

$ todo

Note that the command list is optional you may also type todo list.

Note that do, undo, and rm require an index while list and add the index is optional. With the exception of the add command this index can be a single line number (as displayed when running todo list) or a list of line numbers. Ranges may also be used. For example the following command will mark line 15,20, and 25-30 as done.

$ todo do 15,20,25-30

Adding the -g option flag to any command will set the working file to ~/todo/ Great for keeping a master todo list. Try using gistup to push to github gist for online task management:

cd ~/todo/
gistup --private --


Usage: todo [options] [command]


list [index]               Displays all (or specified) lines in todo list with line numbers
print [index]              Displays all (or specified) lines in todo list without line numbers (same as list --no-color --no-stats --no-line-numbers)
add <text_to_add> [index]  Adds text_to_add to your todo file on its own line at [index] or EOF if no index provided
do <index>                 Marks task as done
undo <index>               Marks task as not done
rm <index>                 Removes tasks
mv <from> <to>             Moves task <from> to <to>
status                     Shows the tasks status (total, done, pending)


-h, --help             Output usage information
-d, --debug            Enable debugger
-g, --global           Use global todo list (usually ~/todo/
-N, --no-line-numbers  Disable line numbers
-C, --no-color         Disable line numbers
-S, --no-stats         Disable stats
-q, --quiet            Quiet mode
-V, --version          output the version number


See (managed using todo-md)


Copyright (c) 2013 Jayson Harshbarger Gittip donate button Paypal donate button

MIT License


Built using generator-commader and autocmdr.