Markdown Kanban with Obsidian

Janne Kemppainen |

I like to organize my blog around Obsidian which is a Markdown-based note taking application with emphasis on internal linking and note discovery. I want to manage my blog posts as tasks, so I’ve implemented a custom Kanban-like workflow with Obsidian. In this post I will share my setup, and the alternatives that I’ve looked at.

I have recently written an article about Markdown based note taking software where I also talk about Obsidian, in case you’re interested in a small comparison.

I have been taking Markdown based notes with Obsidian for a while now. I write my blog posts in Markdown and convert them to a static website. I’m used to doing documentation with Markdown on GitHub. Why shouldn’t I manage my tasks with a Markdown based Kanban board too?

This question popped in to my mind recently. Actually, the ideal solution for me would be an Obsidian plugin, but unfortunately no one has implemented the idea yet even though there has been interest in this forum post.

My basic needs for the Kanban workflow are really simple. Each blog post should have its own task that I can somehow move between the To Do, Doing and Done states. Being able to estimate the complexity, or to add a timeline for the targeted publish date would be nice to have features.

Naturally, I also need to see all tasks and their statuses from a single view so that I can pick them up and start working on the next task.

My workflow

I start with the workflow that I finally ended up choosing because I think it is the most interesting option, and best integrated in my Obsidian workflow. It is a combination of the Obsidian Templater and Dataview plugins that add some needed features to make this possible.

The whole workflow starts with the blog post ideas. When I have a note that I would like to turn into a blog post some day I add a special YAML front matter at the beginning of the file. I have defined the basic frontmatter format as a template file, stored in templates/Blog post.md:

---
tags:
due:
status: todo
complexity: 🟩 🟨 🟥
---

I can use a keyboard shortcut to open the template selector and insert the Blog post template to the note. The status is automatically set to todo, but I can also edit it to doing if I want to start working on it right away. If I lose interest in a topic I can change the status to wontdo, and when I’ve published the post it will be done.

The tags can be anything, and it’s actually one of the front matter parameters that Obsidian understands natively. I might add a tag such as blog/python to indicate that it is a blog post about Python, but it isn’t really used in the workflow.

In the due field I insert a deadline for the task. Usually I just write 2021-09 or similar to define the approximate month for when the task should be done. When the task is finished I change the value to the actual publish date.

The complexity is a vague estimate of how much work is needed to write that article. The template pre-populates the field with three colored emojis that mean low, medium, and high in my system. I choose one to keep, and delete the others. It isn’t scientific by any means, and often the estimate can go horribbly wrong.

The actual Kanban board is in a separate note named Kanban. It uses the Dataview plugin to query the vault for notes based on the status field. Each status has its own table, like so:

# Kanban board

## Doing
​```dataview
TABLE complexity as Complexity, due as "Due Date"
FROM !"templates"
WHERE status = "doing"
SORT due asc
​```

## To Do
​```dataview
TABLE complexity as Complexity, due as "Due Date"
FROM !"templates"
WHERE status = "todo"
SORT due asc
​```

## Done
​```dataview
TABLE complexity as Complexity, due as "Due Date"
FROM !"templates"
WHERE status = "done"
SORT due desc
​```

## Won't Do
​```dataview
TABLE complexity as Complexity, due as "Due Date"
FROM !"templates"
WHERE status = "wontdo"
SORT due desc
​```

The queries differ a little based on their function. All views exclude the templates directory so that any templates won’t be erroneously shown as tasks. The Doing and To Do views sort items based on the due date in ascending order, the tasks are therefore prioritized in the order they should be published. The Done and Won’t Do views sort on descending due dates so that the most recent notes are always at the top.

This is how it looks on the Preview mode.

Obsidian Kanban with the Dataview plugin

As you can see I have a quick access to the topics that I’m currently working on as blog posts, and the ones that I’d like to work with next. The completed items are pushed further down on the page as they are not needed that often.

