Modern JavaScript utility library providing modularity, performance, and 300+ functions for arrays, objects, strings, and more.

1991 detections
20 websites tracked
Updated 15 Jun 2026

Websites Using Lodash

What Is Lodash?

Lodash is the most widely used JavaScript utility library on the web. It bundles roughly 300 small, well-tested helper functions for working with arrays, objects, collections, strings, numbers, and functions, all exposed through a single namespace conventionally referenced as the underscore character _. If you want the short answer: Lodash is the toolbox developers reach for when they need reliable, battle-tested helpers like deep cloning, deep merging, debouncing, throttling, and safe nested property access that plain JavaScript either lacks or makes awkward.

Lodash began as a fork of Underscore.js, created by John-David Dalton to deliver better performance, cross-environment consistency, and a modular build process. It is consistently reported as one of the most depended-upon packages in the npm registry, pulled in directly or transitively by an enormous share of JavaScript projects. Exact dependency counts vary by source and change constantly, so treat any single figure with caution; what is consistently observed is that Lodash sits at or near the top of npm dependency rankings and appears on a very large portion of production websites, both as a direct script include and as a bundled dependency of other libraries.

The reason for that ubiquity is practical. JavaScript's standard library has improved dramatically over the years, but it still leaves gaps. Deep equality comparison, recursive object merging, structured cloning of arbitrary values, and ergonomic data transformation pipelines are exactly the kinds of things teams do not want to hand-write and maintain. Lodash provides them with a stable API, predictable edge-case handling, and documentation that has been refined over more than a decade.

How Lodash Works

Lodash is a pure utility library with no DOM dependency, no framework coupling, and no runtime services. Every function takes inputs and returns outputs without mutating global state, which makes the library equally at home in browsers, Node.js, serverless functions, and build tooling.

At its core, Lodash exposes a single object (the _ namespace) whose methods are organized into categories: Array, Collection, Object, String, Number, Lang, Function, Util, and a few others. A collection in Lodash terms is anything iterable like an array or an object, and many functions such as _.map, _.filter, _.reduce, and _.forEach accept both, normalizing the difference so you write one call instead of branching on type.

A defining feature is the chaining and lazy-evaluation system. Wrapping a value with _(value) or _.chain(value) creates a wrapper object on which methods can be called in sequence, with the final .value() call producing the result. For large data sets, Lodash applies lazy evaluation, fusing operations so that a map followed by a filter followed by a take does not create intermediate arrays for every element; it short-circuits as soon as it has enough results. This can make chained Lodash pipelines faster than naive native equivalents on big inputs.

Lodash ships in several builds. The classic full build is a single file (lodash.js or the minified lodash.min.js) that attaches _ to the global object. The lodash-es package provides ES modules so bundlers can tree-shake unused functions. Per-method packages and per-method imports (for example import debounce from 'lodash/debounce') let teams include only the helpers they actually use, which keeps production bundles small. Under the hood, many functions share internal helpers for things like iteratee resolution (turning a string, object, or function shorthand into a comparison function) and deep traversal, which is part of why the library is both compact and consistent.

Because it is just functions, Lodash has no lifecycle, no initialization, and no configuration. You load it, you call methods, and you get values back. That simplicity is a big reason it has survived the rise and fall of many frameworks around it.

How to Tell if a Website Uses Lodash

Lodash leaves clear, recognizable fingerprints. Because StackOptic analyzes pages server-side by fetching the URL and inspecting the HTML and referenced assets, the most durable signals are the script URLs and global variables a page exposes.

