bcrypt.js

A zero-dependency, pure JavaScript implementation of bcrypt for hashing and verifying passwords in Node.js and the browser.

Library
npm
v3.0.3
3,797 stars
BSD 3-Clause License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
55 /100 Fair
Development Activity 40
Maintenance 20
Community 60
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
74 /100 Good
Architecture 72
Code Quality 68
Innovation 70
Learning Curve 85

bcryptjs is a pure JavaScript port of the bcrypt password-hashing algorithm, built to be a drop-in, dependency-free alternative to the native C++ bcrypt binding for Node.js. It works anywhere JavaScript runs, including browsers, by relying on the Web Crypto API or Node’s crypto module for secure randomness, with a pluggable fallback for other environments.

The library exposes both synchronous and asynchronous (promise or callback-based) APIs for generating salts, hashing passwords, and comparing hashes, while remaining wire-compatible with hashes produced by the original bcrypt implementation. Because it ships as an ECMAScript module with a UMD fallback and TypeScript type definitions, it drops into modern bundlers, older CommonJS projects, and browser-only builds without a native compilation step.

What You Get

  • Synchronous and asynchronous APIs (hashSync/hash, compareSync/compare) supporting promises or Node-style callbacks
  • Configurable salt generation via genSalt/genSaltSync with an adjustable cost factor (rounds)
  • Zero runtime dependencies, with automatic use of the Web Crypto API or Node’s crypto module for secure random bytes, plus a setRandomFallback hook for constrained environments
  • Cross-format compatibility, correctly hashing and comparing against $2a$, $2b$, and $2y$ prefixed hashes produced by other bcrypt implementations
  • TypeScript type declarations and both ESM and UMD builds for use in Node.js, bundlers, and directly in browsers
  • A small CLI (bcrypt <input> [rounds|salt]) for quick command-line hashing

Common Use Cases

  • Hashing user passwords before storing them in a database during signup or password-change flows
  • Verifying a submitted login password against a stored bcrypt hash
  • Hashing credentials in browser-based or edge/serverless environments where native Node.js addons aren’t available
  • Replacing the native bcrypt package in projects where native compilation (node-gyp) is problematic in CI or deployment

Under The Hood

Architecture — The entire library lives in a single ~1,150-line index.js module (Blowfish cipher core, base64 codec using bcrypt’s custom alphabet, and the public salt/hash/compare API) with no internal package boundaries; execution flows from genSalt(Sync) (builds a $2b$<rounds>$<salt> string using randomBytes, sourced from the Web Crypto API with a Node crypto fallback and a user-settable setRandomFallback) into hash(Sync)/compare(Sync), which run the Blowfish-based Eksblowfish key schedule directly in JS; async variants chunk the round computation and yield to the event loop via MAX_EXECUTION_TIME-bounded slices with an optional ProgressCallback, avoiding blocking Node’s single thread on high cost factors. Tech Stack — Zero runtime dependencies; the module is authored as a native ES module ("type": "module") with a companion umd/ build generated at publish time by scripts/build.js via the esm2umd transpiler and reformatted with Prettier, giving consumers both an ESM entry (index.js) and a UMD/CommonJS entry (umd/index.js) plus hand-maintained .d.ts type declarations (types.d.ts) copied into both output paths; a bin/bcrypt script exposes the same API as a one-off CLI. Code Quality — tests/index.js is a flat array of self-registered test functions (no framework) that assert against assert/assert.strictEqual/assert.deepEqual, including a cross-check against the native bcrypt npm package (bcrypt-nodejs/C++ binding) as a devDependency to confirm hash format and comparison compatibility across $2a$, $2b$, and $2y$ prefixes; there is no formal linter beyond Prettier --check, and the source relies on var-based ES5-style internals despite being distributed as ESM, reflecting its long maintenance history since 2013. API Design — The public surface intentionally mirrors the native Node bcrypt package’s function names and call signatures (hashSync, hash, compareSync, compare, genSalt(Sync)) so it acts as a drop-in substitute, supports both promise-based and Node-style callback usage on every async function, and documents defaults (10 rounds) so most callers can call bcrypt.hash(password, 10) with no further configuration.

Used by 51 apps in this directory

TypeScript
71%
Other

LogChimp

Marketing · Product Management

1,132

Collect customer feedback, prioritize features with upvotes, and build transparent product roadmaps — fully self-hosted and open source.

View details
83
Repo Health
77
Technical
72
Dependency
Built with
TypeScript 71%
Vue 27%
Updated 1 weeks ago
TypeScript
92%
Other

n8n

Automation · No Code Platforms

208,437

Code when you need it, UI when you don't — the workflow automation platform built for technical teams who refuse to choose.

View details
95
Repo Health
87
Technical
62
Dependency
Built with
TypeScript 92%
Updated 1 weeks ago
TypeScript
65%
Other

NocoDB

Databases · Low Code Platforms · No Code Platforms

65,340

Turn any SQL database into a collaborative no-code spreadsheet with automatic REST APIs and real-time views.

View details
91
Repo Health
77
Technical
63
Dependency
Built with
TypeScript 65%
Vue 30%
Updated 6 days ago
JavaScript
88%
GPL 3.0

NodeBB

Community

15,242

Modern Node.js forum software with real-time WebSockets, multi-database support, and a plugin ecosystem — the community platform built for the open web and the Fediverse.

View details
97
Repo Health
78
Technical
70
Dependency
Built with
JavaScript 88%
Go Template 11%
Updated 6 days ago
TypeScript
95%
MIT

OmniRoute

AI Agents

80,476

A free, open-source AI gateway connecting Claude Code, Codex, Cursor, Cline, and Copilot to 237 AI providers (90+ free) through one endpoint, with automatic fallback and token-compression to stretch free-tier limits further.

View details
87
Repo Health
70
Technical
70
Dependency
Built with
TypeScript 95%
Updated 6 days ago
TypeScript
26%
AGPL 3.0

Omnivore

Bookmarks Archiving · Knowledge Management · Note Taking

16,356

Self-hosted read-it-later platform with highlights, newsletters, PDFs, and seamless Obsidian and Logseq integration.

View details
90
Repo Health
74
Technical
65
Dependency
Built with
TypeScript 26%
JavaScript 24%
HTML 20%
Updated 1 weeks ago
TypeScript
82%
AGPL 3.0

OpenStatus

Devops · Monitoring

9,221

Open-source status pages and uptime monitoring with global synthetic checks, monitoring-as-code, and AI agent integration via MCP.

View details
77
Repo Health
82
Technical
69
Dependency
Built with
TypeScript 82%
MDX 14%
Updated 1 weeks ago
TypeScript
82%
Apache 2.0

Palmr.

File Storage · Security

2,395

Self-hosted, privacy-focused file sharing without limits

View details
57
Repo Health
62
Technical
68
Dependency
Built with
TypeScript 82%
MDX 13%
Updated 2 weeks ago
TypeScript
99%
Other

Papermark

Digital Signiture · File Storage

9,263

Open-source DocSend alternative with page-by-page analytics, secure data rooms, and custom domains for document sharing.

View details
78
Repo Health
63
Technical
66
Dependency
Built with
TypeScript 99%
Updated 2 months ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers