# js-md5

> A simple MD5 hash function for JavaScript supports UTF-8 encoding.

Latest version **0.9.2** (published 2026-07-20) · MIT license · 0 weekly downloads

## Install

```sh
npm install js-md5
pnpm add js-md5
yarn add js-md5
bun add js-md5
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.9.2 |
| Published | 2026-07-20 |
| First published | 2014-01-04 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 333.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 837 |
| Author | Chen, Yi-Cyuan |
| Maintainers | emn178 |
| Keywords | md5, hash, encryption, cryptography, HMAC |

## Links

- npm: https://www.npmjs.com/package/js-md5
- Repository: https://github.com/emn178/js-md5
- Issues: https://github.com/emn178/js-md5/issues
- npm.io page: https://npm.io/package/js-md5

## 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

- 0.9.2 (latest) — 2026-07-20
- 0.9.0 — 2026-07-20
- 0.8.3 — 2023-10-09
- 0.8.2 — 2023-10-09
- 0.8.1 — 2023-10-09
- 0.8.0 — 2023-09-27
- 0.7.3 — 2017-12-18
- 0.7.2 — 2017-10-31
- 0.7.1 — 2017-10-29
- 0.7.0 — 2017-10-29
- 0.6.1 — 2017-10-07
- 0.6.0 — 2017-07-28
- 0.5.0 — 2017-07-14
- 0.4.2 — 2017-01-18
- 0.4.1 — 2016-03-31
- … 9 more at https://npm.io/package/js-md5/versions

## README

# js-md5
[![CI](https://github.com/emn178/js-md5/actions/workflows/ci.yml/badge.svg)](https://github.com/emn178/js-md5/actions/workflows/ci.yml)
[![Coverage Status](https://coveralls.io/repos/emn178/js-md5/badge.svg?branch=master)](https://coveralls.io/r/emn178/js-md5?branch=master)  
[![NPM](https://nodei.co/npm/js-md5.png?stars&downloads)](https://nodei.co/npm/js-md5/)

A simple and fast MD5 hash function for JavaScript supports UTF-8 encoding.

## Demo
[MD5 Online](http://emn178.github.io/online-tools/md5.html)  
[MD5 File Checksum Online](http://emn178.github.io/online-tools/md5_checksum.html)

## Download
- [Compress](https://raw.github.com/emn178/js-md5/master/build/md5.min.js)
- [Uncompressed build](https://raw.github.com/emn178/js-md5/master/build/md5.js)
- [Modern](https://raw.github.com/emn178/js-md5/master/build/md5.modern.min.js)
- [Modern uncompressed](https://raw.github.com/emn178/js-md5/master/build/md5.modern.js)
- [Lite](https://raw.github.com/emn178/js-md5/master/build/md5-lite.min.js)
- [Lite uncompressed](https://raw.github.com/emn178/js-md5/master/build/md5-lite.js)
- [Uncompress](https://raw.github.com/emn178/js-md5/master/src/md5.js)

### Builds

| Build | Legacy fallbacks | Node acceleration | HMAC | Base64 | Deprecated `buffer` |
| --- | --- | --- | --- | --- | --- |
| `md5.js` / `md5.min.js` | Yes | Yes | Yes | Yes | Yes |
| `md5.modern.js` / `md5.modern.min.js` | No | Yes | Yes | Yes | Yes |
| `md5-lite.js` / `md5-lite.min.js` | No | No | No | No | No |

The modern and lite builds require `Array.isArray`, `ArrayBuffer`, typed arrays,
and `ArrayBuffer.isView`. The lite build keeps the one-shot and streaming MD5
APIs, including `hex`, `array`, `digest`, and `arrayBuffer` output.

## Benchmark
- [Benchmark (measurethat.net) - Short String](https://measurethat.net/Benchmarks/Show/29171/0/md5-performance-comparison-v2)
- [Benchmark (measurethat.net) - Long String](https://measurethat.net/Benchmarks/Show/29172/0/md5-performance-comparison-long-text-v2)
- [Benchmark (jsperf.app) - Long String](https://jsperf.app/jonuhi/6)
- [Benchmark (measurethat.net) - Very Long String](https://measurethat.net/Benchmarks/Show/29173/0/md5-performance-comparison-very-long-text)
- [Benchmark (jsperf.app) - Very Long String](https://jsperf.app/jonuhi/8)
- [Async Benchmark (measurethat.net)](https://measurethat.net/Benchmarks/Show/29176/0/md5-performance-comparison-very-long-text-v6)
- [Async Benchmark (jsperf.app)](https://jsperf.app/jonuhi/9)

* js-md5 is the fastest synchronous MD5 library, but slower than Hash-WASM 

- [File Benchmark - Issue #19](https://github.com/emn178/js-md5/issues/19)
- [File Benchmark - Issue #42](https://github.com/emn178/js-md5/issues/42)

## Installation
You can also install js-md5 by using Bower.

    bower install md5

For node.js, you can use this command to install:

    npm install js-md5

## Notice
`buffer` method is deprecated. This maybe confuse with Buffer in node.js. Please use `arrayBuffer` instead.

## Usage
You could use like this:
```JavaScript
md5('Message to hash');
var hash = md5.create();
hash.update('Message to hash');
hash.hex();

// HMAC
md5.hmac('key', 'Message to hash');

var hash = md5.hmac.create('key');
hash.update('Message to hash');
hash.hex();
```

### Node.js
If you use node.js, you should require the module first:
```JavaScript
var md5 = require('js-md5');
```

### TypeScript
If you use TypeScript, you can import like this:
```TypeScript
import { md5 } from 'js-md5';
```

## RequireJS
It supports AMD:
```JavaScript
require(['your/path/md5.js'], function(md5) {
// ...
});
```
[See document](https://emn178.github.com/js-md5/doc/)

## Example
```JavaScript
md5(''); // d41d8cd98f00b204e9800998ecf8427e
md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6
md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0

// It also supports UTF-8 encoding
md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07

// It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
md5([]); // d41d8cd98f00b204e9800998ecf8427e
md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e

// Different output
md5(''); // d41d8cd98f00b204e9800998ecf8427e
md5.hex(''); // d41d8cd98f00b204e9800998ecf8427e
md5.array(''); // [212, 29, 140, 217, 143, 0, 178, 4, 233, 128, 9, 152, 236, 248, 66, 126]
md5.digest(''); // [212, 29, 140, 217, 143, 0, 178, 4, 233, 128, 9, 152, 236, 248, 66, 126]
md5.arrayBuffer(''); // ArrayBuffer
md5.base64(''); // 1B2M2Y8AsgTpgAmY7PhCfg==

// HMAC
md5.hmac.hex('key', 'Message to hash');
md5.hmac.array('key', 'Message to hash');
// ...
```

## License
The project is released under the [MIT license](https://opensource.org/license/mit/).

## Contact
The project's website is located at https://github.com/emn178/js-md5  
Author: Chen, Yi-Cyuan (emn178@gmail.com)

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