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.

Update: Coincidentally, at the same time that I wrote and published this article Matthew Meyers started to work on a Kanban plulgin for Obsidian. I have updated this article to contain my original workflow, and then some thoughts on how to adapt it to the new Kanban plugin.

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 using an actual Kanban plugin. This method has the benefit that the notes are automatically added to the board when they contain the correct metadata. Therefore I don’t need to create the cards manually.

Kanban plugin

The Obsidian Kanban plugin tries to solve this problem natively within Obsidian. Though it is still quite young it contains all the needed features to be useful.

After you have installed the plugin there is a new option in the command palette: Kanban: Create new board. This let’s you create a new note that contains the Kanban board in Markdown format but is rendered properly in the UI.

The plugin works pretty much like any ordinary Kanban board such as Trello but naturally it isn’t quite as feature-rich. But since it is well integrated with your notes it still probably beats using any external service.

Before you start filling the board take a look at the configuration options first. If you’re using a special template for your tasks (like I am) you can set it as the default template for new notes. There are a bunch of other options too, and more will definitely be added as the plugin matures.

I have configured the cards to display dates but hide them from the titles. You can also configure linked page metadata that can show metadata from the first linked note in the card.

Kanban board example with custom metadata

As you can see from the above image, the complexity rating is now automatically fetched from the linked notes. I have added four groups to organize my tasks. New tasks are created on the backlog. Then when I think that I want to work on something in the near future I will the card to the prioritized backlog and give a time estimate for when it should be done. Then the tasks move through the Doing state to Done where they are automatically marked as complete.

With my custom workflow every task starts from its own note. The Kanban plugin changes this a little since now you should add a new card to the board first, then open its context menu and choose New note from card. This creates a new note with the template that you configured using the card text as the title. The new note is automatically linked in the card title, which is nice.

As you can see, some cards have dates in them, indicating when they should be completed. If you type the @ character in a card’s text field a date picker popup will open, letting you to choose the deadline.

Right now cards cannot contain multiple paragraphs, all text must be written on one line. This is not a huge issue since you can, and probably should, create separate notes for each task. Those can then contain as much detail as needed.

Alternatives within Obsidian

Let’s quickly talk about the alternatives that you could use in case you’re unable to use external plugins.

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 (unless you also use the Git plugin). 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. 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’m happy to see that there’s an ongoing project to handle Kanban within Obsidian. The plugin system has surely proven its power since we’re seeing these cool new features that enable us to do so much more than just simple note taking!

I hope that this post has inspired you to think of your own task management. 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