Ronalds Vilciņš

Todo.txt: A Plain Text Task List You Can Keep

Todo.txt keeps a task list in a plain text file, with a few conventions for priorities, dates, projects, and contexts. An editor is enough to begin; a particular app is optional.

Save this as todo.txt:

Text
(A) 2026-10-28 Review article examples +blog @computer
(B) Call the dentist @phone
2026-10-28 Check deployment headers +website @computer
x 2026-10-27 Send invoice +admin

Each task occupies one line. The file remains readable even if the application that once managed it disappears.

Keep Todo.txt conventions small and consistent

The format specification defines optional uppercase priorities at the start, creation dates, +projects, and @contexts. Completed tasks begin with lowercase x followed by a space and a completion date.

A project names a body of work, such as +blog. A context describes where or how a task can be done, such as @phone or @computer.

Choose names you will actually search for. Several nearly identical project names are harder to use than a short list with one spelling for each.

A creation date records when the task entered the list. It is not automatically a deadline. Additional metadata such as due:2026-11-02 depends on the conventions and client you choose.

Mark completion without losing the original task

Suppose this task was created on 27 October:

Text
(A) 2026-10-27 Review article examples +blog @computer

A completed form can keep both dates:

Text
x 2026-10-28 2026-10-27 Review article examples +blog @computer

The first date after x is completion; the following creation date is retained when it existed. This is example task data, not a record of work performed for this article.

Keeping completed lines makes the file useful as a small log. If you later archive them in another file, do it deliberately rather than deleting the only copy of the task history.

Search by exact tokens when the distinction matters

An editor’s search works for a small list. For a read-only project view, this Python example prints active tasks containing the exact +blog token:

Python
from pathlib import Path

for line in Path("todo.txt").read_text(encoding="utf-8").splitlines():
    if line.startswith("x "):
        continue
    if "+blog" in line.split():
        print(line)

Save it as active_blog.py beside the file and run:

Shell
python3 active_blog.py

The script does not edit or reorder anything. It also avoids treating +blogroll as a match for +blog, which a simple substring search could do.

This is a narrow filter, not a complete Todo.txt parser. It does not interpret dates, sort priorities, or implement a client’s extra metadata rules.

An independent view like this is useful when the format stays predictable. Adding another parser before you need one would make a small task list unnecessarily complicated.

Keep extensions separate from what the file itself guarantees

A plain file does not send a reminder when a due date arrives. A client may interpret the metadata, schedule a notification, or provide recurring tasks; those are application features around the text.

The official Todo.txt command-line client is one option when repeated editing starts to feel mechanical. Read its configuration and supported operations before letting it change an existing list.

Try a new client on a copy first. Check that completed dates, project names, Unicode text, and unfamiliar metadata survive its edits.

I would add a client to remove a real nuisance, such as repetitive completion edits or filtering. The file should remain understandable when that client is not running.

Decide where the task data belongs

A synced folder makes the file available on several devices, but concurrent edits still deserve attention. Before resolving a conflict, compare both copies instead of assuming that the newer timestamp contains every task.

Git can preserve a history for a private workflow. Keep private tasks, client names, and access details out of public repositories; the format’s readability also makes accidental publication easy to understand.

A separate backup is useful when an editor or sync client overwrites a file. Portability does not mean that one copy cannot be lost.

Use plain text where it fits the actual workload

Todo.txt works well for a personal list with quick entry, searchable projects, and modest automation. It is less convincing when the work depends on shared assignments, attachments, or a rich notification system.

You can add those features around a text file, but each one becomes another behavior to maintain. Compare that maintenance with the simplicity you wanted in the first place.

Start with a file, one consistent project naming scheme, and a clear completion convention. Let the next recurring problem decide whether the workflow needs another tool.

Filed under on

Last updated on

← Back to all articles