Dstask, a Taskwarrior Alternative

Dec 2018 - 3 min read
If you’ve just discovered dstask, I recommend the README file which contains everything you need to know!

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:



How I use dstask

Thanks for reading! If you have comments or like this article, please post or upvote it on Hacker news, Twitter, Hackaday, Lobste.rs, Reddit and/or LinkedIn.

Please email me with any corrections or feedback.