| Crates.io | vault-tasks |
| lib.rs | vault-tasks |
| version | 0.12.0 |
| created_at | 2024-11-09 08:38:40.116338+00 |
| updated_at | 2025-06-29 11:59:48.337516+00 |
| description | TUI Markdown Task Manager |
| homepage | |
| repository | https://github.com/louis-thevenet/vault-tasks |
| max_upload_size | |
| id | 1441935 |
| size | 3,812,674 |
vault-tasks is a TUI Markdown task manager.
It will parse any Markdown file or vault and display the tasks it contains.
./test-vault./test-vault
├── dir
│ ├── subdir
│ │ ├── test_1.md
│ │ ├── test_2.md
│ │ └── test_3.md
│ └── test_0.md
├── example_physics_class.md
├── example_vault-tasks_project.md
└── test.md

I made this tool because I wanted to integrate my task system directly inside my Second Brain.
Markdown tasks are very easy to integrate with knowledge/projects and are source-control-friendly.
I wrote a blog post explaining my workflow and how I use vault-tasks if you're interested.
I also spend most of my writing time in the terminal (Helix) and do not rely on heavy external software.
I'm planning a big refactor this summer. I'm currently gathering ideas and critics from my personal use to improve vault-tasks. If you're using it and want to contribute by requesting a feature or a change, don't hesitate to open an issue or contact me.
cargo install vault-tasks
You can get it from nixpkgs 24.11 or directly from this repo's flake:
vault-tasks = {
url = "github:louis-thevenet/vault-tasks";
inputs.nixpkgs.follows = "nixpkgs";
};
And use the package in your configuration: inputs.vault-tasks.packages.${pkgs.system}.default
git clone https://github.com/louis-thevenet/vault-tasks.git
cd vault-tasks
cargo build --release
See vault-tasks --help for basic usage.
<!-- An example task in your markdown file -->
- [ ] An example task #tag tomorrow p1
A description
of this task
- [x] A subtask today @today
- [/] Another subtask 10/23 @today c50
Partly done
- [-] This one is canceled
| Token | Meaning |
|---|---|
- [ ] (- [x], ...) |
declares a task and sets its state |
p1 (p10, ...) |
sets the priority |
c50 (c99, c150, ...) |
Sets the completion percentage |
#tag |
is a tag, a task can have zero or more tags |
@today (@tod, @t) |
is a special tag that will mark the task as part of today's tasks |
23/10 (2024/23/10) |
sets the due date with a literal date |
today (tdy) |
sets the due date to today |
tomorrow (tmr) |
sets the due date to tomorrow |
a day of the week (monday or mon, etc) |
sets the due date to the next occurence of that day |
3d (3m, 3w, 3y, ...) |
means "in 3 days" and will set the due date accordingly |
Task states are Done (x), To-Do ( ), Incomplete (/) and Canceled (-)
@today allows you mark a task for today while keeping a due date. It will show up with a ☀️ in vault-tasks.
Relative dates are always replaced by literal dates once vault-tasks is run. Thanks to this, vault-tasks does not store any data except its config file.
Other tokens will be part of the title of that task
Descriptions and subtasks are declared using indents (see configuration)
This is what you will see in the preview of this README.md in vault-tasks:

Check the key map within the app with ?
| Key | Alternate Key | Action |
|---|---|---|
shift-h |
shift-← |
Previous tab |
shift-l |
shift-→ |
Next tab |
ctrl-k |
ctrl-↓ |
Scroll up |
ctrl-j |
ctrl-↑ |
Scroll down |
page_down |
Scroll one page down | |
page_up |
Scroll one page up | |
q |
ctrl-c |
Quit the application |
? |
Open keybindings menu for the current tab |
| Key | Alternate Key | Action |
|---|---|---|
k |
↑, shift-tab |
Previous entry |
j |
↓, tab |
Next entry |
h |
←, back_space |
Leave current entry |
l |
→,enter |
Enter current entry |
| Key | Action |
|---|---|
s |
Focus search bar (enter or esc to unfocus) |
o |
Open selection in default editor |
e |
Quickly edit selection |
r |
Reload vault |
t |
Mark task To-Do |
d |
Mark task Done |
i |
Mark task Incomplete |
c |
Mark task Canceled |

| Key | Action |
|---|---|
enter |
Focus/Unfocus search bar |
Shift-s |
Change sorting mode |

| Key | Alternate Key | Action |
|---|---|---|
h |
← |
+1 day |
l |
→ |
-1 day |
j |
↓ |
+7 days |
k |
↑ |
-7 days |
Shift-j |
Shift-↓ |
+1 month |
Shift-k |
Shift-↑ |
-1 month |
n |
+1 year | |
Shift-n |
-1 year |
| Key | Action |
|---|---|
t |
Goto Today |

| Key | Alternate Key | Action |
|---|---|---|
k |
↑ |
Previous setting |
j |
↓ |
Next setting |
| Key | Action |
|---|---|
space |
Next segment (skip current) |
p |
Pause timer |
e |
Edit selected setting |
shift-tab |
Previous time management technique |
tab |
Next time management technique |

You can start already focused on a tab by using one of the CLI subcommands:
vault-tasks explorer # is the default
# Or
vault-tasks filter
vault-tasks time
vault-tasks calendar
You can also output the content of a vault in standard output using
vault-tasks stdout
Example output:
vault-tasks -v ./README.md stdout
./README.md
‾‾‾‾‾‾‾‾‾‾‾
README.md
‾‾‾‾‾‾‾‾‾
Vault-tasks
‾‾‾‾‾‾‾‾‾‾‾
Usage
‾‾‾‾‾
Writing tasks
‾‾‾‾‾‾‾‾‾‾‾‾‾
❌ An example task
📅 2025-03-31 (tomorrow) ❗1
#tag
A description
of this task
✅ A subtask
☀️ 📅 2025-03-30 (today)
⏳ Another subtask
☀️ 📅 2025-10-23 (in 7 months) [🟩🟩⬜️⬜️⬜️ 50%]
Partly done
🚫 This one is canceled
The config.toml contains the default configuration which can be generated using vault-tasks generate-config.
In $HOME/.config/vault-tasks/config.toml, you can override the default settings, keybindings and colorscheme.
In particular, you can set a default vault path.
Feel free to submit issues or pull requests. Contributions are welcome!