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

vampyre

v0.0.3-b

Published

<div align="center"> <img src="./vampyre.webp" width="100" /> </div>

Readme

vampyre

a javascript instrumentation script that hooks all variable evaluations and logs out its state. Primarily used for assisting with highly obfuscated javascript/node code.

Warning: This will execute arbitrary code on the machine it runs on unless ran inside a Docker container. Beware.

Usage

Local (Node.js)

The following script produces observations.jsonl and output.js:

Optional args:

  • --output <output_path> saves instrumented output file to specified path
  • --no-execute saves instrumented output file but does not execute it
  • --report-console logs eval state output to console after instrumentation output run
  • --loop-tail <count> only records the last <count> observation entries generated inside each loop, preventing noisy long-running loops from spamming the log (a __loop_truncated__ entry is emitted whenever earlier observations are dropped unless --no-truncated-logs is set)
  • --repeating-pattern <count> limits each repeated <name, value> pair to <count> occurrences across the entire run; additional duplicates are suppressed and trigger a single __repeat_truncated__ summary entry unless --no-truncated-logs is set
  • --no-truncated-logs hides the __loop_truncated__ and __repeat_truncated__ summary entries when truncation flags are active
node instrument.js examples/simple.js --report-console

# Wrote output.js
# [__report] {
#   ts: 1760493315667,
#   name: 'people',
#   value: [
#     { name: 'Alice', age: 30 },
#     { name: 'Bob', age: 25 },
#     { name: 'Charlie', age: 35 }
#   ]
# }
# [__report] {
#   ts: 1760493315667,
#   name: 'names',
#   value: [ 'Alice', 'Bob', 'Charlie' ]
# }
# Names:

Secure Docker Usage

To run instrument.js in a secure, isolated Docker container:

  1. Build the Docker image:
docker build -t vampyre-instrument .
  1. Run the instrumenter on your sample, mounting your working directory:
docker run --rm -v $(pwd):/workspace vampyre-instrument <sample.js> --output <output.js> [--no-execute] [--report-console]
  • Replace <sample.js> with your sample filename.
  • Output files (e.g., output.js, observations.jsonl) will be saved to your local directory.
  • You can pass any arguments supported by instrument.js.

Example:

docker run --rm -v $(pwd):/workspace vampyre-instrument examples/simple.js --report-console

```bash
# [ 'Alice', 'Bob', 'Charlie' ]
# [__report] {
#   ts: 1760493315667,
#   name: 'olderPerson',
#   value: { name: 'Alice', age: 35 }
# }
# Alice will be 35 in 5 years.
# [__report] {
#   ts: 1760493315668,
#   name: 'olderPerson',
#   value: { name: 'Bob', age: 30 }
# }
# Bob will be 30 in 5 years.
# [__report] {
#   ts: 1760493315668,
#   name: 'olderPerson',
#   value: { name: 'Charlie', age: 40 }
# }
# Charlie will be 40 in 5 years.
# Observations appended to observations.jsonl

From observations.jsonl:

{"ts":1760493413778,"name":"people","value":[{"name":"Alice","age":30},{"name":"Bob","age":25},{"name":"Charlie","age":35}]}
{"ts":1760493413778,"name":"names","value":["Alice","Bob","Charlie"]}
{"ts":1760493413778,"name":"olderPerson","value":{"name":"Alice","age":35}}
{"ts":1760493413778,"name":"olderPerson","value":{"name":"Bob","age":30}}
{"ts":1760493413778,"name":"olderPerson","value":{"name":"Charlie","age":40}}

License

MIT