Automatically adds progress indicators to blocks tagged with #checklist, showing completion status like (2/5) based on child checkbox items.
⚠️ Important: This plugin requires Logseq 0.11.0+ with DB graphs only. It does not work with markdown/file-based graphs.
- ✅ Automatic real-time updates - Progress updates instantly as you toggle checkboxes
- ✅ Recursive counting - Counts checkboxes at any depth in the tree
- ✅ Debounced updates - Intelligent batching prevents UI thrashing
- ✅ Zero configuration - Works out of the box with sensible defaults
- ✅ DB graph support - Designed for Logseq's modern database graphs
The plugin automatically adds (1/2) progress indicators to blocks tagged with #checklist. Note: The screenshot shows custom tags (#cb), but the default checkbox tag is #checkbox. Both tags are configurable in plugin settings.
Note: This plugin is pending approval for the Logseq marketplace. Once approved, it will be available via Settings → Plugins → Marketplace.
Current installation method:
- Download the latest release from the Releases page
- Unzip the downloaded file
- In Logseq, go to Settings → Plugins → Load unpacked plugin
- Select the unzipped plugin directory
- Create a block and tag it with
#checklist - Add child blocks tagged with
#checkbox - If the
#checkboxclass doesn't exist yet, Logseq will prompt you to create it as a class - Add a checkbox property to the
#checkboxclass (if not already configured) - Progress indicators appear automatically and update as you toggle checkboxes
Example:
- (1/3) Watch these films #checklist
- The Matrix #checkbox
- Inception #checkbox
- Interstellar #checkbox
The (1/3) indicator updates automatically when you toggle the checkbox property on child blocks.
You can create nested checklists by tagging any child block with #checklist:
- (2/5) Project tasks #checklist
- (1/2) Design phase #checklist #checkbox
- Create mockups #checkbox
- Get feedback #checkbox
- (0/2) Development phase #checklist #checkbox
- Write code #checkbox
- Write tests #checkbox
- Deploy #checkbox
Each checklist maintains its own progress indicator.
- The plugin counts only blocks tagged with
#checkboxthat are nested under blocks tagged with#checklist - The
#checkboxclass should have a checkbox-type property defined - Checkbox state:
true= checked ✅,false= unchecked ☐
- Recursively traverses all child blocks (any depth) under
#checklistblocks - Counts total blocks tagged with
#checkbox - Counts how many have
truecheckbox property values - Displays as
(checked/total)at the start of the checklist block
- Uses Logseq's
DB.onChangedlistener to detect checkbox changes - Updates are debounced over 300ms to batch rapid changes
- Only modifies blocks when progress actually changes
The plugin includes configurable settings (Settings → Plugins → Checklist Progress Indicator):
- Checklist Tag: Tag used to identify checklist blocks (default:
checklist) - Checkbox Tag: Tag used to identify checkbox blocks (default:
checkbox)
- Logseq: 0.11.0 or newer (DB graph support required)
- Graph type: Database graphs only (not markdown/file-based graphs)
- Verify parent block is tagged with
#checklist - Ensure child blocks are tagged with
#checkbox(not markdown checkboxes like- [ ]) - Check that the
#checkboxclass exists and has a checkbox property configured - Reload Logseq and try again
- Check that all checkbox blocks are properly tagged with
#checkbox - Verify nested checklists each have their own
#checklisttag if needed - Reload the page to force a recalculation
- Confirm you're using Logseq 0.11.0 or newer
- Check browser console (Cmd/Ctrl+Shift+I) for error messages
- Verify you're using a DB graph (not a markdown graph)
- Try reloading the plugin (Settings → Plugins → reload)
pnpm run build- Production buildpnpm run dev- Development build with watch mode
logseq-checklist/
├── src/
│ ├── index.ts # Plugin initialization
│ ├── progress.ts # Checkbox counting and progress updates
│ ├── events.ts # DB.onChanged handler, parent finding
│ ├── content.ts # Text manipulation utilities
│ ├── settings.ts # Plugin settings
│ └── types.ts # TypeScript interfaces
├── dist/ # Build output (auto-generated)
├── CHANGELOG.md # Version history
└── package.json # Dependencies & metadata
MIT
Contributions welcome! Please:
- Test thoroughly with DB graphs
- Follow the existing code style
- Update CHANGELOG.md with your changes
- Submit a pull request
Created by P. Kerim Friedman
Built with:
