npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mdbase-tasknotes

v0.1.3

Published

Standalone CLI for managing markdown tasks via mdbase

Readme

mdbase-tasknotes

Standalone CLI for managing markdown tasks via mdbase. Create, query, and manage tasks directly on markdown files using natural language.

Works on the same vault and _types/task.md schema that the TaskNotes Obsidian plugin generates, or can initialize its own standalone collection.

Install

npm install -g mdbase-tasknotes

Quick start

# Initialize a new collection
mtn init ~/notes

# Set as default collection
mtn config --set collectionPath=~/notes

# Create tasks with natural language
mtn create "Buy groceries tomorrow #shopping @errands"
mtn create "Write report due friday #work +quarterly-review"
mtn create "Fix the faucet high priority #home @house"

# List and query
mtn list
mtn list --overdue
mtn list --tag work --status open
mtn list --json

# Complete a task
mtn complete "Buy groceries"

# Track time
mtn timer start "Write report"
mtn timer status
mtn timer stop
mtn timer log --period today

Commands

| Command | Description | |---|---| | mtn init [path] | Initialize a new collection with mdbase.yaml and _types/task.md | | mtn create <text...> | Create a task from natural language | | mtn list | List tasks with filters (--status, --priority, --tag, --due, --overdue, --where, --on, --json) | | mtn show <task> | Show full task detail (--on YYYY-MM-DD for recurring instance state) | | mtn complete <task> | Mark a task as done (--date YYYY-MM-DD for recurring instance completion) | | mtn update <task> | Update fields (--status, --priority, --due, --title, --add-tag, --remove-tag) | | mtn delete <task> | Delete a task (--force to skip backlink check) | | mtn archive <task> | Add archive tag to a task | | mtn skip <task> | Skip a recurring instance (--date YYYY-MM-DD, default today) | | mtn unskip <task> | Unskip a recurring instance (--date YYYY-MM-DD, default today) | | mtn search <query> | Full-text search across tasks | | mtn timer start\|stop\|status\|log | Time tracking | | mtn projects [list\|show] | List projects and their tasks | | mtn stats | Aggregate statistics | | mtn interactive | REPL with live NLP preview | | mtn config | Manage CLI configuration (--set, --get, --list) |

Tasks can be referenced by file path or title. Titles are matched exactly first, then by substring.

Natural language parsing

Task text is parsed using tasknotes-nlp-core. Supported patterns:

  • Datestomorrow, friday, next week, 2026-03-15
  • Tags#shopping, #work
  • Contexts@home, @office
  • Projects+quarterly-review
  • Priorityhigh priority, urgent
  • Recurrenceevery day, weekly, every monday
  • Estimates~30m, ~2h

The parser reads status and priority values from your collection's _types/task.md, so customizing the type definition changes what the parser accepts. For completion semantics, mtn also reads optional tn_completed_values on the status field (for example tn_completed_values: [done, cancelled]).

Collection path

Resolved in order:

  1. --path / -p flag
  2. MDBASE_TASKNOTES_PATH environment variable
  3. collectionPath in ~/.config/mdbase-tasknotes/config.json
  4. Current working directory

Using with TaskNotes

If you use the TaskNotes Obsidian plugin with mdbase spec generation enabled, mtn works directly on your vault — point it at your vault root and it will read the same mdbase.yaml and _types/task.md the plugin generates. Tasks created by either tool are visible to both.

Creating Tasks With Custom Paths

match.path_glob and path_pattern do different jobs in _types/task.md:

  • match.path_glob tells mdbase which existing files should be treated as tasks.
  • path_pattern tells mtn create where to write a new task file.

If your task type only has match.path_glob, listing existing tasks can work, but creating a new task without an explicit path cannot choose a filename. Add path_pattern for creation:

path_pattern: "calendar/{{year}}/{{month}}-{{monthNameShort}}/{{titleKebab}}.md"

match:
  path_glob: "calendar/**/*.md"

License

MIT