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

@vlchnk/nlpkit.js

v0.1.3

Published

Small, dependency-free NLP building blocks for JavaScript and TypeScript

Readme

nlpkit.js

Dependency-free NLP building blocks for JavaScript and TypeScript. The first module is a variable-order n-gram model for next-word suggestions.

Install

npm install @vlchnk/nlpkit.js

Train and predict

import { buildNgramModel, suggestNextWords } from "@vlchnk/nlpkit.js/ngram";

const model = buildNgramModel(
  [
    { text: "Good morning! How can I help you?" },
    { text: "Good evening! How can I help you?", weight: 2 },
  ],
  { maxOrder: 4, topK: 10, minCount: 1 },
);

const result = suggestNextWords(model, "How can I he");

// result.candidates[0].w === "help"
// Replace text in [result.replaceStart, result.replaceEnd] with that word.

Training and prediction use the same Unicode-aware normalization. Prediction tries the longest available context first and backs off to shorter contexts if necessary. It also filters candidates by the partial word immediately before the cursor.

buildNgramModel returns plain JSON-compatible entries, so a model can be saved to a file, database, object storage, or Redis. chooseCandidates is provided for the Redis MGET pattern used by the original implementation, and Redis key helpers are exported separately without adding a Redis client dependency.

Model options

  • maxOrder — maximum number of preceding words, default 4.
  • topK — candidates retained per context, default 10.
  • minCount — minimum weighted occurrence count, default 2.
  • A record's optional positive weight multiplies all counts from that text.

The model is intended as a small, explainable baseline for operator-assist autocomplete. For large corpora, train offline and store each entry by its context key rather than rebuilding the model for every request.