Signals in the page and network

  • Script filenames. Look for requests to lodash.min.js, lodash.js, or versioned filenames like [email protected]/lodash.min.js. These are the canonical distribution names.
  • CDN paths. Public CDNs serve Lodash from predictable URLs: cdnjs.cloudflare.com/ajax/libs/lodash.js/..., cdn.jsdelivr.net/npm/lodash@.../lodash.min.js, and unpkg.com/lodash@.../lodash.min.js. Spotting any of these in the Network tab is a strong indicator.
  • The global _ object. Full builds attach _ to window. Typing _ in the DevTools Console and getting back a large function object (rather than undefined) is a direct sign.
  • The version property. Running _.VERSION in the Console returns a version string such as 4.17.21 when the global build is present, which confirms both presence and version.
  • Bundle markers. When Lodash is bundled rather than loaded as a standalone file, minified source often retains recognizable internal strings and method names. Searching a built JavaScript file for tokens like cloneDeep, lodash, or __lodash_hash_undefined__ frequently surfaces it.

Tools to confirm it

ToolWhat you doWhat it reveals
View SourceOpen the page source in your browser<script> tags pointing to lodash.min.js or CDN URLs
DevTools ConsoleType _ and _.VERSIONThe global object and the exact version string
DevTools NetworkReload with the Network tab open, filter by lodashRequests for Lodash files and their CDN host
WappalyzerRun the browser extension on the pageFlags Lodash in the JavaScript libraries category
library-detectorRun the library-detector extensionDetects Lodash (and Underscore) via global probing

If you want a structured walkthrough of these techniques applied to any dependency, see our guide on how to check what JavaScript libraries a website uses, and for stack analysis beyond a single library, the broader primer on how to find out what technology a website uses.

One caveat worth stating plainly: when Lodash is tree-shaken and bundled with a build tool, the global _ may not exist and the filename signal disappears. In those cases bundle-marker searches and detection extensions are more reliable than Console probing.

Key Features

Lodash earns its place through breadth and reliability rather than any single headline feature.

  • Collection helpers. _.map, _.filter, _.reduce, _.groupBy, _.keyBy, _.orderBy, and _.partition provide expressive data transformation that works uniformly on arrays and objects.
  • Deep object operations. _.cloneDeep produces an independent copy of nested data, _.merge recursively combines objects, _.isEqual performs deep value comparison, and _.get and _.set read and write nested paths safely.
  • Safe property access. _.get(object, 'a.b.c', fallback) returns a default instead of throwing when an intermediate value is missing, which eliminates a whole class of runtime errors.
  • Function utilities. _.debounce and _.throttle rate-limit handlers for scroll, resize, and input events; _.memoize caches results; _.once guarantees single execution.
  • Shorthand iteratees. Many functions accept a property name ('name'), a partial object ({ active: true }), or a [path, value] pair as shorthand for a callback, which keeps call sites concise.
  • Lazy chaining. Chained operations on large collections fuse and short-circuit for performance.
  • Modular consumption. Per-method imports and lodash-es enable tree-shaking so you ship only what you use.

A few of these deserve extra emphasis because they are the reasons teams keep Lodash even after adopting modern JavaScript. _.cloneDeep and _.merge handle arrays, plain objects, dates, and nested structures correctly, which is genuinely hard to reimplement. _.debounce and _.throttle are so commonly needed for performant UI event handling that many projects include Lodash almost solely for them. And _.get remains popular for defensive access to API responses whose shape is not guaranteed, even though optional chaining now covers many simpler cases.

Pros and Cons

Lodash's trade-offs flow directly from being a mature, comprehensive utility library in an era of an improving language.

Pros

  • Extremely well-tested with predictable handling of tricky edge cases.
  • Consistent, memorable API documented in depth.
  • Cross-environment: identical behavior in browsers and Node.js.
  • Strong performance, including lazy evaluation for large data sets.
  • Modular builds and lodash-es allow small, tree-shaken bundles.
  • Enormous community knowledge base and ecosystem familiarity.

Cons

  • Significant overlap with modern native JavaScript for simple operations.
  • The full build adds noticeable bundle weight if imported wholesale.
  • Naive import _ from 'lodash' can defeat tree-shaking and bloat output.
  • Some teams treat it as a default dependency where vanilla code would suffice.
  • A few functions (like _.chain) are hard for bundlers to tree-shake effectively.

The practical guidance most teams converge on is to import individual functions, lean on Lodash for the genuinely hard helpers (deep operations, debounce, throttle, memoize), and use native methods (Array.prototype.map, Object.entries, spread syntax, optional chaining) for the simple cases.

