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

After GZIP compression these minified files vary in size:
Boot
  38008 bytes (37.1k)
CDN
cdnjs
  31187 bytes (30.5k)
CDN
gzip -6 (default)
  21383 bytes (20.9k)
local copy
unpkg
  21348 bytes (20.8k)
CDN
gzip -9
  21302 bytes (20.8k)
local copy
jsdelivr
  21302 bytes (20.8k)
CDN
7zip -mx=9 -tgzip
  20652 bytes (20.2k)
local copy
libdeflate -12
  20645 bytes (20.2k)
local copy
kzip -s0 -rn -b4
  20572 bytes (20.1k)
local copy
zultra
  20562 bytes (20.1k)
local copy
pigz -11 -n
  20526 bytes (20.0k)
local copy
Zopfli
  20485 bytes (20.0k)
local copy

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

You will automatically get the smallest lodash 4.6.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 817 bytes by using my lodash 4.6.0 Zopfli version instead of the best available CDN (3.99% smaller than jsdelivr, 20485 vs. 21302 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 --mls512 --bsr30 --lazy --ohh

(found April 13, 2016)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 512  --mls512
block splitting recursion 30  --bsr30
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.6.0/dist/lodash.min.js --location | md5sum
fc56f714edac8c5ae5a71ee1419f4da3  -
curl --silent --compressed https://minime.stephan-brumme.com/files/lodash/lodash-4.6.0.min.zopfli.js.gz | md5sum
fc56f714edac8c5ae5a71ee1419f4da3  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 21348 bytes fc56f714edac8c5ae5a71ee1419f4da3 July 11, 2016 @ 16:46
jsdelivr 21302 bytes fc56f714edac8c5ae5a71ee1419f4da3 (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Boot 38008 bytes 9b67042869f5e5759c5c228ce9b1b745 < /**
< * @license
< * lodash 4.6.0 (Custom Build) lodash.com/license | Unders [...]
< * Build: `lodash -o ./dist/lodash.js`
< */
< ;(function(){function n(n,t){return n.set(t[0],t[1]),n}fun [...]
< return true}function i(n,t){for(var r=-1,e=n.length,u=0,o= [...]
< var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);r [...]
< return-1}function y(n,t,r,e){--r;for(var u=n.length;++r<u; [...]
< }function O(n,t){return a(t,function(t){return n[t]})}func [...]
[...]
(invalid)
cdnjs 31187 bytes 9b67042869f5e5759c5c228ce9b1b745 < /**
< * @license
< * lodash 4.6.0 (Custom Build) lodash.com/license | Unders [...]
< * Build: `lodash -o ./dist/lodash.js`
< */
< ;(function(){function n(n,t){return n.set(t[0],t[1]),n}fun [...]
< return true}function i(n,t){for(var r=-1,e=n.length,u=0,o= [...]
< var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);r [...]
< return-1}function y(n,t,r,e){--r;for(var u=n.length;++r<u; [...]
< }function O(n,t){return a(t,function(t){return n[t]})}func [...]
[...]
(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
20485 bytes -2 bytes zopfli --i100000 --mls512 --bsr30 --lazy --ohh April 13, 2016 @ 16:47
20487 bytes -1 byte zopfli --i10000 --mls512 --bsr30 --lazy --ohh April 13, 2016 @ 08:12
20488 bytes -2 bytes zopfli --i10000 --mls1024 --bsr21 --lazy --ohh April 12, 2016 @ 15:49
20490 bytes -11 bytes zopfli --i1000 --mls1024 --bsr21 --lazy --ohh April 12, 2016 @ 09:22
20501 bytes zopfli --i100 --mls512 --bsr12 --lazy --ohh April 12, 2016 @ 02:43

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:54.

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
20526 20526 20527 20528 20545 20547 20547 20548 20546 20544 20504 20518 20498 20533 20546
20503 20498 20502 20505 20510 20500 20500 20506 20523 20499 20497 20507 20498 20529 20529
20499 20501 20500 20497 20506 20500 20501 20512 20496 20494 20522 20525 20505 20501 20495
20491 20490 20499 20504 20500 20495 20491 20489 20500 20493 20516 20521 20496 20496 20494
20497 20489 20489 20488 20490 20494 20491 20509 20488 20493 20496 20505 20498 20522 20498
20490 20510 20505 20489 20488 20493 20489 20510 20491 20499 20496 20523 20516 20516 20495
20490 20488 20500 20497 20498 20489 20490 20492 20493 20493 20501 20501 20497 20501 20490
20491 20488 20494 20488 20490 20490 20488 20500 20485 20491 20495 20500 20495 20506 20499
20506 20495 20502 20495 20502 20490 20492 20494 20490 20511 20498 20501 20497 20500 20500
20492 20491 20495 20501 20501 20493 20492 20502 20494 20494 20495 20502 20498 20496 20496
20490 20494 20501 20501 20501 20492 20492 20511 20490 20497 20496 20498 20500 20511 20494
20489 20490 20494 20501 20502 20494 20491 20510 20503 20493 20495 20500 20498 20500 20496
20491 20492 20494 20503 20495 20493 20491 20502 20490 20497 20496 20518 20497 20498 20493
20496 20491 20493 20499 20491 20496 20496 20502 20490 20503 20497 20505 20497 20499 20500
20495 20491 20492 20504 20496 20495 20494 20500 20495 20493 20496 20518 20491 20502 20500
20494 20493 20494 20493 20490 20494 20493 20498 20494 20502 20496 20500 20499 20493 20495
20490 20491 20489 20497 20494 20490 20496 20511 20489 20494 20495 20496 20496 20495 20495
20489 20489 20496 20495 20491 20489 20488 20507 20488 20488 20495 20501 20500 20514 20495
20489 20492 20494 20488 20490 20488 20489 20501 20488 20500 20500 20522 20499 20499 20498
20489 20491 20494 20488 20489 20488 20492 20502 20490 20490 20496 20500 20498 20495 20494
20489 20491 20501 20500 20504 20492 20494 20509 20490 20495 20496 20505 20499 20516 20499
20491 20489 20496 20494 20489 20489 20485 20502 20485 20493 20497 20501 20495 20497 20499
20488 20490 20496 20492 20488 20492 20491 20492 20490 20489 20496 20499 20497 20495 20495

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 20501 bytes 100%
1,000 20489 bytes -12 bytes 100%
10,000 20487 bytes -2 bytes 100%
100,000 20485 bytes -2 bytes 0.87%
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
20584 bytes +99 bytes (+0.48%) +12 bytes
20648 bytes +163 bytes (+0.80%) +76 bytes
20574 bytes +89 bytes (+0.43%) +2 bytes
20586 bytes +101 bytes (+0.49%) +14 bytes
20572 bytes +87 bytes (+0.42%)
20578 bytes +93 bytes (+0.45%) +6 bytes
20601 bytes +116 bytes (+0.57%) +29 bytes
20625 bytes +140 bytes (+0.68%) +53 bytes
20639 bytes +154 bytes (+0.75%) +67 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 17376 bytes -3109 bytes (-15.18%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 17709 bytes -2776 bytes (-13.55%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 18830 bytes -1655 bytes (-8.08%)
Brotli (Wikipedia) brotli brotli -q 11 19318 bytes -1167 bytes (-5.70%)
LZMA2 (Wikipedia) xz xz -9 19772 bytes -713 bytes (-3.48%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 19854 bytes -631 bytes (-3.08%)
Zstandard (Wikipedia) zstd zstd -19 20411 bytes -74 bytes (-0.36%)

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.