A drop-in replacement for Underscore.js delivering performance, bug fixes, and additional features.
Pull request Compare This branch is 618 commits ahead, 6528 commits behind lodash:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Lo-Dash v0.7.0

A drop-in replacement* for Underscore.js, from the devs behind jsPerf.com, delivering performance, bug fixes, and additional features.

Lo-Dash’s performance is gained by avoiding slower native methods, instead opting for simplified non-ES5 compliant methods optimized for common usage, and by leveraging function compilation to reduce the number of overall function calls.


Dive in

We’ve got API docs, benchmarks, and unit tests.

Create your own benchmarks at jsPerf, or search for existing ones.

For a list of upcoming features, check out our roadmap.


For more information check out these screencasts over Lo-Dash:



Lo-Dash has been tested in at least Chrome 5-21, Firefox 1-15, IE 6-9, Opera 9.25-12, Safari 3-6, Node.js 0.4.8-0.8.8, Narwhal 0.3.2, RingoJS 0.8, and Rhino 1.7RC5.

Custom builds

Custom builds make it easy to create lightweight versions of Lo-Dash containing only the methods you need. To top it off, we handle all method dependency and alias mapping for you.

  • Backbone builds, with only methods required by Backbone, may be created using the backbone modifier argument.
lodash backbone
  • CSP builds, supporting default Content Security Policy restrictions, may be created using the csp modifier argument.
lodash csp
  • Legacy builds, tailored for older browsers without ES5 support, may be created using the legacy modifier argument.
lodash legacy
  • Mobile builds, with IE < 9 bug fixes and method compilation removed, may be created using the mobile modifier argument.
lodash mobile
  • Strict builds, with _.bindAll, _.defaults, and _.extend in strict mode, may be created using the strict modifier argument.
lodash strict
  • Underscore builds, with iteration fixes removed and only Underscore’s API, may be created using the underscore modifier argument.
lodash underscore

Custom builds may be created using the following commands:

  • Use the category argument to pass comma separated categories of methods to include in the build.
    Valid categories are “arrays”, “chaining”, “collections”, “functions”, “objects”, and “utilities”.
lodash category=collections,functions
lodash category="collections, functions"
  • Use the exclude argument to pass comma separated names of methods to exclude from the build.
lodash exclude=union,uniq,zip
lodash exclude="union, uniq, zip"
  • Use the exports argument to pass comma separated names of ways to export the LoDash function.
    Valid exports are “amd”, “commonjs”, “global”, “node”, and “none”.
lodash exports=amd,commonjs,node
lodash include="amd, commonjs, node"
  • Use the iife argument to specify code to replace the immediately-invoked function expression that wraps Lo-Dash.
lodash iife="!function(window,undefined){%output%}(this)"
  • Use the include argument to pass comma separated names of methods to include in the build.
lodash include=each,filter,map
lodash include="each, filter, map"

All arguments, except exclude with include and legacy with csp/mobile, may be combined.

lodash backbone legacy exports=global category=utilities exclude=first,last
lodash -s underscore mobile strict exports=amd category=functions include=pick,uniq

The following options are also supported:

  • -c, --stdout Write output to standard output
  • -h, --help Display help information
  • -o, --output Write output to a given path/filename
  • -s, --silent Skip status updates normally logged to the console
  • -V, --version Output current version of Lo-Dash

The lodash command-line utility is available when Lo-Dash is installed as a global package (i.e. npm install -g lodash).

Custom builds are saved to lodash.custom.js and lodash.custom.min.js.

Installation and usage

In browsers:

<script src="lodash.js"></script>

Using npm:

npm install lodash
npm install -g lodash

In Node.js and RingoJS v0.8.0+:

var _ = require('lodash');

In RingoJS v0.7.0-:

var _ = require('lodash')._;

In Rhino:


In an AMD loader like RequireJS:

  'paths': {
    'underscore': 'path/to/lodash'
['underscore'], function(_) {

Resolved Underscore.js issues

  • Allow iteration of objects with a length property [#148, #154, #252, #448, #659, test]
  • Ensure “Arrays”, “Collections”, and “Objects” methods don’t error when passed falsey arguments [#650, test]
  • Ensure “Collections” methods allow string collection arguments [#247, #276, #561, test]
  • Fix cross-browser object iteration bugs [#60, #376, test]
  • Methods should work on pages with incorrectly shimmed native methods [#7, #742, test]
  • Register as an AMD module, but still export to global [#431, test]
  • _.clone should allow deep cloning [#595, test]
  • _.contains should work with strings [#667, test]
  • _.extend should recursively extend objects [#379, #718, test]
  • _.forEach should be chainable [#142, test]
  • _.forEach should allow exiting iteration early [#211, test]
  • _.isEmpty should support jQuery/MooTools DOM query collections [#690, test]
  • _.isObject should avoid V8 bug #2291 [#605, test]
  • _.keys should work with arguments objects cross-browser [#396, test]
  • _.range should coerce arguments to numbers [#634, #683, test]
  • _.throttle should work when called in a loop [#502, test]

Optimized methods (50+)

  • _.bind
  • _.bindAll
  • _.clone
  • _.compact
  • _.contains, _.include
  • _.defaults
  • _.defer
  • _.difference
  • _.each
  • _.every, _.all
  • _.extend
  • _.filter, _.select
  • _.find, _.detect
  • _.flatten
  • _.forEach, _.each
  • _.functions, _.methods
  • _.groupBy
  • _.indexOf
  • _.intersection
  • _.invert
  • _.invoke
  • _.isArguments
  • _.isDate
  • _.isEmpty
  • _.isFinite
  • _.isFunction
  • _.isObject
  • _.isNumber
  • _.isRegExp
  • _.isString
  • _.keys
  • _.lastIndexOf
  • _.map, _.collect
  • _.max
  • _.memoize
  • _.min
  • _.mixin
  • _.omit
  • _.pairs
  • _.pick
  • _.pluck
  • _.reduce, _.foldl, _.inject
  • _.reject
  • _.result
  • _.shuffle
  • _.some, _.any
  • _.sortBy
  • _.sortedIndex
  • _.template
  • _.throttle
  • _.times
  • _.toArray
  • _.union
  • _.uniq, _.unique
  • _.values
  • _.where
  • _.without
  • _.wrap
  • _.zip
  • plus all _(…) method wrappers

Release Notes


Compatibility Warnings

  • Renamed _.zipObject to _.object
  • Replaced _.drop with _.omit
  • Made _.drop alias _.rest


  • Added _.invert, _.pairs, and _.random
  • Added _.result to the backbone build
  • Added exports, iife, -c/--stdout, -o/--output, and -s/--silent build options
  • Ensured isPlainObject works with objects from other documements
  • Ensured _.isEqual compares values with circular references correctly
  • Ensured _.merge work with four or more arguments
  • Ensured _.sortBy performs a stable sort for undefined values
  • Ensured _.template works with "interpolate" delimiters containing ternary operators
  • Ensured the production build works in Node.js
  • Ensured template delimiters are tokenized correctly
  • Made pseudo private properties _chain and _wrapped double-underscored to avoid conflicts
  • Made minify.js support underscore.js
  • Reduced the size of mobile and underscore builds
  • Simplified _.isEqual and _.size

The full changelog is available here.


Lo-Dash is part of the BestieJS “Best in Class” module collection. This means we promote solid browser/environment support, ES5 precedents, unit testing, and plenty of documentation.