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

@idan_ariav/qvoid

v0.2.0

Published

Index, query, and dedup unresolved wikilinks across Obsidian-style vaults — with MCP server for Claude Code.

Readme

qvoid

Index, query, and deduplicate unresolved wikilinks across Obsidian-style vaults — with an MCP server for Claude Code.


Quick Start

Install

Via npm:

npm install -g @idan_ariav/qvoid

Via Claude Marketplace:

claude plugin marketplace add idanariav/pkm-query-tools
claude plugin install qvoid@pkm-query-tools

Then verify the MCP server is running with /mcp list — you should see qvoid in the list.

First Run

# Register your vault
qvoid collection vault --path ~/my-vault

# Build the link index
qvoid index

# Ask Claude to help you manage your vault

Popular Commands

# See all unresolved idea-type links
qvoid query --destination idea

# Find near-duplicate link targets (requires embed step)
qvoid embed
qvoid find-similar --cluster

# Detailed view with surrounding context
qvoid query --destination idea --min-occurrences 2 --format detailed

# Search by keyword across target names and contexts
qvoid query --search "cognitive bias"

Use Cases

qvoid helps you manage the hidden layer of your knowledge base — the links that point to notes that don't exist yet. These unresolved wikilinks accumulate over time and are hard to reason about manually.

Questions qvoid can help you answer:

  • What ideas have I referenced the most but never written a note for? — Use query --destination idea --min-occurrences 3 to surface high-frequency unresolved concepts.
  • Are there duplicate ideas in my vault under different names? — Use find-similar --cluster to detect near-duplicate link targets before creating notes.
  • Which people have I referenced across my notes? — Use query --destination person to see all person-type wikilinks.
  • What topics from my reading notes are still unexplored? — Use query --origin Sources/Articles --destination idea to filter by source folder and type.
  • Which unresolved links are supported by strong semantic context? — Use query --semantic-type Supports to find links annotated with inline claim annotations.
  • What's the overall state of my unresolved links? — Ask Claude directly via the MCP server: "Summarize my unresolved links and suggest which ones to write first."

Commands

collection

Register a vault as a named collection, or inspect its current settings:

qvoid collection vault --path ~/my-vault   # register (saves to ~/.config/qvoid/collections/vault.toml)
qvoid collection vault                     # show current settings

collections

List all registered collections, or remove one:

qvoid collections
qvoid collections --remove vault

index

Build or refresh the link index. Reads .md files directly — no external tools required. Subsequent runs are incremental: only files modified since the last run are rescanned. Links whose target file has since been created are automatically dropped.

qvoid index
qvoid index --collection vault   # target a specific collection

embed

Build vector embeddings from the current index. Required before running find-similar. Downloads the embedding model (~25 MB) on first use.

qvoid embed

query

Filter and search the index by type, folder, annotation, or free text:

# Filter by link type
qvoid query --destination idea
qvoid query --destination person

# Filter by source folder
qvoid query --destination idea --origin Sources/Articles

# Require a minimum number of occurrences
qvoid query --destination idea --min-occurrences 3

# Filter by inline semantic annotation
qvoid query --semantic-type Supports

# Keyword search across target names and surrounding context
qvoid query --search "cognitive bias" --limit 20

# Output as JSON for scripting
qvoid query --format json | jq '.target'

# Detailed view with surrounding sentences
qvoid query --destination idea --format detailed

| Flag | Description | |---|---| | --destination | Filter by type: idea, person, date, file, template, unknown | | --origin | Source folder prefix (e.g. Sources/Articles) | | --semantic-type | Match a specific inline annotation (e.g. Supports, Opposes) | | --min-occurrences | Minimum number of times the target appears across the vault | | --search | Substring match on target name or surrounding context | | --limit | Cap the number of results | | --format | summary (default), detailed, or json |

find-similar

Find semantically similar unresolved link targets using vector embeddings. Useful for detecting duplicates before creating new notes.

# Find links similar to a query phrase
qvoid find-similar "seeing reality clearly" --top-k 5

# Group suspected duplicates into clusters
qvoid find-similar --cluster

# Use a stricter similarity threshold
qvoid find-similar --cluster --threshold 0.85

Run qvoid embed before using this command.


Methodology

qvoid processes your vault in three stages:

1. Indexing

The indexer scans every .md file in the registered vault, extracts all [[wikilinks]], and checks which ones do not resolve to an existing file. For each unresolved target, it records:

  • The target name
  • The file it appeared in (origin)
  • The surrounding sentence for context
  • Any inline semantic annotation (e.g. Supports::, Related::) captured by a configurable regex pattern

Runs are incremental — a scan manifest tracks file modification times so only changed files are reprocessed.

2. Classification

Each unresolved link target is classified into one of six types using a two-pass heuristic system:

Pass 1 — Title heuristics: Structural signals are evaluated first: person prefixes (@), ISO date patterns, file extensions, CamelCase, and template syntax. These are high-confidence and are never overridden. Word count and capitalization patterns (ALL-CAPS, year in parentheses, title-case phrases) provide medium-confidence idea signals.

Pass 2 — Context boost: Inline annotations from each occurrence contribute a confidence score. Annotations like Supports and Opposes add a strong claim signal (+3); annotations like Related and Jump add a weaker concept signal (+1). If the accumulated score reaches the idea threshold, the type is upgraded accordingly.

| Type | Meaning | |---|---| | idea | A concept, claim, or source worth capturing as a note | | person | A person reference (matched by configurable prefix, default @) | | date | A date reference (ISO date, week, or quarter patterns) | | file | A resource link, not a note (file extension, / in path, CamelCase) | | template | A template artifact (<% %>, {{ }} syntax) | | unknown | Could not be classified — fallback |

3. Embedding and Similarity

When you run qvoid embed, each unique unresolved target is encoded into a dense vector using the all-MiniLM-L6-v2 ONNX model (~25 MB, downloaded once). These vectors are stored locally alongside the index.

find-similar uses cosine similarity to surface targets that are semantically close — either to a query phrase or to each other (clustering mode). This lets you catch duplicates like "mental models" and "thinking frameworks" before creating redundant notes.


Privacy and Security

qvoid runs entirely on your device. No data ever leaves your machine.

  • No cloud indexing — the vault scanner reads files directly from disk.
  • No remote API calls — the embedding model (all-MiniLM-L6-v2) runs locally via ONNX Runtime.
  • No telemetry — nothing is phoned home.
  • Data stays local — the index, vectors, and config are all written to standard local directories (~/.config/qvoid/, ~/.local/share/qvoid/), never synced externally.

You can point qvoid at any vault, including private journals or sensitive work notes, without concern.


Other Plugins

qvoid is part of the pkm-query-tools marketplace — a suite of local, offline MCP plugins for knowledge management:

| Plugin | Description | |---|---| | qnode | Graph traversal over your vault's link structure. Explore neighbors, paths, and clusters of connected notes. | | qimg | Search and retrieve images from your vault using semantic similarity. |

Install the full suite:

claude plugin marketplace add idanariav/pkm-query-tools
claude plugin install qnode@pkm-query-tools
claude plugin install qimg@pkm-query-tools