Dstask, a Taskwarrior Alternative

thumbnail for this post

I've been using taskwarrior (which I still maintain is excellent) to track what I have to do on a daily basis. It as served me well, working as a mental-offload both at work and at home. I also used it to produce a log of what I've been doing at work, which is useful for catchup meetings.

However, after some time using it there were a few things that I didn't like:

  1. Contexts apply to the task list, but not when adding new tasks. This means that it is necessary to type the context with every task add, for example task add project:backend +work +bug fix 500 internal server error.
  2. Contexts have to be defined in the configuration, rather than on-the-fly. I tend to use many different, mostly temporary contexts so reconfiguring every time is a pain.
  3. Synchronisation depends on running a taskserver and setting up a PKI. Whilst this works, I'd rather not have to maintain such a service and keys. I'd rather use git like I use for my blog (hugo), my passwords (password-store.org) and my notes.
  4. The table view breaks if any task description is too long
  5. There is no way of indicating paused tasks

There were several things I did like about taskwarrior:

  1. Its CLI interface, and task view
  2. It's prioritisation, tagging and project system
  3. The various task reports
  4. Being able to mark tasks as active – It's useful to record what I'm currently working on to resume after lumch or the next day

I decided to write dstask after encountering the issues. Dstask is much the same as taskwarrior, except:

  1. Contexts are automatically applied to new tasks
  2. Contexts don't need to be predefined
  3. It uses YAML files and git for data storage
  4. There's only one colour theme, and a few time based filters
  5. Priorities are added by the keywords P0` P1 P2 P3. Lower number is more urgent. There is a default, P2`.
  6. It's written in Go, for easy cross-platform static executables
  7. Table rendering is more stable
  8. The open command, which looks for URLs within a task and opens them in the browser, like taskopen
  9. Tasks which are started then stopped are marked as pause

Using git for data storage means that synchronisation, resolving merge conflicts and undo support are all implemented with little effort. Dstask's context system means it's easier to focus.

Here's a screenshot:

dstask
dstask

Links:

How I use dstask

  • I use the open command in place of leaving lots of tabs open in my browser
  • I use a context of +work at work, and -work at home for everything else
  • I use the note command to log things when working on the task, subtasks and record artefacts
  • I use start`/stop` to mark what I'm currently working on. This allows a quick resume of what I'm doing after lunch or the next day
  • I use projects for finite multi-task collections, and tags for everything else
  • I loosely follow GTD