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

component-interop

v0.3.0

Published

A small, zero-dependency capability broker for web components — let independently-authored component libraries share a store, a session, and capabilities without importing each other.

Readme

Component Interop

npm

  • resource sharing between web components from different authors

The goal is interoperable web-components which can share resources even if they come from different component libraries by different authors.

This zero-dependency, tiny (17kb) library is component-agnostic - any web component can use it.

Component Interop

  • does nothing on its own - it just brokers btwn component libraries
    • does not touch CSS, decide light/shadow DOM, provide methods or components
  • supports sharing
    • components
      • load from multiple libraries without a tangled web of imports
    • objects
      • share authenticatedFetch or store objects
    • attributes
      • an app can apply the abilities of a foregin component to its own elements
  • prevents duplication & greedy loading
    • apps can tree shake component libraries, pulling only what they need
    • externalized prereqs (e.g. rdflib) and components are guaranteed to only load once
    • in some cases, one can use attributes from a foreign library without importing the full component
  • is explicit - what a page draws from each library is named in its script tag (data-components, data-objects, data-attributes); nothing wires implicitly
  • manifests are valid JSON-LD 1.1 - RDF consumers (registries, SPARQL) can process them via the shared context and vocabulary, and validate them against the manifest SHACL shape; the broker itself reads them as plain JSON, zero dependencies as ever
  • manifests can carry per-component display metadata (label, icon, hover title, description, default attributes, SHACL shape + data files, user help) - hosts like data-kitchen build drag-and-drop component palettes from it (ComponentInterop.manifest.meta)

Check out the demo!

Visit the documentation!

Tests

npm test             # node unit suite (jsdom + vm) + JSON-LD manifest validation
npm run test:browsers   # real-browser regression test in Chromium, Firefox & WebKit (needs Playwright)
npm run test:jsonld     # JSON-LD only: expand + toRDF every manifest in safe mode

The browser test guards the import-map timing: ci must inject its importmap synchronously, before any module load, or the browser rejects it. Of the three engines only Firefox is strict enough to fail on a regression (Chromium and WebKit are lenient), so it's the tripwire — but all three run to prove the loader works everywhere. It needs Playwright + its browser binaries (a dev-only dependency — the library itself stays zero-dependency):

npm i -D playwright && npx playwright install

If Playwright isn't installed, the tests skip rather than fail.

Transparency

Portions created using Claude Opus 4.8.

License

MIT © Jeff Zucker, 2026