GTD Task List Manager

Summary: An experimental JavaScript GTD task/todo list manager
Version: 20150405
Prerequisites: PmWiki 2.2.58 or newer
Status: experimental
Maintainer: Petko
Categories: GTD PIM PHP55
Discussion: GTD-TLM-Talk

Users: +1 -1

License: GPL3+


An experimental JavaScript GTD task/todo list manager.

I use PmWiki to store all sorts of information: notes, links, project outlines, calendar reminders. I want to also have a simple but versatile todo/task list manager, inspired by the GTD technique by David Allen.

Preview / Test / Demo.

The main differences between GTD-TLM and the other PmWiki todo managers are:

  • the main program is written in JavaScript 1.2:
    • it runs mainly in your browser instead of on the server,
    • lightning fast to add, modify, delete, filter and search tasks, as this is done in the memory of your browser,
    • some task updates or searches can be done with a single mouse click,
    • you can make many changes, and save them at once to a PmWiki data page at the end of your session,
    • a PmWiki page is only used as a data storage for the list of tasks,
    • the program may not work in very old browsers (pre-2000), or in stripped-down ones (on some mobile phones),
    • JavaScript needs to be enabled in your browser, at least for your own website where you install GTD-TLM,
  • GTD-TLM tries to closely follow the GTD method: with "Next actions", "Waiting for", "Some day/Maybe", "Done", implementing @Contexts and $Projects, and priorities,
  • start up display (filter, search, status) can be selected, or GTD-TLM can display all the tasks,
  • your data is stored in a simple plain text format, you can easily retrieve/change/search it even with other tools.


  • Add this CSS code to your /pub/css/local.css file (you can adapt it for your needs):
    /** GTD Task List Manager */
    select.gtd, input.gtd, textarea.gtd{
      border: 1px solid #888888; margin: .2em; font-family: sans-serif; }
    select.gtd option { border-bottom: 1px solid #eeeeee; }, { color: black; }
    option.done, label.done { color: #cccccc; }
    option.waitingfor, label.waitingfor { color: orange; }
    option.ref, label.ref { color: #888 ; }
    option.maybe, label.maybe { color: green; }
    label b, .kbd { border: 1px solid #ddd; background-color: #fafafa;
      padding: 1px 2px; margin: 1px; font-family: monospace; color:black; }
    select.itemlist, textarea.cmdline, input.cmdline { width: 480px; }
    select.taglist { width: 120px; }


In a wiki page where you want your list manager form to be, add just (:gtd-tlm:).

  • Your main tool is the command line on top. (See the screenshot above.)
  • "Tasks" are shown in the wide listbox.
  • "Tags" (contexts, projects) are in the narrow listbox on the left. Contexts are keywords preceded by "@", projects are keywords preceded by "$".
  • "Task status" categories are the checkboxes below.
  • At the bottom, the "Save changes" button: press it to store your task list to PmWiki.

Adding a task. Write in the command line text field "+" and the task description:

 + something I need to do @home 

and press "Enter". The task will be placed on top of your task list.

Task status. A task entry can have any text or tag you like; it is very easy to find any task by searching for a word it contains. However, the first character of the task line indicates its status:

  • "!", the task is with "Top or High Priority",
  • ";", the task is marked "Waiting For",
  • "?", the task is set for "Some day/Maybe",
  • ".", the task is "Done",
  • ":", the item is for "reference", requires no action
  • in any other case, the task is a "Next Action".

You can change the status of a task by right-click or Shift+click on it a couple of times.

You can display tasks with only some of the statuses, by (un)checking the checkboxes below.

Modifying a task. Select a task, then write in the command line text field "=" and the new task description:

 = modified task content

and press "Enter". The selected task will be modified. To delete a task, use just "=".

You can middle-click or Ctrl+click on a task to copy it to the command line, this is very handy if you want to just add/remove a word or a tag.

Searching for tasks. Write in the command line :

 ? search terms -exclude

and press "Enter". The list will be filtered to show only tasks containing all the search terms. To exclude some terms, use "-" in front of them: only tasks without them will be shown.

Tag list. The tag list to the right contains @contexts and $projects that are present in your tasks.

  • If you double-click on a tag, the task list will be filtered to only show tasks containing this tag.
  • If you right-click of Shift+click on a tag, the task list will show all tasks.
  • If you middle-click of Ctrl+click on a tag, the tag will be appended to the command line.

Command line. The command line recognizes the following commands (followed by Enter):

  • "? keyword" : search/filter tasks (memo: question = query). Use "?" to list all tasks.
  • "+ task" : add a new task (memo: plus = addition)
  • "* @home" : AUTOAPPEND mode, will automatically add "@home" to every next task you add. You can quickly add multiple tasks with the same keywords, without typing them all. (memo: * = multiplication) To cancel the AUTOAPPEND mode, use just "*".
  • "= task" : to completely change the selected task, or just "=" to delete it.
  • You can double-click in the command line to clear it.


The program is quite customizable: (:gtd-tlm parameters:) where the optional parameters can be:

  • datapage=Group.Name the wiki page where your task list is stored; if not set, will use a page "$FullName-gtddata" ($FullName is your current page). You need to have read permissions to see/filter/search your tasks, and write permissions to change them.
  • lines=20 the number of lines in the task list box; default is 10, but if you have a big screen, a bigger list box may be more comfortable. To make the lists larger, change the CSS file.
  • clines=4 the number of lines in the command line (default is 2).
  • readonly=1 to remove the "Save changes" button.
  • quickref=0 to remove the quick reference below the form.

To select which tasks should be shown on startup, use either one:

  • done=0 maybe=0 ref=0 waitingfor=0 top=0 next=0 to exclude tasks with these statuses. These parameters control the status checkboxes below the form, setting them to "0" means the checkboxes will be unchecked on startup.
  • startup="@home -garage" set a search to be executed at startup time (like in the "?" command line).


  • "left-click" or just "click" means you press down and release with your main (left) mouse button,
  • "right-click" means you click with your right mouse button,
  • "middle-click" means you click with your middle mouse button (or on the wheel),
  • "Shift+click" and "Ctrl+click" means you press down the "Shift" or the "Ctrl" key on your keyboard, "left-click", then release the "Ctrl" key,
  • "double-click" means you left-click twice (quickly),
  • a "selected list item" means you "clicked" on it, and its appearance changed, usually to a dark blue background color.

In some cases, on some browsers or computers, you cannot "middle-click" on a task, hence the "Ctrl+click" command which does the same. Same for "right-click"="Shift+click".

On some browsers, the tasks will not be colored; you can use the free Mozilla Firefox browser if you really need colored tasks.

The recipe is developed with the latest PmWiki 2.2 beta series; it uses UpdatePage() and will not work with versions older than 2.2.0-beta12 (which was published 2006-10-03).

The recipe should also work in UTF-8.

Release Notes

  • 20150405 Fixes for PHP 5.5. The recipe now requires PmWiki 2.2.58 or more recent.
  • 20081124 Fixed a bug which cleared the datapage history.
  • 20080710 Changed javascript search location from $PubDirUrl to $FarmPubDirUrl (suggested by chr).
  • 20080615a Changed the tag list to filter tasks on double-click and not on single left-click.
  • 20080615 Larger command line by default, added clines=, modified layout and CSS, added "%" command line.
  • 20080614 First public release.

See Also


This program is written for PmWiki by Petko.


Please add your comments at GTD-TLM-Talk.

User notes +1 -1: If you use, used or reviewed this recipe, you can add your name. These statistics appear in the Cookbook listings and will help newcomers browsing through the wiki.