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

@freedomofpress/webcat

v3.1.0

Published

WEBCAT web application integrity library, used by the WEBCAT browser extension and developer tooling.

Readme

WEBCAT Browser Extension

The extension is written in TypeScript, using the Manifest V3 API. Chromium is not supported, as the extension relies heavily on intercepting and modifying network requests and responses, which Chromium does not allow in Manifest V3. There are no external runtime dependencies: the Sigsum, Sigstore and CometBFT clients are maintained by the Freedom of the Press Foundation and, like the rest of the extension, use only the Web Crypto API. The only exception is in the WebAssembly hooks, where a synchronous SHA256 function is needed in order to hook synchronous WebAssembly methods and Worklets, where crypto is not available.

The latest tagged release is generally published on the Mozilla Add-ons store.

Build

Install build dependencies:

npm install

Compile the TypeScript and bundle it with Vite:

npm run build

The output will be in ./dist/bundle.js and ./dist/hooks/. Everything else in the extension folder does not need any action.

Alternatively, make package will install, build, fetch the current enrollment list and package the extension, saving the archive as ../dist/webcat-extension.zip. The archive can then be loaded in about:debugging as a temporary add-on. make package-test builds with VITE_TESTING=true, which disables minification and mocks the light client, and is what the integration tests use.

The extension can also be built as an npm library with npm run build:lib. API docs are generated with Typedoc.

Tests

Unit tests use vitest and run natively, with the browser APIs mocked:

npm run test

Tests in tests/webcat/ cover the verification logic, tests in tests/browser/ the wrappers around the WebExtension APIs. npm run coverage also prints a coverage report.

Integration tests are in ../test/. They use pytest to run Firefox and Tor Browser with the package-test archive (or the library build) installed, and check the test apps. CI runs them on Firefox, Firefox ESR and Tor Browser at the Standard, Safer and Safest security levels.

Linting

The project uses dpdm to catch circular imports, eslint for linting and prettier for sorting imports and style consistency. All three are run together with:

npm run lint

To check for issues without auto-fixing (this is what CI runs):

npm run lint:check

How it works

For an overview of the verification flow and the response validation logic, see Towards auditable web application runtimes and the specifications.