lru-cache

A fast, type-safe, zero-dependency LRU cache for JavaScript and TypeScript

Library
npm
v11.5.2
5,907stars
BlueOak-1.0.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
55/100Fair
Development Activity44
Maintenance16
Community60
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
86/100Excellent
Architecture92
Code Quality88
Innovation85
Learning Curve80

lru-cache is one of the most widely used caching primitives in the JavaScript ecosystem, providing a Map-like store that automatically evicts the least-recently-used entries once a configured bound is reached. It supports bounding by item count, total size, or TTL (individually or combined), and exposes a fetch() method for stale-while-revalidate style async caching with background refresh and abort-signal support.

Written in TypeScript and maintained by npm creator Isaac Z. Schlueter, the library ships as a dual ESM/CommonJS package with full type definitions, zero runtime dependencies, and diagnostics-channel instrumentation for production observability. It underpins caching in countless downstream packages, from build tools to HTTP clients to ORMs.

What You Get

  • A LRUCache class with a Map-like API (get, set, has, delete, clear) plus LRU-specific extras (peek, pop, purgeStale, find)
  • Bounding by max item count, maxSize with custom sizeCalculation, and/or ttl, enforced together or independently
  • fetch() and forceFetch() for async stale-while-revalidate caching with in-flight de-duplication, AbortSignal support, and background refresh
  • dispose/onInsert callbacks for lifecycle hooks (freeing resources, logging insertions)
  • Full TypeScript types, dual ESM/CommonJS builds via tshy, and zero runtime dependencies
  • Built-in node:diagnostics_channel metrics and tracing channels for production observability

Common Use Cases

  • In-process memoization of expensive computations or database/API lookups behind a bounded cache
  • HTTP response or resolved-module caching inside build tools, bundlers, and CLIs
  • Bounding memory growth for per-request or per-session object caches in long-running Node.js services
  • Stale-while-revalidate data fetching where a background refresh keeps a cache warm without blocking callers

Under The Hood

Architecture: The entire implementation lives in a single ~3,200-line src/index.ts module centered on the LRUCache<K, V, FC> class (defined at line 1211). Rather than a conventional node-per-object doubly-linked list, it pre-allocates parallel typed arrays (Uint8Array/Uint16Array/Uint32Array chosen by max size) to represent the next/prev links, keys, values, sizes, and TTL timestamps, indexed by integer position. This avoids per-entry object allocation and garbage-collection pressure, which is the source of its performance advantage over object-graph-based LRU implementations, at the cost of requiring a max, maxSize, or ttl bound to be specified up front so storage can be sized.

Tech Stack: Pure TypeScript with no runtime dependencies. The package is built with tshy to emit dual ESM/CommonJS output (with separate browser/node dialects) and ships hand-written .d.ts types. Tooling includes oxlint for linting, prettier for formatting, tap for the test runner, and typedoc for API documentation generation.

Code Quality: The test/ directory contains 30+ focused test files (basic.ts, ttl.ts, fetch.ts, dispose.ts, memo.ts, purge-stale-exhaustive.ts, etc.) covering eviction ordering, TTL edge cases, memory-leak avoidance, and map-like compatibility, run under tap. The single-file architecture is heavily commented and organized into clearly delimited sections (types, internal helpers, the class body), and strict TypeScript typing is used throughout including branded types (PosInt, Index) to prevent misuse of raw numbers as array indices.

API Design: The public API deliberately mirrors the built-in Map interface (get/set/has/delete/clear) so it’s a near drop-in replacement, while layering on cache-specific options (ttl, sizeCalculation, dispose, fetchMethod) that can be set globally or overridden per-call. The constructor requires at least one bounding option (max, maxSize, or ttl) which is an intentional API guardrail against unbounded memory growth. Extensive JSDoc comments and a published TypeDoc site cover every option.

Used by 48 apps in this directory

TypeScript
94%
MIT

Actual

Invoicing Finance

28,224

Local-first personal finance with envelope budgeting, end-to-end encryption, and multi-device sync — no subscription required.

View details
93
Repo Health
85
Technical
77
Dependency
Built with
TypeScript94%
Updated yesterday
TypeScript
72%
AGPL 3.0

APITable

Low Code Platforms · Databases

15,526

API-first collaborative spreadsheet-database platform that auto-generates REST APIs and lets teams build internal tools, CRMs, and dashboards without code.

View details
53
Repo Health
77
Technical
60
Dependency
Built with
TypeScript72%
Java22%
Updated 9 months ago
TypeScript
97%
AGPL 3.0

Bigcapital

Invoicing Finance

3,846

Self-hostable double-entry accounting platform with invoicing, inventory, multi-currency, and real-time financial reporting for small and medium businesses.

View details
91
Repo Health
77
Technical
64
Dependency
Built with
TypeScript97%
Updated yesterday
TypeScript
92%
GPL 3.0

Blinko

Knowledge Management · Note Taking

10,880

A self-hosted, AI-powered card note-taking tool that lets you capture fleeting thoughts instantly and retrieve them with natural language search.

View details
83
Repo Health
69
Technical
65
Dependency
Built with
TypeScript92%
Updated 2 weeks ago
TypeScript
100%
MIT

Botpress

AI Assistants · AI Development · Customer Support

14,872

The open-source hub for building and deploying LLM-powered AI agents with TypeScript-first tooling, 40+ integrations, and a revolutionary code-execution agent framework.

View details
95
Repo Health
82
Technical
66
Dependency
Built with
TypeScript100%
Updated yesterday
TypeScript
69%
Other

Budibase

Low Code Platforms · No Code Platforms

28,220

Build AI agents, automations, and internal apps on a single open-source platform with full self-hosting control.

View details
92
Repo Health
81
Technical
63
Dependency
Built with
TypeScript69%
Svelte26%
Updated today
TypeScript
96%
Other

Cal.diy

Scheduling

47,796

The 100% MIT-licensed, community-driven scheduling platform — self-host your own booking infrastructure with no enterprise strings attached.

View details
93
Repo Health
86
Technical
66
Dependency
Built with
TypeScript96%
Updated 1 weeks ago
TypeScript
99%
AGPL 3.0

Cherry Studio

AI Assistants

50,753

All-in-one AI desktop client with 300+ assistants and multi-model support

View details
88
Repo Health
84
Technical
71
Dependency
Built with
TypeScript99%
Updated today
JavaScript
90%
Other

CodeSandbox

Code Editors · Developer Tools

13,633

Instantly ready browser-based IDE that runs full npm dependency resolution and transpilation entirely client-side, with no server needed.

View details
65
Repo Health
76
Technical
63
Dependency
Built with
JavaScript90%
Updated 1 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

Search