Lodash vs Alternatives

Lodash is not the only utility option, and the right choice depends on bundle sensitivity and how many helpers you truly need.

Library / approachStrengthsTrade-offs
LodashBroadest function set, deep operations, lazy chaining, ubiquitousBundle weight if imported whole; overlaps native methods
Underscore.jsThe original; small and stableFewer functions, no lazy evaluation, less actively evolved
RamdaFunctional style, auto-currying, immutable-friendlySteeper learning curve; different mental model
Native JavaScriptZero dependencies, built into the runtimeNo deep clone/merge, no debounce/throttle, more verbose for complex work
just (angus-c/just)Tiny single-purpose modules, no dependenciesMust compose many packages; smaller ecosystem

Underscore.js is the closest relative and a reasonable lighter-weight choice for projects that only need basic collection helpers; if you are comparing the two directly, our profile of Underscore.js covers the differences. Ramda appeals to teams committed to a functional, point-free style. For projects that need only a handful of helpers and are extremely bundle-conscious, native JavaScript plus a couple of micro-libraries is increasingly viable.

Use Cases

Lodash shows up across almost every category of JavaScript application.

  • Data transformation in front-end apps. Reshaping API responses, grouping records for display, sorting tables, and de-duplicating lists.
  • Performance-sensitive event handling. Debouncing search-as-you-type inputs and throttling scroll or resize handlers in dashboards and editors.
  • Configuration and state merging. Combining default settings with user overrides via _.merge, and snapshotting state with _.cloneDeep.
  • Node.js and serverless back ends. Normalizing payloads, validating shapes with _.get, and aggregating data before responding.
  • Build tooling and scripts. Quick data munging in one-off scripts where pulling in Lodash is faster than writing helpers.

For competitive and technographic analysis, detecting Lodash on a site tells you the team is comfortable adding established utility dependencies and is likely running a build pipeline. Combined with other detected libraries, it helps profile the maturity and conventions of a front-end stack, which is useful for agencies scoping work and for vendors qualifying technical leads.

Frequently Asked Questions

Is Lodash still worth using in modern JavaScript?

Yes, selectively. Modern JavaScript covers many simple cases (map, filter, find, spread, optional chaining), so you should prefer native methods there. But Lodash remains valuable for deep clone, deep merge, deep equality, safe nested access, debounce, throttle, and memoize, which are tedious and error-prone to reimplement. Import individual functions to keep bundles small.

How can I tell which version of Lodash a site is running?

If the full global build is loaded, open the DevTools Console and type _.VERSION, which returns a string like 4.17.21. You can also read the version directly from a CDN URL such as [email protected]/lodash.min.js. When Lodash is bundled and tree-shaken, the global may be absent, so check the script filename or use a detection extension instead.

What is the difference between Lodash and Underscore.js?

Lodash started as a fork of Underscore.js and grew into a larger, faster, more modular library. It adds many functions Underscore lacks, supports lazy evaluation in chains, and offers per-method imports and an ES-module build for tree-shaking. Underscore is smaller and simpler but less feature-rich and less actively developed. Lodash is the more common choice today.

Does using Lodash hurt my bundle size or performance?

It depends entirely on how you import it. Importing the whole library with import _ from 'lodash' can add substantial weight. Importing single functions (import debounce from 'lodash/debounce') or using lodash-es lets bundlers include only what you use. Runtime performance is generally strong, and lazy chaining can even beat naive native code on large data sets.

Is window._ always Lodash?

Not necessarily. The _ global is the convention for both Lodash and Underscore.js, and in rare cases other code may claim it. Confirm by checking for Lodash-specific methods (for example _.cloneDeep and _.VERSION), which Underscore does not expose in the same way, or by inspecting the loaded script filename in the Network tab.

Want to identify Lodash and the full JavaScript stack behind any website in seconds? Try StackOptic at https://stackoptic.com.

Lodash - Websites Using Lodash | StackOptic