The due dates help me set a proper goal for each month without making this feel like actual work. It still doesn’t mean that I’m going to write all the articles that I have added to my backlog.

The complexity estimates allow me to cherry-pick the easier tasks when I feel like it.

Overall, I think this is as good as it can get without having an actual Kanban plugin.

Alternatives within Obsidian

Now that I’ve introduced my method, let’s quickly talk about the alternatives that you could use.

In the forum post that I linked earlier people suggested embedding notes within a table, so that you would have one note for each status and then move the content from one file to the other manually. The issue with this approach is that the horizontal space is quite limited and the table quickly becomes too crowded.

Another suggestion was to split the screen in three parts and open a file to represent each column. Again, moving the statuses would be done by copying and pasting the text to the other note. I think this is a better solution display-wise, but it requires you to manage the window layout manually.

I came up with another built-in solution that automates things and resembles my final workflow a bit. Obsidian supports embedded queries, so you can create search views that are directly added to a note. You could query for the #todo tag, for example:

```query
tag:#todo
```

Add the queries for each status that you’re interested in, and you effectively have the same system that I have without using external plugins. With this you can get automatically updating links to your #todo , #doing and #done notes.

It’s not as polished and doesn’t support additional metadata that you can add with the Dataview plugin, but it works.

External tools

If options within Obsidian don’t feel right to you, you always have the option to use external tools. There are some Markdown-based Kanban software that you could consider.

Taskell

Taskell is a command-line tool for managing a Kanban board that is stored as a single file. The output is pure Markdown, so it is also understood by Obsidian.

image-20210418134819947

It is actually a good thing that Taskell is a command-line application. If you’re version controlling your knowledge vault, you’re already likely using Git on the command line. Therefore Taskell doesn’t add any more application windows that you need to manage. You can just use the taskell command inside your vault directory to edit the task statuses.

The default filename for the Kanban board is taskell.md when you open the application without providing any arguments. You can edit this file directly inside Obsidian by adding new tasks as list items under the different headers. You can also check and uncheck sub-tasks, so you don’t need to use Taskell for every operation.

If I were to use Taskell for my Kanban board, I would use [[wikilinks]] as the task names so that all tasks would be properly linked to the board within Obsidian. Then I would create a separate note where I could organize the task groups in another order by embedding parts of the taskell.md file, for example the To Do items:

![[taskell#To Do]]

This would give me a list of the things to do, and because I would use the wikilink syntax in the task names I could navigate to the correct note to start working on it. Then I would use Taskell to change the status to Done or Doing before committing the changes to Git.

Imdone.io

Imdone is a separate GUI application for maintaining a Kanban board within Markdown files or inside source code as TODO comments. It’s a proprietary program that costs $25.

The app does look like a real Kanban board with drag-and-drop features, tags, due dates and so on. So if you need something that also looks like Kanban then that might be your choice. I haven’t personally tried it, so I cannot say much about it.

Since it seems to support multiple files, I think it could be possible to somehow tie the task cards with your notes. At least it has the option to open a card in the editor of your choice.

Conclusion

I think that I’ve finally come up with my ideal way to handle tasks within Obsidian with the currently available tools. It would be really cool to have a plugin that would do most of this without these small tricks but for now the workflow is good enough for me.

I tried using Taskell for a while, but I prefer doing everything inside Obsidian, if at all possible. And because I’m quite satisfied with the current setup I haven’t bothered to try Imdone.

I hope that this post has inspired you to think of your own task management. If you can come up with any improvements to my system I would be definitely interested in hearing about them! You can reply to the embedded tweet at the end of this article and share your thoughts or ask questions if you have any.

Discuss on Twitter

Subscribe to my newsletter

What’s new with PäksTech? Subscribe to receive occasional emails where I will sum up stuff that has happened at the blog and what may be coming next.

powered by TinyLetter | Privacy Policy