Single binary terminal-based TODO manager with git-based sync + markdown notes per task
Dstask is a personal task tracker designed to help you focus. It is similar to Taskwarrior but uses git to synchronise instead of a special protocol.
notecommand -- edit a full markdown note for each task. Checklists are useful here.
opencommand -- open URLs found in specified task (including notes) in the browser
Next command (default when no command is specified)
Show-resolved command to review completed tasks by week. Useful for meetings.
Editing a task with $EDITOR (which happens to be vim)
Adding a task
Sync command (which uses git)
dstaskand mark it executable.
.bash-completion.shinto your home directory and sourcing it from your
.bashrc. There's also a zsh completion script.
alias t=dstaskto make task management slightly faster.
mkdir ~/.dstask && git -C ~/.dstask init.
There are also unofficial packages for:
We have a migration guide to make the transition from taskwarrior to dstask a simple process.
Usage: dstask [id...] <cmd> [task summary/filter] Where [task summary] is text with tags/project/priority specified. Tags are specified with + (or - for filtering) eg: +work. The project is specified with a project:g prefix eg: project:dstask -- no quotes. Priorities run from P3 (low), P2 (default) to P1 (high) and P0 (critical). Text can also be specified for a substring search of description and notes. Cmd and IDs can be swapped, multiple IDs can be specified for batch operations. run "dstask help <cmd>" for command specific help. Add -- to ignore the current context. / can be used when adding tasks to note any words after. Available commands: next : Show most important tasks (priority, creation date -- truncated and default) add : Add a task template : Add a task template log : Log a task (already resolved) start : Change task status to active note : Append to or edit note for a task stop : Change task status to pending done : Resolve a task context : Set global context for task list and new tasks (use "none" to set no context) modify : Set attributes for a task edit : Edit task with text editor undo : Undo last action with git revert sync : Pull then push to git repository, automatic merge commit. open : Open all URLs found in summary/annotations git : Pass a command to git in the repository. Used for push/pull. remove : Remove a task (use to remove tasks added by mistake) show-projects : List projects with completion status show-tags : List tags in use show-active : Show tasks that have been started show-paused : Show tasks that have been started then stopped show-open : Show all non-resolved tasks (without truncation) show-resolved : Show resolved tasks show-templates : Show task templates show-unorganised : Show untagged tasks with no projects (global context) help : Get help on any command or show this message version : Show dstask version information
||Critical||Must be resolved immediately. May appear in all contexts in future.|
||Low||Shown at bottom and faded.|
||Include tag. Filter/context, or when adding task.||
||Exclude tag. Filter/context only.||
||Ignore context. When listing or adding tasks.||
||When adding a task, everything after will be a note.||
||Set project. Filter/context, or when adding task.||
||Exclude project, filter/context only.||
||Base new task on a template.||
|Pending||Tasks that have never been started|
|Active||Tasks that have been started|
|Paused||Tasks that have been started but then stopped|
|Resolved||Tasks that have been done/close/completed|
When dstask runs, a context can be set to filter the task output. Run
dstask help context
for more examples. There are two ways to set a context.
contextcommand, which sets a global context on disk.
DSTASK_CONTEXTenvironment variable. Contexts set by this environment variable override the global context on disk.
context to set a context that will apply by default, no matter what
terminal window you're using.
DSTASK_CONTEXT environment variable to override context in specific
uses. For instance, a direnv config can set a context for
Context is not synchronised between machines.
Dstask is written in such a way that merge conflicts should not happen, unless
a task is edited independently on 2 or more machines without synchronising. In
practice this happens rarely; however when it does happen dstask will fail to
commit and warn you. You'll then need to go to the underlying
repository and resolve manually before committing and running
dstask sync. In
some rare cases the ID can conflict. This is something dstask will soon be
equipped to handle automatically when the
sync command runs.
show-projectscommands are useful for creating a context.
show-unorganisedcommand is good for this.
stopto mark what you're genuinely working on right now; it makes resuming work faster. Paused tasks will be slightly highlighted, so you won't lose track of them.
show-pausedhelps if they start to pile up.
ideas.mdfor various projects for this reason.
todaytag/context to get a lot of small things done in one day
The default database location is
~/.dstask/, but can be configured by the
Alternatives listed must be capable of running in the terminal.
Does dstask encrypt tasks?
Encryption is not a design goal of dstask. If you want to have your remote repository encrypted, you may consider git-remote-gcrypt or git-crypt. Note that dstask has not been tested with these tools, nor can any claims be made about the security of the tools themselves.
Is it possible to modify more than one task at once with a filter?
This means it's natural to review the tasks that would be modified before modifying by listing all tasks in the current context first, instead of potentially operating blindly by matching tags or numbers.
You can also specify multiple task numbers at one time, as with any other command.
Is there a GUI or web interface?
Not as part of dstask itself. However, dstask can be used as a library -- @botto has started developing a web GUI, specifically to allow task management on-the-go via a smartphone: https://awesomeopensource.com/project/botto/dstask-gui . It's in early stages but is meaningful as having no smartphone-based control is a blocker for a lot of people.
Has dstask been featured in a magazine?