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

@tryengrave/client

v0.1.4

Published

Isomorphic Engrave SDK with local-by-default proof verification and fork detection.

Readme

@tryengrave/client

The official isomorphic SDK for Engrave — record tamper-evident events, wrap agent runs, and verify proofs locally by default. Runs in Node, Bun, Deno, Cloudflare Workers, and the browser.

npm install @tryengrave/client

Quickstart

import { Engrave } from "@tryengrave/client"

const engrave = new Engrave({ apiKey: "ek_live_…" })

// 1 — record an event, get a receipt
const receipt = await engrave.record({ key: "evt/order/1001", value: JSON.stringify({ amount: 250 }) })

// 2 — verify it, in THIS process, with no trust in the server
const result = await engrave.verify(`tx:${receipt.tx_id}/0`)
if (!result.ok) throw new Error(`verification failed at ${result.step}`)

verify() fetches the proof material and recomputes the entry digest, both Merkle paths, the transaction hash, and the Ed25519 signature on your side. Pass { trustServer: true } only if you explicitly want the server's word for it — the default doesn't.

Fork detection

Every response carries the signed tree size and root. The client tracks them and surfaces a fork the moment the server's history diverges from what you've already seen — pin the tenant public key (publicKey option) to make the first read trustless too.

What you can do

  • Records & readsrecord, get, history, tx, search, state, usage
  • ProofsproofInclusion, proofConsistency, verify, publicKey
  • Agent runsrunStart, runSpan, runClose, trace (a hash-linked trace of every step an agent took)
  • EvidencerequestExport, downloadExport, erase (crypto-shred a value while its proof survives)
  • KeyscreateApiKey, listApiKeys

Auto-instrument your model calls

If your agent calls OpenAI or Anthropic directly, wrap the client once — every model call becomes a verifiable inference span (prompt/completion hashes by default, full text with captureContent). Streaming is handled; behaviour is byte-identical and recording never blocks.

import OpenAI from "openai"
import { startRunSession } from "@tryengrave/client"
import { instrumentOpenAI } from "@tryengrave/client/openai"

const run = await startRunSession(engrave, "triage ticket #4471")
const openai = instrumentOpenAI(new OpenAI(), run)     // ← every call engraved
await openai.chat.completions.create({ model: "gpt-4o", messages })
await run.close()

@tryengrave/client/anthropic exports instrumentAnthropic for Claude the same way.

Options

new Engrave({
  apiKey: "ek_live_…",
  baseUrl: "https://api.tryengrave.com", // default
  publicKey: "…hex…",                    // pin the tenant key → trustless first read
})

Part of Engrave — immutable audit evidence, verifiable by anyone. · Docs · MIT