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

@wndrfl/static-kit-cli

v3.1.1

Published

A commandline interface for compiling, optimizing, and managing static assets.

Readme

✨ Static Kit CLI

Compile, scaffold, and install static assets. WordPress, Shopify, and static sites are hosts: they differ in .staticrc paths, not in this CLI.

A lean toolbelt, not a UI kit. lib/ is primitives. components/ is the host’s. Starter Sass/JS come from the host (pass bodies into create), not from a catalog in this package.

Requires Node.js 20+.

npm install -g @wndrfl/static-kit-cli
static install --dir ./static
static compile --dir ./static

A global install is for authors stamping a tree. After that, the CLI is optional. Pin it as a host devDependency if you want npx static compile without a global binary — or leave it. The stamp is Dart Sass + ESM; see Leaving the CLI.

Commands

  • static install — stamp the framework. Already installed iff a config file exists (.staticrc, .static, statickit.json), not merely a folder.
  • static compile [all|css|js|images] — compile. --watch / -w rebuilds and turns the browser Logger on. --debug does the same for a one-shot JS build (and verbose CLI logs). Default command when none is given (static -w).
  • static template create --name <page> — per-page JS + SCSS entries.
  • static component create --name <slug> [--js] [--scss-from <file>] [--js-from <file>] [--force] — component stubs or host-supplied bodies.
  • static component remove --name <slug>
  • static version
  • static help

--format json prints { ok, data, error } on stdout. Logs go to stderr.

Shopify

Point every dist path at the theme assets/ folder. Compile from a source subfolder. Image cleanup never deletes hand-authored files.

{
  "paths": {
    "src": { "js": "src/js", "scss": "src/scss", "images": "src/images" },
    "dist": { "js": "../assets", "css": "../assets", "images": "../assets" }
  },
  "overwrite": false
}

Programmatic API

import { compile, component, core, template } from '@wndrfl/static-kit-cli';

const installed = await core.installKit(dir, { deps: true, compile: false });
const created = await component.create(dir, 'hero', { script: true });
// or pass host bodies: { overwrite: true, scss, js }
// created.data.wrote → [{ kind: 'style'|'script', path }]
await compile.all({ dir });

Every function returns { ok, data, error }. See ARCHITECTURE.md.

Leaving the CLI

The stamped tree does not require this package. Install is the CLI. Compile can be Dart Sass and any JS bundler. The inheritor copy of this contract is the README inside the stamp (framework/README.md).

Read paths from .staticrc. Compile only root entries (src/scss/*.scss, src/js/*.{js,ts}). Files under components/ and lib/ are imported, not emitted.

# CSS — Dart Sass (not LibSass)
npx sass --style=compressed --source-map src/scss:dist/css

# JS — same shape as `static compile js`
npx esbuild src/js/*.js --bundle --minify --format=esm --target=es2020 --sourcemap --define:__SK_DEBUG__=false --outdir=dist/js

Point src/dist at whatever .staticrc says (Shopify often uses ../assets for all three dist keys). Load bundled JS as a module, or wrap it in your bundler.

Images: copy src/images to the dist images path (nested folders included). The CLI also compresses JPEG (mozjpeg, quality 80) and PNG, writes sibling .webp (lossless when the source has alpha), skips outputs newer than their source, and tracks names in .static-images-manifest.json so cleanup does not empty a shared assets/ folder. Skip that pipeline if you want; do not glob-delete a mixed Shopify assets/ directory.

Pages and components are files. Add src/scss/<page>.scss + src/js/<page>.js, or src/scss/components/_<slug>.scss + optional src/js/components/<Pascal>.js, then @use / import from the page entry.

Do not add compile behavior that cannot be expressed with stock Sass/esbuild (or the image steps above). That would lock inheritors back in.

License

Copyright (c) 2026 Wonderful. MIT.