Zetdo is a small TODO list shell utility written on top of zet, the Zettelkastenutility in weewiki.

The source code can be found on sourcehut.


sqlite3 (the sqlite3 CLI utility).

weewiki (get the source code on sourcehut.)

Basic Usage Example

Create a new TODO database with

$ ./zetdo create

Add some tasks:

$ ./zetdo add
say: make a task in zetdo.
$ ./zetdo add
say: make another task in zetdo.

List tasks that still need to be done. This will list the UUID, date, and message.

$ ./zetdo tasks
0fa78ac6 2021-01-16 14:59:30 make a task in zetdo.
7ef73f6d 2021-01-16 15:01:33 make another task in zetdo.

Add some comments to the task with UUID 0fa78ac6. Partial UUIDs can be accepted.

$ ./zetdo comment 0fa78
comment: Commenting on my first task.
$ ./zetdo comment 0fa78
comment: Adding another comment.

Get the comment history of task 0fa78ac6:

$ ./zetdo history 0fa78
2021-01-16 15:05:36     Commenting on my first task.
2021-01-16 15:06:08     Adding another comment.

Set task 0fa78ac6 to be done.

$ ./zetdo done 0fa78

Now it won't show up on when ./zetdo tasks is run:

$ ./zetdo tasks
7ef73f6d 2021-01-16 15:01:33 make another task in zetdo.

The zetdo database can be exported to a TSV where it can managed in source control.

$ ./zetdo export > zetdo.tsv

The database can then be rebuilt with

$ ./zetdo rebuild zetdo.tsv

Aliases File

In practice, it is best to include a local version of the zetdo shell script in the project, and to use it with an aliases file included with the zetdo project.

Zetdo can then be used by going into the directory where the script and aliases have been copied to and running:

source aliases

This creates an alias zetdo, among other things. More information can be found in the zetdo commands page.


Zetdo has a feature very loosely inspired by org-agendathat allows tasks to be ordered in a priority queue with and upvote/downvote system. That way, the most important tasks float to the top.

The priority queue is a SQLite table. Create it explicitely with create_list:

zetdo create_list

To add a task to the list, use lstadd:

zetdo lstadd UUID

Where UUID is the task UUID.

Removing a task is done with lstdel:

zetdo lstdel UUID

From there, tasks can be upvoted or downvoted using uvand dv:

weewiki zet uv UUID [amt]
weewiki zet dv UUID [amt]

Where UUID is the UUID, and amt is an optional integer amount to vote by.

Upvoted/downvoted tasks get displayed with their characters and the first characters 8 characters of their ergo UUID using the agendacommand:

$ ./zetdo agenda
4: [gloplfpk] Do that very important thing today
1: [gasdfjkl] Do that other thing you were going to do
0: [gpiqejiq] Forage for food

Zetdo Commands

A reference page for all available zetdo commands can be found at the page zetdo_commands.


Zetdo has very limited support for subtasks, or tasks belonging to tasks. A task with subtasks will indicate how many are done in the agenda view.

Known limitations: subtasks should only use TODO or DONE states. There's no blocking mechanism. Subtasks may or may not be able to have subtasks.

Linking task B to task A will make B a subtask, using vanilla zet


When task A is added to the agenda list, it will display how many subtasks there are, and how many are done.

To make a subtask done, set the task's state to be DONE.


Page updates from the wiki zet.

2021-07-19 10:09:03: added some initial stopwatch functionality to (zetdo) after adding the 'var create' command in (zet). If this ends up working, I'll have most of what I used org-agenda for. #org #timekeeping

2021-07-05 11:48:15: created a commands reference page for (zetdo), mainly because I keep forgetting about them: (zetdo_commands).

2021-02-14 17:00:38: this new 'subtasks' command I made today feels like it is going to be helpful. looking forward to scoping something using them in the (TODO) pages.

2021-02-07 12:22:59: initial work adding a priority queue and agenda view to (zetdo). should be immediately useful.

2021-02-01 19:45:48: added a TODO page for zetdo: (zetdo_TODO).

2021-01-19 16:32:20: this TODO app (zetdo) is proving to be an interesting application for (zet). It's making me think a lot more practically about item presentation and organization. Self-organizing structures like priority cues and trees seem to be structures that I want but do not have.

2021-01-16 21:34:42: If I could figure out ways to immitate hierarchy, I could have something very org-like up and running.

2021-01-16 21:33:47: thinking about integrating this into my wiki, as a kind of public TODO list? roadmaps and the like for various tools.

home | index