Zetdo is a small TODO list shell utility written on top of zet, the Zettelkasten utility 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


Zetdo has a feature very loosely inspired by org-agenda that 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 uv and 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 agenda command:

$ ./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


Page updates from the wiki zet.

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