{"id":50293876,"url":"https://github.com/vipul-sharma20/tasks.nvim","last_synced_at":"2026-05-28T07:32:43.162Z","repository":{"id":347025952,"uuid":"1191056764","full_name":"vipul-sharma20/tasks.nvim","owner":"vipul-sharma20","description":"Markdown-native task management for Neovim.","archived":false,"fork":false,"pushed_at":"2026-03-26T20:01:08.000Z","size":2319,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-27T04:28:31.571Z","etag":null,"topics":["neovim","neovim-plugin","obsidian","vimwiki"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vipul-sharma20.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-24T22:00:41.000Z","updated_at":"2026-03-26T20:00:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vipul-sharma20/tasks.nvim","commit_stats":null,"previous_names":["vipul-sharma20/tasks.nvim"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/vipul-sharma20/tasks.nvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipul-sharma20%2Ftasks.nvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipul-sharma20%2Ftasks.nvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipul-sharma20%2Ftasks.nvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipul-sharma20%2Ftasks.nvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vipul-sharma20","download_url":"https://codeload.github.com/vipul-sharma20/tasks.nvim/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vipul-sharma20%2Ftasks.nvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33599465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["neovim","neovim-plugin","obsidian","vimwiki"],"created_at":"2026-05-28T07:32:37.962Z","updated_at":"2026-05-28T07:32:43.155Z","avatar_url":"https://github.com/vipul-sharma20.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tasks.nvim\n\nMarkdown-native task management for Neovim.\n\nWorks alongside Obsidian, vimwiki like note-taking system. Complete feature\nlist [here](#features).\n\nTasks belong in the files where the work is documented like diary entries,\nproject notes, meeting logs. Not in a separate database, not in a plugin's\ninternal format.\n\ntasks.nvim treats the markdown as the source of truth and builds a queryable\ndashboard on top of it with ripgrep. There's no import step, no migration, no\nschema. A task is just a checkbox with #task on it. Everything else, due dates,\npriorities, labels, linked notes is optional metadata on the same line. The\nplugin is a view layer, not a data layer. Your vault stays yours: plain text,\ndiffable, portable, readable without any plugin installed.\n\n\u003e [!NOTE]\n\u003e There are already loads of task management tools available. This note-taking\n\u003e setup is mostly tailored for ease of my personal workflow and to solve\n\u003e problems that I face.\n\u003e\n\u003e Creating this repository in case people find any utility in this way of\n\u003e note-taking.\n\n## How it works\n\nTasks are markdown checkboxes with a `#task` tag and optional metadata:\n\n```markdown\n- [ ] #task Ship the API changes  [due:: 2026-03-25]  [priority:: high]\n- [/] #task Review PR from @loremipsum  [due:: 2026-03-24]\n- [x] #task Fix auth middleware  [due:: 2026-03-20]  [completion:: 2026-03-21]\n- [-] #task Migrate to Redis (cancelled)\n```\n\nStatuses: `[ ]` todo · `[/]` in-progress · `[x]` done · `[-]` cancelled\n\nTasks can link to note files for context:\n\n```markdown\n- [/] #task Refactor payment service [[tasks/refactor-payments]]  [due:: 2026-03-25]  [priority:: high]\n```\n\nThe linked file (`tasks/refactor-payments.md`) holds whatever context you need:\ndescription, links, subtasks, scratch notes. Press `\u003cCR\u003e` on the task to\nview/edit it inline in the dashboard float.\n\n## The Dashboard\n\n`:Tasks` opens a floating window with your tasks grouped by urgency:\n\n![Dashboard](assets/dashboard.png)\n\n`📎` means the task has a linked note. `j`/`k` skip between tasks.\n\nPress `\u003cCR\u003e` on a task to open its note inline, editable in the same float.\n`:w` saves and returns to the task list. `\u003cCR\u003e` again opens it in a full\nbuffer.\n\n## Dashboard Keymaps\n\n| Key | Action |\n|---|---|\n| `x` | Mark done |\n| `p` | Mark in-progress |\n| `-` | Mark cancelled |\n| `\u003cSpace\u003e` | Mark todo |\n| `e` | Edit task (description, due date, priority) |\n| `\u003cCR\u003e` | Open note context inline (creates note + wiki-link if none exists) |\n| `o` | Jump to source file at the task line |\n| `n` | Create new task |\n| `/` | Fuzzy search (fzf-style bar, filters live as you type) |\n| `l` | Filter by label (telescope picker) |\n| `L` | Clear label filter |\n| `u` | Undo last status change |\n| `\u003cC-r\u003e` | Redo |\n| `\u003cTab\u003e` | Expand/collapse section |\n| `r` | Refresh |\n| `q` / `:q` | Close |\n\n### Note view (after `\u003cCR\u003e`)\n\nThe note opens in the same floating window, fully editable.\n\n![Note view](assets/task-expanded.png)\n\n| Key | Action |\n|---|---|\n| `:w` | Save and return to task list |\n| `:wq` / `:q` | Same — save and return |\n| `\u003cCR\u003e` | Open note in a full buffer |\n| `\u003cleader\u003ew` | Save and return to task list |\n\n### Search\n\nPress `/` in the dashboard. A search bar appears above the float. Type to\nfuzzy-filter across task descriptions, dates, priorities, and tags. `\u003cCR\u003e` or\n`\u003cEsc\u003e` accepts the filter and drops you back into the filtered list. `\u003cC-c\u003e`\nclears the filter. `\u003cEsc\u003e` in the dashboard clears an active filter.\n\n## Labels\n\nTag tasks with `#projectname` to group them by project:\n\n```markdown\n- [ ] #task #api-team Deploy API service  [due:: 2026-03-28]\n- [ ] #task #otel Estimate timelines for OTel migration\n```\n\nPress `l` in the dashboard to open the label picker (telescope-powered,\nsearchable). Select a label to filter and the dashboard switches to a\nstatus-grouped view showing all tasks for that project: In Progress, Todo, and\nDone.\n\n![Labels](assets/labels.png)\n\nPress `L` to clear the filter and return to the default urgency view.\n\n## Inline rendering\n\n`#task` and `#label` tags are highlighted in the buffers in normal mode.\n\n![Task highlighting](assets/task-highlighting.png)\n\nHighlights clear in insert mode so you see the raw markdown while editing.\n\n## Inline toggle\n\n`\u003cC-Space\u003e` on any `#task` line in a markdown/vimwiki buffer cycles the status:\n\n`[ ]` → `[/]` → `[x]` → `[-]` → `[ ]`\n\nFalls back to `VimwikiToggleListItem` on non-task lines.\n\n## Query blocks\n\n\u003e [!NOTE]\n\u003e I am not too sure about this feature if I'll find a need for it or support it\n\u003e going forward.\n\nIf your markdown files have query blocks like this:\n\n````markdown\n```tasks\nnot done\ndue before today\nsort by due\n```\n````\n\n`:TaskQuery` evaluates the nearest block and shows results in the dashboard.\n\nSupported clauses: `not done`, `done`, `due today`, `due before today`, `due\nafter today`, `no due date`, `has due date`, `priority is \u003clevel\u003e`, `sort by\ndue`, `sort by priority`, `(A) OR (B)`.\n\n## Requirements\n\n- Neovim 0.9+\n- [ripgrep](https://github.com/BurntSushi/ripgrep) (for vault scanning)\n\nOptional:\n- [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) for `:TaskFind`\n\n## Install\n\nWith packer:\n\n```lua\nuse {\n    'vipul-sharma20/tasks.nvim',\n    config = function()\n        require(\"tasks\").setup()\n    end\n}\n```\n\nWith lazy.nvim:\n\n```lua\n{\n    'vipul-sharma20/tasks.nvim',\n    config = function()\n        require(\"tasks\").setup()\n    end\n}\n```\n\n## Setup\n\n```lua\nrequire(\"tasks\").setup({\n    vault_path = \"~/notes\",       -- root of your markdown vault\n    diary_path = \"~/notes/diary\", -- where diary entries live\n    tasks_path = \"tasks\",         -- note files dir (relative to vault_path)\n\n    sections = {\n        { name = \"P0 (Overdue)\",  query = \"not done\\ndue before today\\nsort by due\" },\n        { name = \"P1 (Due Today)\", query = \"not done\\ndue today\\nsort by due\" },\n        { name = \"All Pending\",   query = \"not done\\n(due after today) OR (no due date)\" },\n    },\n\n    symbols = {\n        todo        = \"✗\",\n        in_progress = \"◐\",\n        done        = \"✓\",\n        cancelled   = \"●\",\n    },\n\n    width  = 0.6, -- float width as fraction of editor\n    height = 0.7,\n})\n```\n\nAll fields are optional. Defaults are shown above.\n\n## Commands\n\n| Command | Description |\n|---|---|\n| `:Tasks` | Open the dashboard |\n| `:TaskCreate` | Create a new task (prompts for description, due date, priority, note) |\n| `:TaskToggle` | Toggle status of task under cursor |\n| `:TaskQuery` | Evaluate the nearest ```` ```tasks ```` block |\n| `:TaskFind` | Telescope picker across all tasks |\n\n## Suggested keymaps\n\n```lua\n-- with which-key\nt = {\n    name = \"Tasks\",\n    d = { \"\u003ccmd\u003eTasks\u003ccr\u003e\", \"Dashboard\" },\n    f = { \"\u003ccmd\u003eTaskFind\u003ccr\u003e\", \"Find\" },\n    n = { \"\u003ccmd\u003eTaskCreate\u003ccr\u003e\", \"New\" },\n    t = { \"\u003ccmd\u003eTaskToggle\u003ccr\u003e\", \"Toggle\" },\n    q = { \"\u003ccmd\u003eTaskQuery\u003ccr\u003e\", \"Query Block\" },\n}\n```\n\n## Task format reference\n\n```markdown\n- [ ] #task Description [[optional/note-link]]  [due:: YYYY-MM-DD]  [priority:: high]  [completion:: YYYY-MM-DD]\n```\n\n| Field | Required | Values |\n|---|---|---|\n| Checkbox | Yes | `[ ]`, `[/]`, `[x]`, `[-]` |\n| `#task` | Yes | Marker that identifies the line as a task |\n| Description | Yes | Free text, can include markdown links and @mentions |\n| `[[link]]` | No | Wiki-link to a note file with task context |\n| `[due:: DATE]` | No | Due date in YYYY-MM-DD |\n| `[priority:: LEVEL]` | No | `highest`, `high`, `medium`, `low`, `lowest` |\n| `[completion:: DATE]` | No | Auto-added when marking done/cancelled |\n\nDate input accepts: `2026-03-25`, `today`, `tomorrow`, `tmr`, `+3d`, `+7d`, `next week`.\n\n## Features\n\n- Floating dashboard (:Tasks) with configurable sections — P0 (overdue), P1 (due today), all pending, recently done\n- Inline task status toggle — \u003cC-Space\u003e cycles [ ] → [/] → [x] → [-] on #task lines\n- Task context via wiki-links — [[tasks/slug]] links to note files, viewable and editable inline in the dashboard float\n- fzf-style search bar — / in dashboard for live fuzzy filtering across descriptions, dates, tags\n- Full task editing — e to edit description, due date, and priority in one flow; renames linked note files automatically\n- Status management — x/p/-/\u003cSpace\u003e to mark done/in-progress/cancelled/todo with undo (u) and redo (\u003cC-r\u003e)\n- Priority indicators — ▲▲ ▲ ━ ▼ ▼▼ rendered inline in the dashboard with color coding\n- Collapsible sections — \u003cTab\u003e to expand/collapse (recently done section collapsed by default)\n- Natural date input — accepts today, tomorrow, +3d, next week when setting due dates\n- Telescope picker — :TaskFind for fuzzy search across all tasks in the vault\n- Query block evaluation — :TaskQuery evaluates ```tasks blocks from your markdown files\n- Labels — tag tasks with #project, filter dashboard by label via telescope picker, status-grouped view\n- Inline highlighting — #task and #label tags rendered as colored pills in markdown buffers, motions unaffected\n- :w / :wq / :q work naturally in the floating window note view\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvipul-sharma20%2Ftasks.nvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvipul-sharma20%2Ftasks.nvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvipul-sharma20%2Ftasks.nvim/lists"}