Choose a version:
13% The original file has 503969 bytes (492.2k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 66614 bytes (65.1k, 13%).

After GZIP compression these minified files vary in size:
Boot
  26157 bytes (25.5k)
CDN
cdnjs
  23165 bytes (22.6k)
CDN
gzip -6 (default)
  22118 bytes (21.6k)
local copy
unpkg
  22100 bytes (21.6k)
CDN
gzip -9
  22055 bytes (21.5k)
local copy
jsdelivr
  22052 bytes (21.5k)
CDN
libdeflate -12
  21364 bytes (20.9k)
local copy
7zip -mx=9 -tgzip
  21347 bytes (20.8k)
local copy
zultra
  21306 bytes (20.8k)
local copy
kzip -s0 -rn -b4
  21275 bytes (20.8k)
local copy
pigz -11 -n
  21247 bytes (20.7k)
local copy
Zopfli
  21196 bytes (20.7k)
local copy

perma-link to the smallest file on my server:
http://minime.stephan-brumme.com/files/lodash/lodash-4.11.0.min.js (or via HTTPS)

You will automatically get the smallest lodash 4.11.0 file, ETag caching is available and
if your browser doesn't support GZIP decompression then the uncompressed version will be sent.

Currently best Zopfli settings

Save 856 bytes by using my lodash 4.11.0 Zopfli version instead of the best available CDN (4.04% smaller than jsdelivr, 21196 vs. 22052 bytes):
You can use my super-compressed files for whatever purpose you like as long as you respect the library's original license agreement.
There are no restrictions from my side - but please avoid hot-linking if you run a high-traffic website.

These command-line settings yielded the best compression ratio so far (Linux version of zopfli-krzymod):
zopfli --i100000 --mb8 --mls2 --bsr22 --lazy --ohh

(found April 14, 2016)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 2  --mls2
block splitting recursion 22  --bsr22
lazy matching in LZ77 yes  --lazy
optimized Huffman headers yes  --ohh
initial random W for iterations 1  --rw1
initial random Z for iterations 2  --rz2

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://raw.githubusercontent.com/lodash/lodash/4.11.0/dist/lodash.min.js --location | md5sum
4a4afa1353f9072ba40ccff6b9e4df13  -
curl --silent --compressed https://minime.stephan-brumme.com/files/lodash/lodash-4.11.0.min.zopfli.js.gz | md5sum
4a4afa1353f9072ba40ccff6b9e4df13  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/lodash/lodash/4.11.0/dist/lodash.min.js --location | sha1sum
12e2cbfd66ec3f32d4bbdb04abd55a8a31a2d080  -
curl --silent --compressed https://minime.stephan-brumme.com/files/lodash/lodash-4.11.0.min.zopfli.js.gz | sha1sum
12e2cbfd66ec3f32d4bbdb04abd55a8a31a2d080  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 22100 bytes 4a4afa1353f9072ba40ccff6b9e4df13 July 11, 2016 @ 16:46
jsdelivr 22052 bytes 4a4afa1353f9072ba40ccff6b9e4df13 (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Boot 26157 bytes 8fd93266278ac220c9fb942415ac6acd < /**
< * @license
< * lodash 4.11.0 (Custom Build) lodash.com/license | Under [...]
< * Build: `lodash -o ./dist/lodash.js`
< */
< ;(function(){function t(t,n){return t.set(n[0],n[1]),t}fun [...]
< return true}function i(t,n){for(var r=-1,e=t.length,u=0,o= [...]
< var u=t.length;for(e&&u&&(r=t[--u]);u--;)r=n(r,t[u],u,t);r [...]
< return-1}function y(t,n,r,e){--r;for(var u=t.length;++r<u; [...]
< })}function O(t){return function(n){return t(n)}}function [...]
[...]
May 4, 2016 @ 10:40
cdnjs 23165 bytes 8fd93266278ac220c9fb942415ac6acd < /**
< * @license
< * lodash 4.11.0 (Custom Build) lodash.com/license | Under [...]
< * Build: `lodash -o ./dist/lodash.js`
< */
< ;(function(){function t(t,n){return t.set(n[0],n[1]),t}fun [...]
< return true}function i(t,n){for(var r=-1,e=t.length,u=0,o= [...]
< var u=t.length;for(e&&u&&(r=t[--u]);u--;)r=n(r,t[u],u,t);r [...]
< return-1}function y(t,n,r,e){--r;for(var u=t.length;++r<u; [...]
< })}function O(t){return function(n){return t(n)}}function [...]
[...]
(invalid)

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

Available lodash versions at minime.stephan-brumme.com:

4.17.21, 4.17.20, 4.17.19, 4.17.18, 4.17.17, 4.17.16, 4.17.15, 4.17.14, 4.17.13, 4.17.12, 4.17.11, 4.17.10, 4.17.9, 4.17.5, 4.17.4, 4.17.3, 4.17.2, 4.17.1, 4.17.0, 4.16.6, 4.16.5, 4.16.4, 4.16.3, 4.16.2, 4.16.1, 4.16.0, 4.15.0, 4.14.2, 4.14.1, 4.14.0, 4.13.1, 4.13.0, 4.12.0, 4.11.2, 4.11.1, 4.11.0, 4.10.0,
4.9.0, 4.8.2, 4.8.1, 4.8.0, 4.7.0, 4.6.1, 4.6.0, 4.5.1, 4.5.0, 4.4.0, 4.3.0, 4.2.1, 4.2.0, 4.1.0, 4.0.1, 4.0.0

The project site contains an overview how well these versions were compressed.
Other interesting projects are AngularJS, BackboneJS, Bootstrap, D3, Dojo, Ember, jQuery, Knockout, React, Socket.IO, ThreeJS, UnderscoreJS and Vue.

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
21196 bytes -3 bytes zopfli --i100000 --mls2 --bsr22 --lazy --ohh April 14, 2016 @ 11:24
21199 bytes -4 bytes zopfli --i10000 --mls8 --bsr19 --lazy --ohh April 14, 2016 @ 10:43
21203 bytes -3 bytes zopfli --i10000 --mls4 --bsr18 --lazy --ohh April 14, 2016 @ 10:40
21206 bytes -8 bytes zopfli --i1000 --mls4 --bsr18 --lazy --ohh April 14, 2016 @ 10:36
21214 bytes zopfli --i100 --mls4 --bsr18 --lazy --ohh April 14, 2016 @ 10:30

If there are multiple parameter sets yielding the same compressed size, only the first one found is shown.

Most recent activity on July 20, 2020 @ 12:53.

Heatmaps

This Zopfli heatmap visualizes how compression changes when modifying the --bsr and --mls parameter.
Cell's contents is the best filesize achieved (in bytes, hover with mouse over cells to see number of iterations).

Good parameters are green, bad are red. The best and worst are bold as well.
The brightness of the blue background color indicates how many iterations were processed:
10,000 or 100,000.
bsr \ mls
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
bsr \ mls
2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
21231 21245 21249 21248 21252 21254 21256 21255 21250 21249 21247 21248 21245 21253 21244
21206 21211 21214 21218 21233 21225 21219 21239 21225 21206 21237 21228 21229 21226 21227
21204 21208 21204 21214 21227 21231 21212 21231 21209 21223 21229 21229 21227 21230 21229
21208 21209 21206 21217 21212 21228 21213 21214 21218 21210 21221 21222 21229 21227 21215
21210 21204 21213 21213 21223 21221 21212 21207 21209 21214 21217 21220 21224 21233 21224
21211 21211 21206 21219 21226 21227 21231 21203 21206 21221 21222 21221 21224 21228 21212
21205 21215 21230 21215 21217 21221 21220 21211 21209 21219 21223 21222 21224 21223 21213
21208 21206 21224 21218 21213 21220 21219 21205 21210 21227 21217 21219 21222 21260 21228
21205 21203 21203 21212 21213 21222 21224 21213 21211 21215 21216 21222 21229 21220 21227
21205 21213 21205 21218 21208 21223 21209 21214 21214 21219 21228 21223 21231 21222 21228
21206 21210 21206 21217 21219 21215 21220 21214 21215 21207 21218 21226 21228 21252 21217
21210 21200 21211 21209 21225 21220 21214 21210 21210 21219 21212 21223 21229 21226 21226
21214 21214 21226 21213 21219 21213 21208 21223 21209 21208 21223 21222 21219 21225 21228
21204 21215 21239 21208 21226 21222 21206 21214 21214 21213 21216 21220 21225 21227 21228
21205 21203 21205 21210 21222 21214 21220 21215 21214 21212 21217 21220 21229 21231 21225
21207 21207 21196 21203 21216 21210 21210 21203 21210 21212 21220 21220 21226 21226 21226
21207 21201 21203 21209 21225 21220 21212 21220 21210 21207 21210 21230 21224 21225 21227
21208 21204 21205 21214 21215 21222 21209 21211 21202 21221 21223 21231 21223 21226 21218
21196 21204 21204 21219 21214 21205 21220 21214 21215 21210 21223 21229 21230 21253 21220
21205 21206 21206 21210 21225 21212 21211 21213 21213 21209 21215 21229 21232 21222 21217
21205 21205 21205 21207 21225 21220 21210 21215 21217 21211 21227 21229 21227 21224 21229
21208 21208 21205 21212 21215 21205 21206 21213 21205 21210 21220 21220 21229 21225 21225
21217 21206 21207 21210 21221 21214 21212 21220 21213 21218 21219 21222 21225 21227 21225

Due to the Monte Carlo design of my search algorithm, not all parameters have reached the same number of iterations yet:
Iterations Min. Bytes Reduction Coverage
100 21214 bytes 100%
1,000 21204 bytes -10 bytes 100%
10,000 21199 bytes -5 bytes 100%
100,000 21196 bytes -3 bytes 0.58%
1,000,000
10,000,000

KZIP has far less options available for tuning/optimization. I only played around with the number of blocks (parameter -n):
Blocks Min. Bytes Compared To Best Zopfli Compared To Best KZIP
21296 bytes +100 bytes (+0.47%) +21 bytes
21366 bytes +170 bytes (+0.80%) +91 bytes
21285 bytes +89 bytes (+0.42%) +10 bytes
21298 bytes +102 bytes (+0.48%) +23 bytes
21275 bytes +79 bytes (+0.37%)
21288 bytes +92 bytes (+0.43%) +13 bytes
21311 bytes +115 bytes (+0.54%) +36 bytes
21338 bytes +142 bytes (+0.67%) +63 bytes
21370 bytes +174 bytes (+0.82%) +95 bytes

Non-DEFLATE Algorithms

Archivers based on completely different compression algorithms often produce superior results.
Unfortunately, browsers only support gzip compression at the moment.
However, support for Brotli is constantly growing - but your browser doesn't support it.
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 17999 bytes -3197 bytes (-15.08%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 18291 bytes -2905 bytes (-13.71%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 18669 bytes -2527 bytes (-11.92%)
Brotli (Wikipedia) brotli brotli -q 11 19915 bytes -1281 bytes (-6.04%)
LZMA2 (Wikipedia) xz xz -9 20444 bytes -752 bytes (-3.55%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 20581 bytes -615 bytes (-2.90%)
Zstandard (Wikipedia) zstd zstd -19 21101 bytes -95 bytes (-0.45%)

Detailled Analysis

I wrote a DEFLATE decoder in Javascript. Click the button below to start a client-side analysis of the smallest gzipped files (may take a second):


Notes: pigz is a fast open source multi-threaded implementation of gzip written by one of the original authors of gzip.
However, when using compression level 11, pigz actually switches to the slower Zopfli algorithm and isn't multi-threaded anymore.
KrzyMOD's extensions to Zopfli offer the highest level of configuration and is therefore used for my brute-force search.
Ken Silverman wrote the closed-source KZIP compression program and Jonathon Fowler ported it to Linux.
Defluff was created by Joachim Henke; DeflOpt is a tool by Ben Jos Walbeehm.

website made by Stephan Brumme in 2015 and still improving in 2024.
all timestamps are displayed in central european time. see my changelog.
no flash, not even images or external css files - and everything squeezed into a single html file.
which was handsomely compressed before releasing it into the wild internet - obviously.

please visit my homepage and my blog, too.
email: minime (at) stephan-brumme.com

All trademarks are property of their respective owners. You know, the boring legal stuff.