An open API service indexing awesome lists of open source software.

https://github.com/vipul-sharma20/tasks.nvim

Markdown-native task management for Neovim.
https://github.com/vipul-sharma20/tasks.nvim

neovim neovim-plugin obsidian vimwiki

Last synced: about 1 month ago
JSON representation

Markdown-native task management for Neovim.

Awesome Lists containing this project

README

          

# tasks.nvim

Markdown-native task management for Neovim.

Works alongside Obsidian, vimwiki like note-taking system. Complete feature
list [here](#features).

Tasks belong in the files where the work is documented like diary entries,
project notes, meeting logs. Not in a separate database, not in a plugin's
internal format.

tasks.nvim treats the markdown as the source of truth and builds a queryable
dashboard on top of it with ripgrep. There's no import step, no migration, no
schema. A task is just a checkbox with #task on it. Everything else, due dates,
priorities, labels, linked notes is optional metadata on the same line. The
plugin is a view layer, not a data layer. Your vault stays yours: plain text,
diffable, portable, readable without any plugin installed.

> [!NOTE]
> There are already loads of task management tools available. This note-taking
> setup is mostly tailored for ease of my personal workflow and to solve
> problems that I face.
>
> Creating this repository in case people find any utility in this way of
> note-taking.

## How it works

Tasks are markdown checkboxes with a `#task` tag and optional metadata:

```markdown
- [ ] #task Ship the API changes [due:: 2026-03-25] [priority:: high]
- [/] #task Review PR from @loremipsum [due:: 2026-03-24]
- [x] #task Fix auth middleware [due:: 2026-03-20] [completion:: 2026-03-21]
- [-] #task Migrate to Redis (cancelled)
```

Statuses: `[ ]` todo ยท `[/]` in-progress ยท `[x]` done ยท `[-]` cancelled

Tasks can link to note files for context:

```markdown
- [/] #task Refactor payment service [[tasks/refactor-payments]] [due:: 2026-03-25] [priority:: high]
```

The linked file (`tasks/refactor-payments.md`) holds whatever context you need:
description, links, subtasks, scratch notes. Press `` on the task to
view/edit it inline in the dashboard float.

## The Dashboard

`:Tasks` opens a floating window with your tasks grouped by urgency:

![Dashboard](assets/dashboard.png)

`๐Ÿ“Ž` means the task has a linked note. `j`/`k` skip between tasks.

Press `` on a task to open its note inline, editable in the same float.
`:w` saves and returns to the task list. `` again opens it in a full
buffer.

## Dashboard Keymaps

| Key | Action |
|---|---|
| `x` | Mark done |
| `p` | Mark in-progress |
| `-` | Mark cancelled |
| `` | Mark todo |
| `e` | Edit task (description, due date, priority) |
| `` | Open note context inline (creates note + wiki-link if none exists) |
| `o` | Jump to source file at the task line |
| `n` | Create new task |
| `/` | Fuzzy search (fzf-style bar, filters live as you type) |
| `l` | Filter by label (telescope picker) |
| `L` | Clear label filter |
| `u` | Undo last status change |
| `` | Redo |
| `` | Expand/collapse section |
| `r` | Refresh |
| `q` / `:q` | Close |

### Note view (after ``)

The note opens in the same floating window, fully editable.

![Note view](assets/task-expanded.png)

| Key | Action |
|---|---|
| `:w` | Save and return to task list |
| `:wq` / `:q` | Same โ€” save and return |
| `` | Open note in a full buffer |
| `w` | Save and return to task list |

### Search

Press `/` in the dashboard. A search bar appears above the float. Type to
fuzzy-filter across task descriptions, dates, priorities, and tags. `` or
`` accepts the filter and drops you back into the filtered list. ``
clears the filter. `` in the dashboard clears an active filter.

## Labels

Tag tasks with `#projectname` to group them by project:

```markdown
- [ ] #task #api-team Deploy API service [due:: 2026-03-28]
- [ ] #task #otel Estimate timelines for OTel migration
```

Press `l` in the dashboard to open the label picker (telescope-powered,
searchable). Select a label to filter and the dashboard switches to a
status-grouped view showing all tasks for that project: In Progress, Todo, and
Done.

![Labels](assets/labels.png)

Press `L` to clear the filter and return to the default urgency view.

## Inline rendering

`#task` and `#label` tags are highlighted in the buffers in normal mode.

![Task highlighting](assets/task-highlighting.png)

Highlights clear in insert mode so you see the raw markdown while editing.

## Inline toggle

`` on any `#task` line in a markdown/vimwiki buffer cycles the status:

`[ ]` โ†’ `[/]` โ†’ `[x]` โ†’ `[-]` โ†’ `[ ]`

Falls back to `VimwikiToggleListItem` on non-task lines.

## Query blocks

> [!NOTE]
> I am not too sure about this feature if I'll find a need for it or support it
> going forward.

If your markdown files have query blocks like this:

````markdown
```tasks
not done
due before today
sort by due
```
````

`:TaskQuery` evaluates the nearest block and shows results in the dashboard.

Supported clauses: `not done`, `done`, `due today`, `due before today`, `due
after today`, `no due date`, `has due date`, `priority is `, `sort by
due`, `sort by priority`, `(A) OR (B)`.

## Requirements

- Neovim 0.9+
- [ripgrep](https://github.com/BurntSushi/ripgrep) (for vault scanning)

Optional:
- [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) for `:TaskFind`

## Install

With packer:

```lua
use {
'vipul-sharma20/tasks.nvim',
config = function()
require("tasks").setup()
end
}
```

With lazy.nvim:

```lua
{
'vipul-sharma20/tasks.nvim',
config = function()
require("tasks").setup()
end
}
```

## Setup

```lua
require("tasks").setup({
vault_path = "~/notes", -- root of your markdown vault
diary_path = "~/notes/diary", -- where diary entries live
tasks_path = "tasks", -- note files dir (relative to vault_path)

sections = {
{ name = "P0 (Overdue)", query = "not done\ndue before today\nsort by due" },
{ name = "P1 (Due Today)", query = "not done\ndue today\nsort by due" },
{ name = "All Pending", query = "not done\n(due after today) OR (no due date)" },
},

symbols = {
todo = "โœ—",
in_progress = "โ—",
done = "โœ“",
cancelled = "โ—",
},

width = 0.6, -- float width as fraction of editor
height = 0.7,
})
```

All fields are optional. Defaults are shown above.

## Commands

| Command | Description |
|---|---|
| `:Tasks` | Open the dashboard |
| `:TaskCreate` | Create a new task (prompts for description, due date, priority, note) |
| `:TaskToggle` | Toggle status of task under cursor |
| `:TaskQuery` | Evaluate the nearest ```` ```tasks ```` block |
| `:TaskFind` | Telescope picker across all tasks |

## Suggested keymaps

```lua
-- with which-key
t = {
name = "Tasks",
d = { "Tasks", "Dashboard" },
f = { "TaskFind", "Find" },
n = { "TaskCreate", "New" },
t = { "TaskToggle", "Toggle" },
q = { "TaskQuery", "Query Block" },
}
```

## Task format reference

```markdown
- [ ] #task Description [[optional/note-link]] [due:: YYYY-MM-DD] [priority:: high] [completion:: YYYY-MM-DD]
```

| Field | Required | Values |
|---|---|---|
| Checkbox | Yes | `[ ]`, `[/]`, `[x]`, `[-]` |
| `#task` | Yes | Marker that identifies the line as a task |
| Description | Yes | Free text, can include markdown links and @mentions |
| `[[link]]` | No | Wiki-link to a note file with task context |
| `[due:: DATE]` | No | Due date in YYYY-MM-DD |
| `[priority:: LEVEL]` | No | `highest`, `high`, `medium`, `low`, `lowest` |
| `[completion:: DATE]` | No | Auto-added when marking done/cancelled |

Date input accepts: `2026-03-25`, `today`, `tomorrow`, `tmr`, `+3d`, `+7d`, `next week`.

## Features

- Floating dashboard (:Tasks) with configurable sections โ€” P0 (overdue), P1 (due today), all pending, recently done
- Inline task status toggle โ€” cycles [ ] โ†’ [/] โ†’ [x] โ†’ [-] on #task lines
- Task context via wiki-links โ€” [[tasks/slug]] links to note files, viewable and editable inline in the dashboard float
- fzf-style search bar โ€” / in dashboard for live fuzzy filtering across descriptions, dates, tags
- Full task editing โ€” e to edit description, due date, and priority in one flow; renames linked note files automatically
- Status management โ€” x/p/-/ to mark done/in-progress/cancelled/todo with undo (u) and redo ()
- Priority indicators โ€” โ–ฒโ–ฒ โ–ฒ โ” โ–ผ โ–ผโ–ผ rendered inline in the dashboard with color coding
- Collapsible sections โ€” to expand/collapse (recently done section collapsed by default)
- Natural date input โ€” accepts today, tomorrow, +3d, next week when setting due dates
- Telescope picker โ€” :TaskFind for fuzzy search across all tasks in the vault
- Query block evaluation โ€” :TaskQuery evaluates ```tasks blocks from your markdown files
- Labels โ€” tag tasks with #project, filter dashboard by label via telescope picker, status-grouped view
- Inline highlighting โ€” #task and #label tags rendered as colored pills in markdown buffers, motions unaffected
- :w / :wq / :q work naturally in the floating window note view

## License

MIT