How to Manage Your Tasks With Todo.txt
There's far too many to-do list apps to pick the perfect one. They're each so similar, yet different, and they'd all take time to setup and learn to use. You already have too much to do, so why take the time to learn how to use a new to-do list app just to keep up with everything you have to do?
The simplest way to keep track of your tasks is to write them down on a piece of paper. You can list them in the way that makes sense to you, with any extra info you want, and only have to carry the paper around to keep track of what you need to do. It's simple, cheap, and just makes sense.
But perhaps you'd rather keep a digital to-do list, so it'll be on all your devices and you won't have to worry about accidentally throwing it away. You just need a solution that's as simple as plain paper and ink.
Enter Todo.txt. It's a system for keeping track of your to-dos in a plain text file, and is the closest digital equivalent to keeping track of your tasks on paper. In this tutorial, I'll show you how to use Todo.txt to replace those paper lists and still ensure everything gets done.
What Is Todo.txt?
Todo.txt is a framework of guidelines through which a simple text file can become a feature-rich to-do list. Instead of just writing your tasks in a list at random, its simple rules will help you avoid creating a mess of tasks, and will make that plain text file into something much more useful and interesting. That might sound confusing, but it's actually simple. Here's how it works:
The first rule in Todo.txt is that each to-do item is its own line in your text file. New to-do item, new line. So let's give that a try. Open your favorite text editor (or just use Notepad on a PC or TextEdit on a Mac), and type in some tasks you need to get done, each on its own line, like so:
1 |
Do the dishes because they're starting to pile up and it really looks bad. |
2 |
Do a load of laundry, preferably a light load. |
3 |
Vacuum the house, making sure to get into all the little corners. |
There's my first three tasks, each of which are rather long. You can include as much info as you want into each task. Just make sure each task is on its own line.
Now, just save that file as todo.txt
, and place it inside your Documents
folder or somewhere else you can access it easy. Better yet, place it in your Dropbox
folder so you can easily sync it later.
And just like that, you've started to use Todo.txt! Sure it doesn't seem all that impressive just yet: a plain text file with your to-do items in it. Now we're ready to start using some of the text formatting conventions Todo.txt supports, and use some of the tools that support Todo.txt. That's when you'll see how useful this whole idea can be.
How to Speak the Lingo
We now have a text file called todo.txt
that's stored in our Documents
folder. Inside it we have a few to-do items. Let's take a look at that file again (this time, in the interests of brevity, I've shortened my todo items a bit):
1 |
Do the dishes. |
2 |
Do a load of laundry. |
3 |
Vacuum the house. |
Ok, not bad so far, but we really aren't using the Todo.txt framework to the full. While Todo.txt is supposed to be simple, it isn't featureless. Todo.txt is designed to help you prioritize your to-do items, as well as organize them into projects and contexts. This is largely following the spirit of David Allen's famous productivity methodology known as "Getting Things Done", or more often abbreviated to "GTD"—but you can use these tools to organize your tasks however you'd like. If you don't like GTD, you can still use Todo.txt to keep track of your tasks, and use these extra features to help you keep them organized.
Now, let's look at how projects, contexts, and priorities would apply to our sample list, and how to actually mark tasks as complete. I'll keep using my simple to-do list that, honestly, isn't tasks you'll likely need to put down on a to-do list, but you can use the same ideas shown here to keep track of any of your tasks.
Projects
In my list, all three items are related to cleaning the house. So we can group them all into a project called "cleaning". Just add a "+" sign followed by the project name to your tasks, like so:
1 |
Do the dishes. +cleaning |
2 |
Do a load of laundry. +cleaning |
3 |
Vacuum the house. +cleaning |
That's nice, but everything on my list falls into the same project, so it seems a little redundant. I could break everything out further, especially the "Do a load of laundry" task that includes putting the load in the washer, then the dryer, and finally folding the clothes. Todo.txt allows items to be in more then one project; just add another +project to the end of the task to add it to another project. Let's take advantage of this and split the "Do a load of laundry" to-do item into multiple items, and then put them in their own "laundry" project.
1 |
Do the dishes. +cleaning |
2 |
Put a load of laundry into the washer. +laundry +cleaning |
3 |
Put the load into the dryer. +laundry +cleaning |
4 |
Fold the load of laundry. +laundry +cleaning |
5 |
Put away the folded clothes. +laundry +cleaning |
6 |
Vacuum the house. +cleaning |
Great. Now our to-do list is split into multiple projects, and our "laundry" project tasks are categorized under the "cleaning" project as well.
Context
Context refers to a place or situation where you have certain things to do. In the case of our sample list, the context for all of them is pretty obvious: at home. In a case like that, I don't think adding a context is really all that useful, since it's an implied part of the project itself. Let's add some more items so we can better understand context.
1 |
Do the dishes. +cleaning |
2 |
Put a load of laundry into the washer. +laundry +cleaning |
3 |
Put the load into the dryer. +laundry +cleaning |
4 |
Fold the load of laundry. +laundry +cleaning |
5 |
Put away the folded clothes. +laundry +cleaning |
6 |
Vacuum the house. +cleaning |
7 |
Buy eggs. |
8 |
Buy juice. |
9 |
Buy a new pair of jeans. |
I added three new to-do items, all of which have to do with buying things. The first two are food items, things I'll need to buy at the grocery store. The last one is an article of clothing, something I'll probably buy at the mall. All of these items could be put into a "shopping" project. But the location I'll buy them at is different. This is where contexts come in. Designate a context in Todo.txt with an "@" sign followed by the name of your context. Here's what our new list, including contexts, looks like:
1 |
Do the dishes. +cleaning |
2 |
Put a load of laundry into the washer. +laundry +cleaning |
3 |
Put the load into the dryer. +laundry +cleaning |
4 |
Fold the load of laundry. +laundry +cleaning |
5 |
Put away the folded clothes. +laundry +cleaning |
6 |
Vacuum the house. +cleaning |
7 |
Buy eggs. +shopping @grocery |
8 |
Buy juice. +shopping @grocery |
9 |
Buy a new pair of jeans. +shopping @mall |
And there we go. Now the to-do items in our "shopping" project have been given a context. When we're at the grocery store we can focus on the items we need to buy there, and the same goes for when we're at the shopping mall.
Priority
The last feature we need to look at is priority. To do that, we'll add a few work-related tasks to the list, then assign a priority to them and some of our existing tasks. Just add a letter surrounded by parenthesis to the beginning of your tasks to give them a priority.
1 |
(A) Do the dishes. +cleaning |
2 |
(B) Put a load of laundry into the washer. +laundry +cleaning |
3 |
Put the load into the dryer. +laundry +cleaning |
4 |
Fold the load of laundry. +laundry +cleaning |
5 |
Put away the folded clothes. +laundry +cleaning |
6 |
Vacuum the house. +cleaning |
7 |
Buy eggs. +shopping @grocery |
8 |
Buy juice. +shopping @grocery |
9 |
(A) Buy a new pair of jeans. +shopping @mall |
10 |
Email Matt about my new article idea. +work |
11 |
(A) Finish rough draft of next article. +work |
Priorities are designated by an uppercase letter, A-Z, which is enclosed in parentheses, and then followed by a space. They always appear at the beginning of the to-do item, and are in alphabetical order—that is, a task with a priority of (A) is more important than a (B) task, and so on. You'll see why this is when we get into some of the tools you can use to manipulate your Todo.txt file.
Marking Items Complete
One final word on formatting your Todo.txt file: marking a task as complete.You could delete the item once you're done with it, but that isn't the preferred way in Todo.txt. Instead, put a lowercase "x" at the start of the to-do item, like so:
1 |
(A) Do the dishes. +cleaning |
2 |
(B) Put a load of laundry into the washer. +laundry +cleaning |
3 |
Put the load into the dryer. +laundry +cleaning |
4 |
Fold the load of laundry. +laundry +cleaning |
5 |
Put away the folded clothes. +laundry +cleaning |
6 |
Vacuum the house. +cleaning |
7 |
Buy eggs. +shopping @grocery |
8 |
Buy juice. +shopping @grocery |
9 |
x (A) Buy a new pair of jeans. +shopping @mall |
10 |
Email Matt about my new article idea. +work |
11 |
(A) Finish rough draft of next article. +work |
If you'll notice, there's now a small "x" at the beginning of the line containing the item "Buy a new pair of jeans." This signifies that the jeans have been bought and the item has been completed, effectively "crossed off" my list. That way, you'll see what you've completed, along with the stuff that still needs done.
You now know how to assign to-do items both projects and contexts, as well as how to prioritize various items inside your plain text to-do list. All of this helps make our to-do list more useful to us than it was before, giving structure and organization to an otherwise basic, unordered list. You can use each of these features, or none of them—it's your choice. Todo.txt at its basics is whatever you'd like it to be. It's a blank slate for your tasks, and some rules that keep everything organized.
And you could stop here. That's enough to keep up with your tasks the way you want, in a plain text file. You could easily find all of your projects or contexts with a Command-F or Control-F search, and stay on top of what needs done with nothing else.
But because we're following conventions outlined by Todo.txt, we can make use of some other interesting tools which give even more power to our humble little text file.
Desktop App Options
Being an open source project, Todo.txt also works in a variety of specialized apps outside of your plain text editor. You'll find apps for almost any platform that work with Todo.txt, but one of the best is a free app: Todour.
Todour is available for both Mac and Windows, and gives a simple graphical interface to our Todo.txt file. And I mean simple. Take a look:



