[20210608 Update] My Project Management Workflow using obsidian-dataview

A thousand miles journey is started by taking the first step.

Here is the workflow for me to manage schedule tasks in Obsidian. The obsidian-dataview plugin is required to list projects/actions automatically.

You can download the demo on my GitHub.

Project View

As the image shot shown above, 2/5 means there are 5 actions total in that project, and I have done 2.

  • N/A means there is no action in this project.
  • Blocked means there is no Active action in this project. Telling that you shoud put some actions into active state.

Action View

A project

An action

Archived Projects


  • √ Project View: Show all projects in a view.
  • √ Action Views: Show all actions in a view.
  • √ Archive Projects and Actions: Making Project View and Action Views more focusable.
  • √ Tag name customizable: If you don’t like the tag below, you can rename them!
  • √ Display the progress of action for an program
  • √ Display progress of task for an action

I got some idea from other posts in the forum, so I build it for my own.

First of all, this is NOT a fully implemented GTD system, but a project management system. It manages your projects, project-related actions (like “Tasks” in GTD), and simple actions (actions do not belong to any project.)

- Project A
	- Project-related Action 1
	- project-related Action 2
- Project B
	- Project-related Action 3
- Simple Action 1
- Simple Action 2

A project is a markdown file

In this workflow, If an .md file with a #project tag in it, then it’s a project.

There are also some properties so call Inline Fields that using in a project file.

  • start_date:::The date when this project has been started.
  • end_date::: The date when this project is finished.
  • state::: I use Obsidian Nested tags to manage the states of a project. The available tags are as follows:
    1. #project/active: when this project is active.
    2. #project/archive: when this project has been finished and It was no need to be display, I marked this tag to this project.

A action is also a markdown file

Defferent from a task - [ ] in the .md file, an “action” is also an .md file, with a #action tag in it.

An action also contains some inline fields:

  • project::: If an action contains this inline field, it’s an project-related action. The value of this field SHOULD be an Internal link to the project. If the value is not given, then this is a simple action.
  • due_date::: The due date of this action.
  • start_date::: The date when this action has been started.
  • end_date::: The date when this action is finished.
  • priority::: A > B > C, or 1 > 2 > 3.
  • state::: Just like the state field in a project, all action states are as follows:
    1. #action/active: when this action is active, hard working to deal it.
    2. #action/waiting: when this action relies on other action or relies on somebody’s response, I mark this action into this state.
    3. #action/done: when this action is finished, mark this action into this state, and update the end_date.
    4. #action/canceled: when this action has been finished.
    5. #action/maybe: Actions that you may do in somedays.
    6. #action/archived: when this action has been finished and It was no need to be display, I marked this tag to this action. I usually do this for the Single Actions.


A > B > C > D …, or 1 > 2 > 3 > 4 … (using default sort method) is ok!

About dataviewjs

I use dataviewsjs blocks instead of dataview blocks because I can write Javascript code inside a dataviewsjs block and it can do much complex work than Dataview Query Language. For example, I can join two table using JS, but the JOIN statement hasn’t implemented in DQL yet.

I put all my JS code into /tools/dv-script/ folder, and they are all *.js files. There are some advantages:

  1. I can use VSCode to write code (VSCode).
  2. Better for code reusing.
  3. Letting dataviewsjs block take up less space than writting all the raw code in the block. For example, to show the project view, I just need to write 2 line:



This is a really nice approach, I’m using the Action as a subproject or Milestone and inside of the Action I have tasks. Its working fine for me. Do you have any update you can share?

I’m glad you like it.

I had updated my theme css in this recent days. But that is another topic( ̄o ̄) .

I refactored my code for users that didn’t like using the tags I had used, so they could easily rename them.

I’m going to write some code to create projects & actions by just clicking a button and then prompt for some inputs.

The main problem for me is that I can’t track the action tasks (written in action.md file) in a single view. I can display them but they don’t toggle the state when I click the checkboxs. I had tried some ways but…

Any suggestion or improvement is ok!i

Hi! I’m getting this error message in the project view…

Can you help me?

I think you had possibly set a wrong format of type Date. Date format should fit the ISO-8601 Standard (See ISO 8601 - Wikiwand)

Such as:
end_date:: 2021-06-14

The error you shown was reappear when I set a wrong end_date like:
end_date:: aabbccdd

perfect! I will look into it, thanks!!!

The problem was that I was putting date::[[2021-06-21]], as a link

Very nice, I don’t have javascript skills but Ithink I’m gonna try.

About the tasks, have you tried The “Tasks” Plugin? GitHub - schemar/obsidian-tasks: Task management for the Obsidian knowledge base.

It has a funcion that display the tasks of another files, filter based, and the tasks showed are clickable

Awesome :slight_smile:

How did you rename the “file” column in dataview to “projects”, “actions”, etc?

I know how to rename the other columns “attribute AS name” but can’t seem to change the name of the first column from “file” to something else…


Wondering if anyone has this working for iOS? The issue seems to be around sharing code based on some searching I did in the Dataview GitHub page.

1 Like

Just wanted to thank you for your demo, your approach is exactly what I was looking for in the transition from notion. I don’t have much JavaScript experience, but since I am using it for academic research, I implemented other tags for publications to go together with the project tags, and it works amazing!

I think this post may help you –

I rename the “file” column using DataviewJS