# Feature catalog — lodash/lodash

> Canonical page: https://codevetter.com/unpack/lodash/feature-catalog

# Feature catalog — lodash/lodash

Scanned commit 2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8 (2026-09-11). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

User-facing surface is the lodash API itself (~300 methods attached to the `lodash` function plus a lazy-evaluating chain wrapper), the `fp` variant, and the four per-method build/doc npm scripts. `fp/_mapping.js` is the declarative feature table that defines the entire FP surface: aliases, arity buckets, rearg orders, spread configs, mutation classes and skip lists. The repo also ships two interactive HTML surfaces — a QUnit test runner with build/loader dropdowns, and a Benchmark.js perf page comparing lodash against Underscore. There is no HTTP API, no routes, and no CLI subcommands; the `lib/*/build-*.js` scripts are the closest thing to commands and take their target directory from the last `process.argv` element.
- The full lodash API is assembled by explicit `lodash.<name> = <fn>` assignment inside `runInContext`, including `lodash.runInContext`, `lodash.VERSION` and the chainable `lodash.prototype.*` sequence methods (`at`, `chain`, `commit`, `next`, `plant`, `reverse`, `toJSON`/`valueOf`/`value`). — [lodash.js#L16900-16960](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L16900-L16960) [lodash.js#L17205-17226](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L17205-L17226)
- Lazy evaluation is a first-class feature: `LazyWrapper.prototype.clone/reverse/value` are installed and a `realNames` registry maps minified function names back to method names so shortcut fusion survives minification. — [lodash.js#L17190-17215](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L17190-L17215)
- `fp/_mapping.js` declares the FP surface across 12 exported tables — `aliasToReal`, `aryMethod`, `aryRearg`, `iterateeAry`, `iterateeRearg`, `methodRearg`, `methodSpread`, `mutate`, `realToAlias`, `remap`, `skipFixed`, `skipRearg`. — [fp/_mapping.js#L1-2](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_mapping.js#L1-L2) [fp/_mapping.js#L71-72](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_mapping.js#L71-L72) [fp/_mapping.js#L121-129](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_mapping.js#L121-L129) [fp/_mapping.js#L264-330](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_mapping.js#L264-L330)
- The FP immutability guarantee is table-driven: `mapping.mutate` classifies mutating methods into `array` (fill, pull*, remove, reverse), `object` (assign*, defaults*, merge*) and `set` (set, setWith, unset, update, updateWith), each wrapped with a different cloner. — [fp/_mapping.js#L225-262](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_mapping.js#L225-L262) [fp/_baseConvert.js#L473-483](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_baseConvert.js#L473-L483)
- `fp/_convertBrowser.js` self-installs when loaded after lodash in a browser: if a global `_` with `runInContext` exists, it reassigns `_ = browserConvert(_.runInContext())`, converting the page's lodash in place. — [fp/_convertBrowser.js#L11-18](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_convertBrowser.js#L11-L18)
- FP conversion is configurable per-call and per-method through five boolean options — `cap`, `curry`, `fixed`, `immutable`, `rearg` — each defaulting to `true`, exposed as `fp.convert({...})` and `fp.someMethod.convert({...})`. — [fp/_baseConvert.js#L152-158](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_baseConvert.js#L152-L158) [fp/_baseConvert.js#L377-396](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/fp/_baseConvert.js#L377-L396) [lib/fp/template/doc/wiki.jst#L169-196](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lib/fp/template/doc/wiki.jst#L169-L196)
- `npm run build:main-modules <target>` copies `dist/lodash.core.js`, `dist/lodash.core.min.js` and `dist/lodash.min.js` into a target directory as `core.js`, `core.min.js` and `lodash.min.js` — the per-method npm package layout. — [lib/main/build-modules.js#L13-34](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lib/main/build-modules.js#L13-L34) [package.json#L15](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/package.json#L15)
- `npm run build:fp-modules <target>` globs the target's existing `*.js` modules (ignoring `_*.js`, `core.js`, `fp.js`, `index.js`, `lodash.js`), adds alias and remap paths, and emits one `fp/<name>.js` per method chosen from four `.jst` templates (`alias`, `category`, `thru`, `module`). — [lib/fp/build-modules.js#L87-148](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lib/fp/build-modules.js#L87-L148) [lib/fp/template/modules/module.jst](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lib/fp/template/modules/module.jst) [lib/fp/template/modules/thru.jst](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lib/fp/template/modules/thru.jst)
- `npm run doc:fp` renders the public FP-Guide wiki page from `lib/fp/template/doc/wiki.jst`, computing the method lists at build time with helpers `toFuncList` (sorted, chunked by 5) and `toArgOrder` (index permutation → `(a, b, c)` string). — [lib/fp/build-doc.js#L30-63](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lib/fp/build-doc.js#L30-L63) [lib/fp/template/doc/wiki.jst#L69-140](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lib/fp/template/doc/wiki.jst#L69-L140)
- The QUnit runner page exposes a build selector (lodash dev/prod, lodash-core dev/prod) and a loader selector (none, Curl, Dojo, RequireJS) that rewrite `location.href` query params, letting a human test any build/loader combination in-browser. — [test/asset/test-ui.js#L19-99](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/test/asset/test-ui.js#L19-L99) [test/asset/test-ui.js#L109-135](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/test/asset/test-ui.js#L109-L135)
- `perf/index.html` plus `perf/perf.js` is a Benchmark.js A/B suite that loads lodash and a comparison library (default Underscore), scores each into `score.a`/`score.b`, and renders output through an embedded Firebug Lite console. — [perf/perf.js#L86-107](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/perf/perf.js#L86-L107) [perf/asset/perf-ui.js#L36-53](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/perf/asset/perf-ui.js#L36-L53) [perf/index.html#L38-55](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/perf/index.html#L38-L55)
- `test/remove.js` is a small standalone Node utility that takes a `/pattern/flags` string plus a file path and strips matched line groups in place — used to prune generated sources. — [test/remove.js#L8-27](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/test/remove.js#L8-L27)
- `_.template` is a full templating feature with configurable `escape`/`evaluate`/`interpolate` delimiters and `imports`/`variable`/`sourceURL` options, compiled to a real function via the `Function` constructor. — [lodash.js#L14882-14892](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L14882-L14892) [lodash.js#L1764-1780](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L1764-L1780) [lodash.js#L14988-14996](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L14988-L14996)
- `_.runInContext(context)` lets callers swap built-ins: `contextProps` lists the 30 globals (Array, Buffer, Map, Promise, Set, Symbol, WeakMap, setTimeout, …) that get `_.pick`-ed from `root` and defaulted into the supplied context. — [lodash.js#L297-303](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L297-L303) [lodash.js#L1449-1450](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L1449-L1450) [lodash.js#L1440-1448](https://github.com/lodash/lodash/blob/2b5e6f7399a7b48005140b5d5c6bc6c0e62919a8/lodash.js#L1440-L1448)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
