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

@cheruvian/stampy

v0.1.0

Published

Stamp TypeScript logs with compile-time source locations

Readme

Stampy

Stampy injects TypeScript file and line information at compile time. Runtime log events carry only a compact numeric call-site ID; a build manifest maps that ID back to the original source, even after bundling or minification.

Stamp every log with where it came from.

import { log } from "@cheruvian/stampy";

log.info("server listening", { port: 3000 });

Install Stampy and compile with stampy in place of tsc:

npm install @cheruvian/stampy typescript
npx stampy -p tsconfig.json

By default, development builds include readable source coordinates:

[src/server.ts:3:1] server listening { port: 3000 }

When NODE_ENV=production, calls contain and print only the compact symbol:

[#1n75gti] server listening { port: 3000 }

Override that behavior with --location full to always retain readable locations, or --location id to always use compact symbols. --location auto is the default.

The emitted call is equivalent to:

log.__emit("info", 3579214182, "server listening", { port: 3000 });

<outDir>/stampy-manifest.json contains the reverse mapping:

{
  "version": 1,
  "calls": {
    "3579214182": {
      "file": "src/server.ts",
      "line": 3,
      "column": 1,
      "level": "info"
    }
  }
}

Options:

stampy -p tsconfig.json
        --manifest path/to/manifest.json
        --module @cheruvian/stampy
        --location auto|full|id
        --console

Use --console to migrate or guard code that forgets the logger import. The transform adds its own collision-safe import and maps calls as follows:

console.log, console.info  -> info
console.debug              -> debug
console.warn               -> warn
console.error              -> error

Other console APIs such as table, dir, time, and trace retain their native behavior. Interception is opt-in because a locally shadowed variable named console cannot always be distinguished from the global in isolated transforms.

The transform only rewrites debug, info, warn, and error calls on the log named import from the configured module. Aliased imports are supported.