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

@okrapdf/pi

v0.1.0

Published

Layout-aware PDF parsing, search, and screenshots using vision models already authenticated in Pi.

Readme

PDF Parse for Pi

Parse local PDFs into layout-aware Markdown and normalized bounding boxes using vision models already authenticated in Pi. The package also provides phrase search and page screenshots for the agent’s follow-up work.

pi install npm:@okrapdf/pi

Tools

  • pdf_parse — semantic Markdown and layout blocks using a validated model/prompt pair
  • pdf_search — phrase hits with page numbers and 0–1000 bounding boxes
  • pdf_screenshot — selected pages returned as image blocks and saved as PNG files

pdf_parse prefers subscription or local models before metered models, estimates metered cost, supports a hard cost ceiling, and writes durable artifacts beside the source PDF.

Commands

/pdf-parse models
/pdf-parse models default google/gemini-3-flash-preview
/pdf-parse doctor report.pdf
/pdf-parse parse report.pdf --dry-run
/pdf-parse parse report.pdf --pages 1-3,8 --max-cost 0.10
/pdf-parse parse report.pdf -m google/gemini-3-flash-preview

Authentication

The package does not read or store provider keys itself. It asks Pi’s model registry for the same API key, OAuth token, headers, and provider environment Pi uses for normal requests.

Use /login <provider> inside Pi to add or replace credentials:

/login google

/pdf-parse models shows authenticated vision models, their access class, matched prompt, and estimated per-page usage. Unmatched models remain visible as untested, but are never auto-selected.

Output

A parse writes the following under <document>.okra/ unless output_dir is supplied:

doc.md
blocks.json
manifest.json
raw/page-NNNN.txt
screenshots/page-NNNN.png

If a provider responds but the matched prompt decodes no layout blocks, the raw response and partial artifacts are preserved for diagnosis.

Only rendered page images are sent directly through the selected Pi provider. Search uses local artifacts or the native PDF text layer. Screenshot rendering is local. The package makes no requests to okrapdf services and emits no telemetry.

The layout prompts and decoder are derived from ParseBench and okraPDF’s MIT-licensed parser implementation.

Development

npm install
npm test
npm run typecheck
npm run build
npm pack --dry-run

Node.js 22.19 or newer is required.