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

krow

v0.1.0-alpha.1

Published

The krow key derivation function.

Readme

Krow in TypeScript

A TypeScript implementation of the krow key derivation function.

This is a new and experimental function that has not undergone any review or audit. In the absence of cryptanalysis, use at your own risk.

Krow is a memory-hard key derivation function designed for password hashing and key stretching. It uses BLAKE3 and ChaCha20 Core primitives, and provides configurable memory, time, and security parameters.

Deriving keys with krow can be configured using the following factors:

  • m: The memory size factor m is used to specify the total memory size, in KiB. The total memory size must be at least 4 KiB, and a power of two. The memory is comprised of blocks, which are sized dynamically based on the total memory size. Block sizes are calculated as the floored square root of the memory size in bytes, then rounded down to the nearest power of two and divided by 8. A minimum block size of 128 is always used.
  • t: The time factor t is used to configure the number of memory traversals. Each memory traversal includes a fill phase which passes over all blocks in memory, and a lookup phase that completes a number of lookup iterations equal to the total blocks count. The fill phase uses sequential and optional random block dependencies. The lookup phase uses either data-independent or data-dependent lookups, or a ratio of both in that order.
  • s: The security mode factor s is used to set the ratio of data-independent to data-dependent lookups that take place. It is expected as a percentage 0-100, where 0 indicates full data-independence, and 100 indicates full data-dependence. An security mode value of e.g. 25 would indicate 25% data-independent lookups followed by 75% data-independent lookups for each traversal.
  • random: The optional random factor is used to enable or disable the fill phase's random dependency mode. When true, both sequential and random block dependencies will be used. When false, only sequential block dependencies will be used. By default, this factor is true.
  • mutable: The optional mutable factor is used to enable or disable memory mutability during the lookup phase. When true, during each lookup the mixed accumulator will be written back to the memory at a derived write index. When false, the memory is immutable and no accumulator writes back to the memory will take place. By default, this factor is true.

Example Usage

import { krow, type KrowOpts } from "krow";

const PASSWORD = "Unmake the Wild Light";
const SALT = "65daysofstatic";
const opts: KrowOpts = { m: 16 * 1024, t: 2, s: 25 };

const dk = krow(PASSWORD, SALT, null, opts);