# hash-fns

> easily create, assess, and assure hashes within a pit-of-success

Latest version **3.0.0** (published 2026-02-08) · MIT license · 0 weekly downloads

## Install

```sh
npm install hash-fns
pnpm add hash-fns
yarn add hash-fns
bun add hash-fns
```

## Health

**Score 60/100 (C)** — status: stable.

Positive: has types; no vulnerabilities; has provenance; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 3.0.0 |
| Published | 2026-02-08 |
| First published | 2024-08-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=8.0.0 |
| Dependencies | 3 |
| Unpacked size | 14.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 0 |
| Author | ehmpathy |
| Maintainers | uladkasach |
| Keywords | hash, pit-of-success, domain-glossary, sha256 |

## Links

- npm: https://www.npmjs.com/package/hash-fns
- Repository: https://github.com/ehmpathy/hash-fns
- Issues: https://github.com/ehmpathy/hash-fns/issues
- npm.io page: https://npm.io/package/hash-fns

## Dependencies (3)

- [type-fns](https://npm.io/package/type-fns.md) 1.21.0
- [@noble/hashes](https://npm.io/package/@noble/hashes.md) 2.0.1
- [domain-glossaries](https://npm.io/package/domain-glossaries.md) 1.0.0

## Alternatives

- [@gemini-wallet/core](https://npm.io/package/@gemini-wallet/core.md) — 515.6K weekly downloads
- [utility](https://npm.io/package/utility.md) — 416.6K weekly downloads
- [@primno/dpapi](https://npm.io/package/@primno/dpapi.md) — 7.2K weekly downloads
- [pi-readseek](https://npm.io/package/pi-readseek.md) — 3.7K weekly downloads
- [@emilia-protocol/verify](https://npm.io/package/@emilia-protocol/verify.md) — 1.1K weekly downloads

## Recent versions

- 3.0.0 (latest) — 2026-02-08
- 1.1.1 — 2026-01-31
- 1.1.0 — 2025-07-10
- 1.0.1 — 2024-08-05

## README

# hash-fns

![test](https://github.com/ehmpathy/hash-fns/workflows/test/badge.svg)
![publish](https://github.com/ehmpathy/hash-fns/workflows/publish/badge.svg)

easily create, assess, and assure hashes within a pit-of-success

isomorphic — works on node, bun, deno, browsers, cloudflare workers, and react native. powered by [@noble/hashes](https://github.com/paulmillr/noble-hashes).

# install

```sh
npm install hash-fns
```

# use

for example

```ts
import { Hash, asHashSha256, isHashSha256 } from 'hash-fns';

// create a hash
const versionHash: Hash = asHashSha256('some data');

// verify that a given value is a valid hash
const foundHash: Hash = isHashSha256.assure('__hash__');

// typeguard against random strings passed as hashes
const expectHash: Hash = 'some string'; // 🛑 typescript will throw an error, since string is not assignable to Hash

// use a hash within functions that expect strings
const expectWords: string = asHashSha256('some data'); // ✅ passes, as Hash is assignable to strings
```


## 🔧 mechs

### `asHashSha256(message: string): Hash`

- **.what**: creates a 256-bit sha-256 hash from a utf-8 string
- **.why**: cryptographically secure hash for dedup, version tags, signatures, and data integrity

**example:**
```ts
const versionTag = asHashSha256(JSON.stringify(configObject));
```

---

### `asHashShake256(message: string, options?: { bytes: number }): Hash`

- **.what**: creates a variable-length cryptographic hash via shake256 (keccak sponge function)
- **.why**: ideal when you need a specific hash length, such as for compact cache keys or extended fingerprints

**example:**
```ts
const cacheKey = asHashShake256('some content', { bytes: 16 }); // 32-char hex (16 bytes)
const extended = asHashShake256('some content', { bytes: 64 }); // 128-char hex (64 bytes)
```

---

### `isHashSha256(input: string): input is Hash`

- **.what**: type guard that checks if a string is a valid 64-character hex sha-256 hash
- **.why**: validate hash format at runtime with compile-time type narrow

**example:**
```ts
if (isHashSha256(value)) {
  // value is now typed as Hash
}

// or fail fast
isHashSha256.assure(value); // throws if not a valid sha-256 hash
```

---
_Source: https://npm.io/package/hash-fns · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
