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

opencode-hybrid-search

v0.1.1

Published

Hybrid worktree search plugin for OpenCode - fast code search in large repositories

Readme

opencode-hybrid-search

Fast hybrid code search for OpenCode. Combines local ripgrep with SQLite FTS indexing for efficient searching in large worktree-based repositories.

Quick Start

# Install the plugin
npm install opencode-hybrid-search

# Add to your OpenCode configuration
echo '{
  "plugin": ["opencode-hybrid-search"]
}' > opencode.json

# Install global Git hooks for automatic indexing
npx opencode-hybrid-search-install-hooks

Prerequisite: ripgrep (rg) must be installed and available on your PATH.

How It Works

Searching large repositories is expensive. This plugin exploits an asymmetry: most files in a worktree are identical to the default branch, while only a small subset changed.

Hybrid search strategy:

  1. Index default-branch commits ahead of time (via Git hooks)
  2. When searching from a worktree, detect if the branch is ahead of the default branch
  3. Search only changed files locally with rg
  4. Search unchanged files from the SQLite FTS index
  5. Merge results into one grep-like response

This gives you most of the correctness of local grep with much lower cost on large repos.

Configuration

Add to your opencode.json:

{
  "plugin": ["opencode-hybrid-search"]
}

The plugin exposes a hybrid_grep tool that OpenCode will use automatically for file searches.

Git Hooks (Required for Indexing)

Install global hooks to keep the index fresh:

npx opencode-hybrid-search-install-hooks

This sets up hooks for post-checkout, post-merge, and post-rewrite events to automatically refresh the index.

⚠️ Important: This changes your global Git core.hooksPath. The installer will not overwrite an existing hooks directory.

Manual Refresh

If you prefer not to use global hooks, refresh manually:

npx opencode-hybrid-search-refresh --cwd /path/to/repo

Features

  • Hybrid search: Local rg for changed files + SQLite FTS for unchanged files
  • Worktree-aware: Shared index across worktrees for the same repo
  • Transactional: Safe concurrent access (one writer, many readers)
  • Fallback modes: Automatically falls back to local grep when hybrid search would be unsafe
  • Regex verification: All indexed candidates are verified with the requested regex before returning
  • Structured logging: Detailed metrics for search planning and execution

Storage

  • Index stored outside repos in user cache directory
  • One SQLite file per git repository (shared across worktrees)
  • Only commits in ready state are used for queries

Limitations

  • Some regex patterns intentionally force fallback to local grep to avoid false negatives
  • Default-branch detection uses heuristics for unusual remote states
  • Hook-driven indexing runs in-process; very large repos may need a future background service

Development

# Install dependencies
bun install

# Run tests
bun test

# Type check
bun run typecheck

# Build
bun run build

License

MIT