See what I mean? You should notice right away though that your items have been correctly prioritized automatically. You won't see much fancy stuff here in Todour, but it has all the essentials. You can add and remove items, mark them as done or undone, and all of that is nicely supported within your plain text file. Check the little box there to mark an item complete, and a lowercase "x" appears at the start of that line in your text file. Nifty, isn't it?
The reason I really recommend Todour over using just a text editor is that it includes a search filter. This lets you take full advantage of projects and contexts and can dynamically hide everything else in your to-do list. Just search for a project or context, and only those tasks will appear. Search for a project and a context, and you'll see only the tasks that have both.



Overall Todour, like Todo.txt itself doesn't have many flashy features. But it has the essentials and it gets them right.
Mobile Access
Todo.txt was born from the command line, in a traditional computer world. But that doesn't mean you can't use Todo.txt on mobile devices. In fact, there are Todo.txt apps for iOS and Android for $2 each. They have all the same features and functionality that we've already discussed including projects, contexts, and priorities. The interface is clean and minimal, and focused on just letting you quickly keep up with your Todo.txt tasks.



There isn't too much to say about the mobile apps, other than that they work just like you'd expect. Like Todo.txt itself, these mobile apps are simple and straightforward. You can add tasks, filter them by project and category, and edit or complete them on the go—and keep everything in sync with your computer via Dropbox.
There's still one more tool to cover in the Todo.txt arsenal, and it's the most potent one—but also the most geeky: the command line interface.
The Command Line Interface
I would be remiss if I didn't cover the crown jewel in the Todo.txt world, the birthplace of the entire Todo.txt framework: the command line.
Most people try to avoid the command line these days. They're baffled by what it does exactly, and are a bit afraid of the power it lets them wield over their machine. Yet, the command line is a powerful tool, and I whole-heartedly encourage you to not let those fears keep you from exploring the command line. We have an excellent tutorial series on taming the terminal. If you aren't familiar with it already, take a look at that series now. It will help you understand this aspect of Todo.txt a lot better.
With that out of the way, let's look at Todo.txt's shell scripts. While the actual usage of Todo.txt is quite simple, setting up the command line interface (or CLI) is a bit complex.
First, download the latest copy of Todo.txt from Github. Once you unzip the download, you'll be left with three files: todo.sh, todo.cfg, and todo_completion. Let me explain each one in turn.
todo.sh — This is the brains of the operation, the main script, the one we'll make executable and use as our CLI.
todo.cfg — Some configuration options used by todo.sh
, the most important being the location of your todo.txt file.
todo_completion — An optional helper script which gives tab-completion capabilities to todo.sh
. I won't cover it in this tutorial, but if you're curious, you can read more about it here.
Now, to keep everything organized, you'll want to store the Todo.txt files somewhere safe. In the interests of being organized, you should store them in a folder of your home directory, or anywhere else you typically store shell scripts. In my case, the full path would look like this:
1 |
/Users/zach/todo/ |
Now that our Todo.txt scripts have a nice place to live, we'll activate todo.sh
by making it executable. To do this, use the command line, and navigate to the directory where your Todo.txt scripts are living. To navigate using the command line type:
1 |
cd /Users/YOUR_HOME_DIR/todo |
Replace "YOUR_HOME_DIR" with the name of your home directory. Now that you're in the right directory, make todo.sh
executable by running the following command:
1 |
chmod +x todo.sh |
Now if you try running the script by typing...
1 |
./todo.sh |
...you should see the usage information for Todo.txt. Congratulations! You now have the CLI for Todo.txt working! Try a simple command like:
1 |
./todo.sh list |
That will list all your current to-do items. Let me guess, it said you have 0 items in your to-do list, right? Don't be discouraged, you didn't do anything wrong. You just need to configure Todo.txt and tell it where your todo.txt file is stored. To do that, open the todo.cfg
and add the following info:
1 |
# === EDIT FILE LOCATIONS BELOW === |
2 |
|
3 |
# Your todo.txt directory |
4 |
#export TODO_DIR="/Users/gina/Documents/todo" |
5 |
export TODO_DIR="/Users/YOUR_HOME_DIR/Documents" |
6 |
|
7 |
# Your todo/done/report.txt locations |
8 |
export TODO_FILE="$TODO_DIR/todo.txt" |
9 |
export DONE_FILE="$TODO_DIR/done.txt" |
10 |
export REPORT_FILE="$TODO_DIR/report.txt" |
11 |
|
12 |
# You can customize your actions directory location |
13 |
#export TODO_ACTIONS_DIR="$HOME/.todo.actions.d" |
14 |
|
15 |
# == EDIT FILE LOCATIONS ABOVE === |
It's important to notice above that we have double quotes around our path /Users/YOUR_HOME_DIR/Documents
, and that again "YOUR_HOME_DIR" should be replaced with the name of your home directory. If you try running todo.sh
again you should see your tasks appear now:
1 |
ebed-melech:todo zach$ ./todo.sh list |
2 |
09 (A) Buy a new pair of jeans. +shopping @mall |
3 |
01 (A) Do the dishes. +cleaning |
4 |
11 (A) Finish rough draft of next article. +work |
5 |
02 (B) Put a load of laundry into the washer. +laundry +cleaning |
6 |
07 Buy eggs. +shopping @grocery |
7 |
08 Buy juice. +shopping @grocery |
8 |
10 Email Matt about my new article idea. +work |
9 |
04 Fold the load of laundry. +laundry +cleaning |
10 |
05 Put away the folded clothes. +laundry +cleaning |
11 |
03 Put the load into the dryer. +laundry +cleaning |
12 |
06 Vacuum the house. +cleaning |
13 |
-- |
14 |
TODO: 11 of 11 tasks shown |
Like we saw in Todour, our tasks are automatically listed in priority order. We can get the same sort of search functionality by adding a term to the end of our todo.sh list
command:
1 |
ebed-melech:todo zach$ ./todo.sh list +work |
2 |
11 (A) Finish rough draft of next article. +work |
3 |
10 Email Matt about my new article idea. +work |
4 |
-- |
5 |
TODO: 2 of 11 tasks shown |
It's great that you have the CLI up and running, but if you open a new Terminal window, or even just navigate out of the /Users/YOUR_HOME_DIR/todo
directory, you'll lose the ability to run the todo.sh
script. To stop this from happening you'll need to edit your .bashrc
. file or create it inside your home directory. Navigate back out to your home directory with a simple command:
1 |
cd |
Now that you're in your home directory, we'll use the command line text editor nano to create and modify this .bashrc
file.
1 |
nano .bashrc |
In that file we'll add the following line:
1 |
alias t='/Users/YOUR_HOME_DIR/todo/todo.sh -d /Users/YOUR_HOME_DIR/todo/todo.cfg'<br> |
As usual, replace "YOUR_HOME_DIR" with your home directory. Then close the file by pressing Control-X
and then save the file by pressing y
.
To activate the changes we just made run this command:
1 |
source .bashrc |
Ok, now try typing just "t" as a command in the command line. Here's what you should see:
1 |
ebed-melech:~ zach$ t |
2 |
Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description] |
3 |
Try 'todo.sh -h' for more information. |
Hooray! Now you can access the todo.sh
script from anywhere in the command line. All of the same commands as before work. See:
1 |
ebed-melech:~ zach$ t list |
2 |
09 (A) Buy a new pair of jeans. +shopping @mall |
3 |
01 (A) Do the dishes. +cleaning |
4 |
11 (A) Finish rough draft of next article. +work |
5 |
02 (B) Put a load of laundry into the washer. +laundry +cleaning |
6 |
07 Buy eggs. +shopping @grocery |
7 |
08 Buy juice. +shopping @grocery |
8 |
10 Email Matt about my new article idea. +work |
9 |
04 Fold the load of laundry. +laundry +cleaning |
10 |
05 Put away the folded clothes. +laundry +cleaning |
11 |
03 Put the load into the dryer. +laundry +cleaning |
12 |
06 Vacuum the house. +cleaning |
13 |
-- |
14 |
TODO: 11 of 11 tasks shown |
We've only just scratched the surface of what the Todo.txt CLI can do though. Try using the built-in help by running:
1 |
t help |
Read through the Github Wiki pages for the Todo.txt project, or if you're feeling adventurous, explore the Add-on Directory. The bottom line is, play with the Todo.txt CLI until you feel comfortable using it. The more comfortable you are with it, the more likely you are to use it, and so the more it will assist you in being productive.
In Conclusion
So there you have it: the world of Todo.txt, the to-do list system that can be as simple or as complex as you'd like to make it. It's just a plain text file, but when combined with apps and its command line interface it can be just as powerful as you'd like. You can keep your tasks organized in the way that makes most sense to you, and save time and money by not having to learn a new, complicated to-do list system.
Instead of downloading a new to-do list app to get everything simplified, just open a new plain text file and try out the steps above to use Todo.txt to manage your tasks. You'll be surprised how powerful such a simple system can be.