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

sealbot

v0.1.0

Published

The certbot for document authenticity: scriptable sealing, verification, and public-ledger timestamping against any Let's Seal-compatible service.

Readme

sealbot (Node)

Seal and timestamp anything on Bitcoin. Prove any file existed, unaltered — one command, public proof. For humans, backends, CI, and AI agents.

Three core verbs (hash-only, keyless, scriptable):

sealbot anchor release-v3.tar.gz            # timestamp ANY file -> writes .ots
sealbot anchor release-v3.tar.gz --publish  # ...and register a shareable public proof page
sealbot verify contract.sealed.pdf          # check a sealed PDF (exit 2 if tampered)
                                            #   or: verify release.tar.gz.ots  → refresh status
sealbot watch  /srv/invoices --once         # anchor every new/changed file in a folder

anchor hashes locally and sends only the 32-byte digest — the file never leaves the machine. Without --publish nothing is registered anywhere; the local .ots is your proof.

Advanced — keyed signing

Sealing a PDF as a business identity (X.509 / PAdES) is a separate, keyed concern — it needs the signing service and a bearer token (--token / SEALBOT_TOKEN):

sealbot seal  contract.pdf --org acme                    # seal a PDF with your CA
sealbot issue --id ci --cn "My CI" --profile code        # get a signing cert (key stays local)

Migrating: notarize is now anchor --publish; upgrade <f>.ots is now verify <f>.ots. The old verbs still run (with a one-line notice) so existing scripts keep working.

watch — turn a folder into an always-on notary

Point sealbot at a directory and it anchors (or seals) every new or changed file, skipping anything it has already recorded — the daemon form of the one-shot commands.

sealbot watch /srv/invoices                       # poll forever, anchor new/changed files
sealbot watch /srv/invoices --once                # single pass (cron-friendly)
sealbot watch /srv/contracts --mode seal --org acme   # seal PDFs as they land
sealbot watch ./release --mode publish --interval 30  # public proof page per artifact
  • Non-destructive by default. anchor mode hashes each file locally (only the 32-byte digest leaves the machine) and writes a sibling <file>.ots — the original bytes are never touched. This is register-in-place: the proof lives beside the file, not baked into it.
  • Idempotent. A .sealbot-state.json dotfile tracks size+mtime, so restarts and repeated --once runs never re-anchor unchanged files. Derived artifacts (.ots, .sealed.pdf) and dotfiles are skipped, so it never chases its own tail.
  • Append-only audit log. Every action is a line in .sealbot-manifest.jsonl (ts, file, sha256, mode, state, proof).
  • Modes: anchor (default, hash-only local .ots, any file) · publish (hash-only + public proof page) · seal (PDFs only, needs --org and the keyed service).

Run it under systemd/pm2 for a directory that's continuously notarised, or on a --once cron tick. Each .ots still verifies against Bitcoin with stock ots verify <file> — the proof stands on the public chain.

Install

npm i -g sealbot          # or: node cli/sealbot.mjs <cmd>

Requires Node ≥ 18. Point it at a service with --api <url> or SEALBOT_API (default http://127.0.0.1:8081).

What it is

  • anchor works on any file. Anchoring is just timestamp(sha256(bytes)), so the same command proves the existence-and-date of software releases, datasets, audit logs, evidence, model weights, backups — not only PDFs.
  • The open standard for sealing anything. Bitcoin timestamping via OpenTimestamps and an X.509 / PAdES seal, delivered as one thing anyone can verify: sealbot issues under a CA, exposes a friendly API, and publishes proof pages. Your .ots proof verifies against Bitcoin with stock ots verify — the proof stands on the public chain.
  • Trust is self-anchored. Authenticity comes from the published root + the public transparency log + the blockchain — everything a verifier needs travels with the proof, so it checks anywhere, forever.

Exit codes

verify returns 0 when authentic and intact, 2 when unsealed or tampered — so it slots straight into a CI gate:

sealbot verify build/report.sealed.pdf || exit 1

Commands

Core — hash-only, keyless, agent-friendly:

| Command | Notes | |---|---| | anchor <file> [--publish] | hash-only; writes <file>.ots; --publish also registers a public proof page; any file | | verify <file> | a sealed PDF → checks seal + integrity; an .ots → refreshes its Bitcoin confirmation | | watch <dir> | continuously anchor / publish / seal new & changed files |

Advanced — keyed signing (needs the signing service + --token / SEALBOT_TOKEN):

| Command | Notes | |---|---| | seal <file.pdf> --org <slug> | seal a PDF as a business identity (X.509 / PAdES) | | issue --id <id> --cn "<subject>" | get a signing cert; the key is generated and kept locally |

Deprecated aliases (still run, with a one-line notice): notarizeanchor --publish; upgrade <f>.otsverify <f>.ots.

Apache-2.0 licensed.