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

statics

v0.1.0

Published

static assets in npm

Readme

statics

Mission

Package static assets in npm.

Goals

Let component authors include static assets and resolve them to public URLs at runtime. And support future advanced optimization strategies, including static analysis. It should work transparently on the client and server and not require a specific JS packaging solution. Should not need to download the whole static map. Should be able to opt out of optimizing some files.

Non-goals

Actually implementing optimizations, or actually inserting anything into the DOM or HTML.

For the package author

Basic usage

  • Add a static key to your package.json:
{
  "name": "MyPackage",
  "statics": {
    MyResourceID: "./statics/image.png"
  }
}

If you called it rawStatics they wouldn't be optimized.

  • Get information about the asset at runtime:
require('statics').resolveStatic('MyPackage/MyResourceID')

This will return a JS object describing the asset called an asset description. NOTE: resolveStatic() must be invoked with the name resolveStatic and must be passed a literal string to allow for static analysis.

The string literal is the name of the package specified in package.json followed by a / and then the ID of the static resource.

Asset descriptions

Images

The reason these have a custom descriptor is to support optimizers that may use spriting.

{
  "href": "//mycdn.com/image.jpg",
  "left": 0,
  "top": 0,
  "width": 240,
  "height": 240
}

Stylesheets

These should be valid CSS. If an optimizer performs spriting of images it's repsonsible for changing url() in the stylesheet and adding the appropriate CSS properties to reflect the new path and sprite location.

Stylesheets may be concatenated.

{
  "href": "//mycdn.com/stylesheet.css"
}

All other files

{
  "href": "//mycdn.com/whatever.bin"
}

For the package consumer

Just npm install the package and require() what you need.

Command-line tool

Then run statics --output=./statics/ --map=staticmap.js --url=//mycdn.com/statics/ ./

This takes all the static resources that a given package (./) depends on (by traversing its CommonJS dependencies and looking at the statics field in package.json) and copies them to known locations inside of the output dir (./statics/). The user then uploads this dir to the URL provided (//mycdn.com/statics/). Their app needs to require('./staticmap') to tell the runtime the information about the statics.

Relative paths between the files in a given package need to remain intact or be rewritten by the statics tool.

staticmap.js will look something like this:

require('statics').configure({
  "MyPackage/MyResourceID": {
    "href": "//mycdn.com/statics/MyPackage/statics/myimage.png",
    "left": 0,
    "top": 0,
    "width": 240,
    "height": 240
  }
});

Development server

We could provide an express middleware that does everything the statics tool does but at runtime.

Optimizers

People should be able to write their own statics tool which does stuff like image spriting, CSS concat, and running stuff like SASS.