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

create-speqkit-plugin

v0.9.0

Published

Scaffold a speq plugin: source, tests against the real kernel, and nothing else.

Readme

create-speqkit-plugin

Scaffold a speq plugin.

npm create speqkit-plugin kafka
# or: pnpm create speqkit-plugin kafka
speqkit-plugin-kafka/
  package.json          the contract as a peer; nothing depends on the kernel
  tsconfig.json
  vitest.config.ts
  src/index.ts          one step type, one assertion, both with schemas
  test/plugin.test.ts   eight tests, against the real kernel
  README.md
  .gitignore
cd speqkit-plugin-kafka
npm install
npm test

Options

npm create speqkit-plugin <name>

  <name>              short name: http, kafka, my-thing
                      the package becomes speqkit-plugin-<name>

  --dir <path>        where to write it (default: ./speqkit-plugin-<name>)
  --scope @acme       publish under a scope: @acme/speqkit-plugin-<name>
  --description <s>   one line, for package.json and the README
  --force             write into a directory that is not empty

Called with no name from a terminal, it asks for one. Called with no name from CI, it fails — a prompt there would hang the job instead of failing it.

What the scaffold decides for you

The contract is a peer, never a dependency. A plugin that shipped its own @speqkit/plugin-api would be version-checked against its own copy. The contract comes from the kernel the user installed.

Nothing imports speqkit. A plugin is contributed into a kernel that is already running; everything it needs arrives as ctx. Naming the kernel in dependencies puts a second copy of it in the user's store and boots it — we shipped that bug once, and the scaffold is where it stops being possible to inherit it. The kernel is there as a devDependency, because the tests run one.

The step type and the assertion carry schemas. They are placeholders and you will delete them; the schemas around them are the part to keep. They are how a typo in a test file fails in milliseconds, naming the file and the path, instead of half-way through a run against a real environment.

The tests use @speqkit/test-kit, which runs the plugin inside the real Registry, Executor and runner. There are no fakes to keep in sync, and a green test means the plugin works in a project.

The speqkit-plugin keyword is in package.json. It is how the plugin is found. Without it the plugin works and nobody discovers it.

Publishing

npm publish              # or --access public, for a scoped package

Then anyone can install it:

speq plugins add speqkit-plugin-kafka

No blessing needed from us — a short name like kafka resolves to @speqkit/plugin-kafka first, but any package named in full is installed as written.

MIT.