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

entropass

v0.2.0

Published

Generate strong, bias-free passwords (random, pronounceable, PIN) and measure password strength — entropy & crack time — entirely locally. Crypto-secure, zero dependencies, no network.

Readme

🔐 entropass

Generate strong, bias-free passwords — and actually measure their strength. Locally.

npm version bundle size CI types license

🌐 Try the free web app →  ·  generate & test passwords in your browser. Nothing is ever sent anywhere.


Two uncomfortable truths about passwords:

  1. Most online password generators are a terrible idea. You're asking a stranger's server to mint (and potentially log) your secret. A password tool should run on your machine.
  2. Most password code is subtly insecure. The everyday chars[random % chars.length] has modulo bias — some characters become more likely than others, shrinking the real keyspace. It "looks random," but it isn't uniform.

entropass fixes both. It uses the platform CSPRNG with rejection sampling for truly uniform, bias-free output, tells you the exact entropy and crack time of what it makes, and runs 100% locally — zero dependencies, no network, no API key.

📸 Screenshot / demo GIF: ./web/screenshot.png — record the live app generating a password and the strength bar reacting to options.

Why it exists

  • AI can't do this. A language model literally cannot produce cryptographically secure randomness — its output is predictable. Secure passwords must come from a CSPRNG, generated correctly. That's a precise, security-critical job for a small, audited tool.
  • Bias-free by construction. Rejection sampling removes the modulo bias that plagues naive generators, so every character is equally likely.
  • It quantifies strength. Not a vague "weak/strong" guess — real entropy in bits and an estimated crack time, so "looks complex" stops fooling anyone.

Who it's for

Everyone needs passwords: developers (generate secrets/tokens/test fixtures without a heavy dep), designers, marketers, ops and creators making accounts daily, and anyone who wants a trustworthy, offline generator.

Install

No install — just open the web app.

Command line:

npx entropass -l 24 --symbols          # a strong 24-char password
npx entropass --pronounceable          # easier to type/remember
npx entropass strength "hunter2"       # rate an existing password

Library:

npm install entropass

Zero dependencies. ESM + CJS + TypeScript types. Runs in the browser, Node 20+, Deno and Bun.

CLI

entropass [options]            # generate (default: a strong 16-char password)
entropass strength <password>  # rate it (label + crack-time)

Options: -l/--length, -n/--count, --symbols, --no-digits/uppercase/lowercase, --no-ambiguous, --pronounceable, --pin, --bits. Uses a cryptographic RNG; nothing is transmitted.

Usage

import { generate, generatePronounceable, generatePin, strength } from "entropass";

generate({ length: 20, symbols: true });
// { password: "…", entropyBits: 131.0, poolSize: 90 }

generate({ length: 16, symbols: false, excludeAmbiguous: true });
// no O/0, l/1/I … (easier to read & type)

generatePronounceable({ length: 14 });   // { password: "Kobiranuxe83", … } — typeable
generatePin(6);                          // { password: "402915", … }

strength("correct horse battery staple");
// { entropyBits: …, label: "Strong", poolSize: …, crackTime: { text: "centuries" } }

Measure entropy & crack time

import { entropyBits, estimateCrackTime, strength } from "entropass";

entropyBits(94, 16);            // 104.87  (length × log2(pool))
estimateCrackTime(80).text;     // human-readable estimate
strength("Password123!").label; // honest assessment (patterns are discounted)

Unbiased randomness primitives

import { randomInt, randomItem, shuffle } from "entropass";

randomInt(6);                    // 0–5, uniform, no modulo bias
randomItem(["a", "b", "c"]);
shuffle([1, 2, 3, 4, 5]);        // secure Fisher–Yates

API

| Function | Description | | -------- | ----------- | | generate(options?) | Random password; returns { password, entropyBits, poolSize }. | | generatePronounceable(options?) | Typeable consonant/vowel password. | | generatePin(length?) | Numeric PIN. | | strength(password, gps?) | Estimate entropy, label & crack time of any password. | | entropyBits(poolSize, length) | Entropy for a uniform secret. | | estimateCrackTime(bits, gps?) | Average crack time at gps guesses/sec. | | randomInt / randomItem / shuffle | Bias-free CSPRNG primitives. |

GenerateOptions: length, lowercase, uppercase, digits, symbols, excludeAmbiguous, excludeChars, requireEachClass.

FAQ

Is my password sent anywhere? No. Generation and strength checks happen entirely on your device — no server, no telemetry, works offline. (That's the whole point.)

What's "modulo bias" and why should I care? If you map a random 32-bit number into an alphabet with value % length, and the alphabet size doesn't divide 2³², lower indices get chosen slightly more often. entropass rejects out-of-range samples so every character is equally likely.

How is crack time estimated? Average guesses (half the keyspace) divided by an attacker's rate (default 10 billion guesses/sec, a fast offline attack). It's an estimate to build intuition, not a guarantee.

How accurate is the strength meter for my own password? It estimates the character pool and discounts obvious repeats and sequences (aaaa, abc123). It's a lightweight, dependency-free model — directional, not a substitute for not reusing passwords and using a manager.

Should I still use a password manager? Yes! entropass generates strong secrets; a manager stores them. Great together.

Contributing

Contributions welcome! See CONTRIBUTING.md and the Code of Conduct.

git clone https://github.com/didrod205/entropass.git
cd entropass
npm install
npm test          # run the suite
npm run dev       # run the web app locally

💖 Sponsor

entropass is free, MIT-licensed, and built in spare time. If it gave you passwords you can trust, please consider supporting it:

  • Star this repo — free, and it genuinely helps others find it.
  • 🍋 Sponsor via Lemon Squeezy — one-time or recurring support.

Where your support goes: a wordlist-based passphrase mode (EFF diceware), a stronger pattern-aware strength model, a CLI, a browser-extension build, keeping the free web app online, and fast issue responses.

License

MIT © entropass contributors