Description
Flexible JSON-based query summaries for TODOs with filtering, sorting, and grouping.
Additional Information
| Links: | |
|---|---|
| Maintainers: | clsty |
| Version: | 0.1.2 |
| Minimum app version: | 3.4.2 |
| Downloads: This version: | 36 |
| Last updated: | 2026-02-10T06:50:38Z |
Query TODO
Flexible summaries of inline TODOs (to-do) with JSON-based query configs on filtering, sorting and grouping per summary note.

NOTE: This plugin is in early stage and should be considered alpha quality.
Features
- Write inline TODOs anywhere in your notes using markdown checkbox syntax
- Query-based summaries with JSON configuration for advanced filtering
- Multi-level sorting and grouping with custom sort orders
- Customizable entry format with template placeholders
Installation
Recommended method:
- Go to
Tools -> Options -> Plugins(macOS: Joplin -> Preferences -> Plugins) - Search for "Query TODO"
- Click Install and restart Joplin
- Create a query summary note:
Tools -> Create Query summary note
Alternative method:
Download *.jpl from Releases and install it from Joplin Tools -> Options -> Plugins, install from file and select this jpl file.
Quick Start
Basic TODO Format
Write inline TODO entries everywhere you want using the style like:
- [ ] @category +tag1 +tag2 //2026-02-15 Your TODO text here
Components:
@category- Single category (optional)+tag- Multiple tags (optional)//YYYY-MM-DD- Due date (optional)- Checkbox state:
[ ]= open,[x]= done
Query Summary Note
Create with Tools -> Create Query summary note:
```json:query-summary
{
"query": {
"AND": [
{"CATEGORY": "work"},
{"STATUS": "open"}
]
},
"sortOptions": [
{
"sortLevel": "1",
"sortBy": "category",
"sortOrder": "ascend"
}
],
"groupLevel": 1,
"entryFormat": "- {{{STATUS}}} {{{CATEGORY}}} {{{TAGS}}} {{{CONTENT}}} [link](:/{{{NOTE_ID}}})"
}
```
After reloading, the plugin will query your inline TODOs according to the config written in the json:query-summary block, and show the results above the block on this summary page (only for viewing, not editable).
Query Configuration
Query Types
Filter TODOs by:
CATEGORY- Filter by category (@work,@personal, etc.)TAG- Filter by tag (+urgent,+important, etc.)STATUS- Filter by status (open,done)NOTE- Filter by note ID- Summary notes themselves are already excluded from TODO extraction to prevent self-referencing.
NOTEBOOK- Filter by notebook ID (supportsrecursive: true)AND- All conditions must matchOR- At least one condition must match
All queries support negated: true to invert the match.
Sorting
Sort by category, tag, date, or status with:
ascend- Ascending orderdescend- Descending ordercustom- Custom order withsortOrderCustom: "val1,val2,val3"
Entry Format
Customize TODO display with placeholders:
{{{STATUS}}}-[ ]or[x]{{{CATEGORY}}}-@category{{{TAGS}}}-+tag1 +tag2{{{DATE}}}-//YYYY-MM-DD{{{CONTENT}}}- TODO text{{{NOTE_ID}}}- Source note ID{{{NOTE_TITLE}}}- Source note title{{{NOTEBOOK}}}- Parent notebook name
Plugin Settings
Access via Tools -> Options -> Query TODO
- Apply styling to metalist style todos - Apply styling in the markdown renderer (Restart Required) (default: true)
- Force sync after summary note update - Important for data consistency (default: true)
- Refresh query summary notes when opening them - Auto-refresh on note selection (default: false)
- Auto-refresh query summary notes every N seconds - Periodic auto-refresh (default: 0 = disabled, max: 86400)
Examples
Filter work TODOs by priority
{
"query": {
"AND": [
{"CATEGORY": "work"},
{"STATUS": "open"}
]
},
"sortOptions": [
{
"sortLevel": "1",
"sortBy": "tag",
"sortOrder": "custom",
"sortOrderCustom": "urgent,high,normal,low"
}
],
"groupLevel": 1
}
Show TODOs NOT from work
{
"query": {
"CATEGORY": "work",
"negated": true
}
}
Multi-level grouping
{
"query": {"STATUS": "open"},
"sortOptions": [
{"sortLevel": "1", "sortBy": "category", "sortOrder": "ascend"},
{"sortLevel": "2", "sortBy": "date", "sortOrder": "ascend"}
],
"groupLevel": 2
}
Custom format with links
{
"query": {"STATUS": "open"},
"entryFormat": "[{{{CONTENT}}}](:/{{{NOTE_ID}}}) - {{{CATEGORY}}} {{{DATE}}}"
}
License
MIT
Credits and History
This plugin was originally a fork of Inline TODOs in terms of GitHub repo. It's been largely modified since then. Note that Query TODO is not a "plus" version of Inline TODOs, but a very different plugin.
This plugin has also been inspired by Inline Tag Navigator.
I created Query TODO because I spent days tweaking and switching between Inline TODOs and Inline Tag Navigator, and unfortunately neither suited my needs.