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

puzlink

v0.2.0

Published

Tool to find patterns among sets of words

Readme

puzlink.js

Tool to find patterns among sets of words. Use it online at cjquines.com/puzlink.

Inspired by cosmologicon's puzlink, rdeits's Collective.jl, and obijywk's fork of the latter.

Usage

Install with npm install puzlink. This is an ESM only library.

import { Puzlink } from "puzlink";

const puzlink = await Puzlink.download();

puzlink.link(`
  BATED, TANK, BUSINESS, ETC, OVER, ELVIS, CAR, COW, MARS, PARIS, AIRLINES
`);
// {
//   name: "10/11 can insert h",
//   score: 30.8,
//   description: [
//     "bated insert h = bathed",
//     "tank insert h = thank",
//     "etc insert h = etch",
//     "over insert h = hover",
//     "elvis insert h = elvish",
//     "car insert h = char",
//     "cow insert h = chow",
//     "mars insert h = marsh",
//     "paris insert h = parish, pharis",
//     "airlines insert h = hairlines"
//   ],
// },
// ...

Why?

puzlink used to be online on puz.link, but the website has been down for maintenance for a while now. While I've used the library locally, nothing can beat the convenience of a web app. I'm a believer in client-side solving tools, so I wanted to make it run client-side too; that's partly why I wrote cromulence a year ago.

Collective.jl is a huge design influence. I liked the idea of applying the binomial distribution to boolean word properties, which I used for computing many linker probabilities. A lot of the test cases in scripts/evals are from Collective.jl too.

Development

Node 22 required. Clone the repo and run npm install. Some ways to contribute:

  1. Add an eval:

    $ npm run test:evals -- --add name_of_puzzle
    #                    ^^ note the dashes
    $ npm run test:evals -- --watch

    Then, edit scripts/evals/name_of_puzzle.ts. See the other examples in that folder for details. The test:evals script has several other flags; run it with --help for more info.

  2. Add a category. Edit src/data/categories/txt/nameOfCategory.txt. Then npm run build:categories, and edit src/data/categories.ts.

    Adding tests would be nice too. You can add a unit test by running npm run test:watch, and editing src/features/substring.test.ts. You can also add an eval, as above.

  3. Add a feature. See existing feature implementations in src/features. Run npm run build:knownLogProbs before running evals.

  4. Fiddle with the app. To set up the app, run npm run build:tsc from the root, then cd app and npm install. From there, npm run dev to start the dev server.

    You will need to rerun npm run build:tsc every time you make a change not in the app.