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

readthemanual

v0.0.1

Published

Read the Manual — fast local full-text search for any project's docs

Readme

rtm

Read the Manual. Fast, local full-text search for any project's documentation.

Point it at a GitHub repo, and it pulls down the markdown, indexes every section with SQLite FTS5, and gives you instant search from the terminal, an HTTP API, or an MCP server your AI tools can talk to.

Why

Documentation lives in repos. Searching it means context-switching to a browser, waiting for GitHub's search, and losing your flow. rtm keeps a local, searchable copy of any project's docs — one command to ingest, instant results from your terminal.

Install

git clone https://github.com/rgr4y/rtm.git
cd rtm
npm install && npm run build
npm link   # makes `rtm` available globally

Quick start

# Add a source (any public GitHub repo with markdown docs)
rtm add react facebook/react -p docs/

# Pull and index the docs
rtm ingest -s react -v

# Search
rtm "concurrent rendering"

That's it. Results come back with highlighted snippets, section headings, and file paths.

How it works

  1. Ingest fetches the repo tree via the GitHub API, downloads every .md file under the docs prefix, and saves them locally to ~/.local/rtm/<source>/
  2. Each file is split by headings into sections
  3. Sections are indexed into SQLite with FTS5 using the porter unicode61 tokenizer — the same stemming and Unicode handling you'd get from a dedicated search engine, in a single file
  4. Search runs FTS5 MATCH queries with ranked results and highlighted snippets

Usage

Search

# Bare query (no subcommand needed)
rtm "hooks lifecycle"

# Scope to a source
rtm search "routing" -s nextjs

# JSON output for scripting
rtm search "middleware" --json

# Limit results
rtm search "state management" -n 5

Manage sources

# Add a source
rtm add <name> <owner/repo> [-b branch] [-p docs-prefix]

# Examples
rtm add nextjs vercel/next.js -p docs/
rtm add django django/django -p docs/ -b main
rtm add myproject myorg/myproject -p documentation/

# Remove a source
rtm remove nextjs

# Switch default source for searches
rtm use django

# See all configured sources
rtm config

Ingest

# Ingest all sources
rtm ingest -v

# Ingest one source
rtm ingest -s react -v

# Include non-English docs
rtm ingest --all-langs

Read a full section

# Get a section by its ID (shown in search results)
rtm get 42

List indexed sections

rtm list
rtm list -l en -n 100

MCP server

Run as an MCP stdio server so AI tools can search your docs:

rtm mcp

Exposes four tools: search, get_document, list_sources, list_documents.

Add it to any MCP-compatible client. Example for a config.toml:

[mcp]
enabled = true

[[mcp.servers]]
name = "rtm"
command = "rtm"
args = ["mcp"]

Or for Claude Code's settings.json:

{
  "mcpServers": {
    "rtm": {
      "command": "rtm",
      "args": ["mcp"]
    }
  }
}

HTTP server

For network access or integration with other tools:

rtm serve -p 3777

JSON-RPC endpoint at POST /rpc:

curl -s http://localhost:3777/rpc \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"search","params":{"query":"authentication"}}' | jq

Methods: search, get_document, list_documents.

Configuration

Config lives at ~/.local/rtm/config.json. Downloaded docs and the search database are stored alongside it. You can edit it directly or use the CLI commands above.

{
  "sources": [
    {
      "name": "react",
      "repo": "facebook/react",
      "branch": "main",
      "docsPrefix": "docs/"
    }
  ],
  "dataDir": "/home/you/.local/rtm",
  "lastSource": "react"
}

Set GITHUB_TOKEN for private repos or to avoid rate limits:

export GITHUB_TOKEN=ghp_...

Stack

License

ISC