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

@jarkkojs/readseek

v0.9.13

Published

Structural digest for source files, images, and documents

Readme

ReadSeek

readseek turns source files, images, and documents into compact structured context for scripts, editors, and coding agents. Source output includes stable LINE:HASH anchors, symbol maps, parse diagnostics, AST matches, definitions, references, and verified rename plans.

Install

Choose one installation method:

npm install -g @jarkkojs/readseek  # Node 18+
cargo install readseek             # Rust 1.89+
make install                       # build this checkout and install the CLI + man page

make install supports PREFIX and DESTDIR. Prebuilt npm binaries are available for macOS ARM64, Linux ARM64/x64, and Windows x64; Linux builds are statically linked with musl.

Integrations

| Host | Package | Install | | ----------- | --------------------------------------------------------- | -------------------------------------------------------------------------- | | Pi | pi-readseek | pi install npm:pi-readseek | | OpenCode | opencode-readseek | Add opencode-readseek to opencode.json | | Claude Code | claude-readseek | Add this repository as a /plugin marketplace source | | Vim | readseek.vim | Install this repository with a plugin manager, then run :ReadSeekInstall |

In order to engage the use of the tool commands, add to your AGENTS.md:

## ReadSeek

- Prefer ReadSeek over regular read, edit, and grep tool commands.
- Use ReadSeek extensively and proactively.

CLI tour

Digest

readseek digest src/main.rs --at line:10 --end 20
readseek digest src/main.rs --at symbol:run
readseek digest src/main.rs --select metadata,map,diagnostics

digest always returns metadata plus the requested facets. content is the default; facets are combined with a comma.

Source reads emit records such as 42:a1b|let value = parse(input);. The line number locates the text; the short hash rejects most stale edits while tolerating whitespace-only changes.

Search and navigate

readseek def src run --language rust --format plain
readseek refs src run --language rust --format plain
readseek refs src/main.rs --at line:42:8
readseek search src 'fn $NAME() { $$$BODY }' --language rust
readseek search manual.pdf 'revocation' --limit 20

def, refs, and search accept a file or directory. In a Git work tree, directory searches include tracked/indexed and untracked non-ignored files by default. Use --git cached, --git others, or both to restrict the set; ignored requires others.

Edit

edit verifies all anchors and rejects stale or overlapping operations before writing. Requests are JSON files, or JSON on stdin by default:

readseek edit src/main.rs --request edits.json
readseek edit src/main.rs --request edits.json --apply --plan-hash <plan_hash>
printf '%s' '{"edits":[{"set_line":{"anchor":"42:a1b","new_text":"let value = 2;"}}]}' \
  | readseek edit src/main.rs --apply

A dry run returns the planned content and a plan_hash. Passing that hash during apply prevents a changed plan from being written.

Requests support anchored line replacement, range replacement, insertion, exact text replacement, and whole-symbol replacement. An empty new_text deletes an anchored line or range. --language overrides detection for symbol replacement.

Rename

A rename is a dry run unless --apply is present:

readseek rename src/main.rs --at line:42:8 --to renamed
readseek rename src/main.rs --at line:42:8 --to renamed --apply
readseek rename src/main.rs --at line:42 --to renamed --workspace . --apply

Rename plans report conflicts and hash-verified edits. Workspace mode extends the plan beyond the cursor file.

Global options and stdin

Global options must precede the command:

readseek --output result.json digest src/main.rs --select metadata
readseek --readseek-dir /tmp/project-index view report.pdf

Pass - as the path to read standard input. Use --stdin-name when a virtual path is needed for language detection or reporting. This works with digest and view:

printf '%s\n' 'fn main() {}' |
  readseek digest - --stdin-name scratch.rs --select identity --at line:1:4

Images and documents

digest reports image metadata and can return a bounded base64 image payload. Select local analysis explicitly:

readseek digest scan.png --vision-mode ocr --vision-level high

Vision modes are none, caption, objects, ocr, and all. Analysis starts at the low level; use medium or high only when more detail is needed.

PDF is the first supported document format. Document digestion ingests the whole document into the content-addressed structural cache and returns a JSON receipt whose state is built or reused. This makes digest suitable for cache-warming jobs. It does not return document pages or assets.

readseek init
readseek digest report.pdf
readseek view report.pdf --page 3
readseek view report.pdf --page 3 --vision-mode ocr

view is the document-content interface. It creates the same cache on a miss, then narrows the indexed structure by page, node, kind, or depth. Vision modes analyze the selected cached assets. --at and source range/language options do not apply to images or documents.

Image analysis runs locally on the CPU with Qwen3-VL-2B-Instruct. Its model files are downloaded and checksum-verified on first use.

Cache layout

readseek init [path] creates .readseek/ and refreshes its source indexes. Commands discover that directory by walking up from the target; use --readseek-dir to select one explicitly.

| Path | Contents | | ----------------------------- | ------------------------------------- | | .readseek/maps/ | Content-addressed source maps | | .readseek/def-index/ | Definition index | | .readseek/documents/ | Document indexes and extracted assets | | .readseek/vision/ | Level-specific image analysis results | | User cache readseek/models/ | Downloaded vision model files |

Development

Check

make ci
CI_MSRV=1 make ci  # optional MSRV check

Package

Packages the highest semver tag reachable from HEAD on the current branch (not necessarily the tip). Source is built from a detached worktree at that tag; this packaging script stays on tip so tooling fixes apply without a new tag. Artifacts land in npm/*/bin and artifacts/ on the caller tree.

Linux x64/arm64 and Windows x64 use cross and Docker. On Apple Silicon with Dory, x86_64 images run under FEX; packaging reaps the container if FEX leaves it stuck after cargo finishes. Cross builds default to CARGO_BUILD_JOBS=1 on Darwin to avoid FEX/virtiofs rlib corruption (override with CARGO_BUILD_JOBS).

darwin-arm64 builds with host cargo when packaging on darwin-arm64. From Linux, the same platform uses the local osxcross image ghcr.io/cross-rs/aarch64-apple-darwin-cross:local (Apple SDK; not redistributed).

make package
make package PLATFORMS='linux-x64 win32-x64'
PACKAGE_STRICT=1 make package

Release

After scripts/release.sh <version> and pushing the tag:

make ci
PACKAGE_STRICT=1 make package
make publish

make publish uses the highest semver tag reachable from HEAD (tip may be ahead). It publishes crates.io from that tagged tree, npm from local npm/*/bin artifacts, then uploads GitLab release tarballs when glab is available.

Reference

Run readseek --help or readseek <command> --help. To read the complete local manual:

man ./man/man1/readseek.1

License

  • Native readseek: LGPL-2.1-or-later
  • @jarkkojs/readseek npm wrapper: Apache-2.0 AND LGPL-2.1-or-later
  • pi-readseek, opencode-readseek, and claude-readseek: Apache-2.0
  • readseek.vim: MIT

Third-party attribution

  • Qwen3-VL-2B-Instruct: Apache-2.0. Model files are downloaded at runtime and are not distributed with ReadSeek.
  • Dwarf Seek 4: MIT. ReadSeek's Q4_K and Q6_K block decoding and dot-product code includes derived work.