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

After GZIP compression these minified files vary in size:
Boot
  27827 bytes (27.2k)
CDN
cdnjs
  24924 bytes (24.3k)
CDN
gzip -6 (default)
  23578 bytes (23.0k)
local copy
unpkg
  23539 bytes (23.0k)
CDN
jsdelivr
  23524 bytes (23.0k)
CDN
gzip -9
  23518 bytes (23.0k)
local copy
libdeflate -12
  22810 bytes (22.3k)
local copy
7zip -mx=9 -tgzip
  22719 bytes (22.2k)
local copy
zultra
  22697 bytes (22.2k)
local copy
kzip -s0 -rn -b5
  22689 bytes (22.2k)
local copy
pigz -11 -n
  22641 bytes (22.1k)
local copy
Zopfli
  22586 bytes (22.1k)
local copy

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

You will automatically get the smallest lodash 4.16.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 938 bytes by using my lodash 4.16.0 Zopfli version instead of the best available CDN (4.15% smaller than jsdelivr, 22586 vs. 23524 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 --i1000000 --mb8 --mls16 --bsr14 --lazy --ohh

(found September 20, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16  --mls16
block splitting recursion 14  --bsr14
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.16.0/dist/lodash.min.js --location | md5sum
0cc0afe3bbec99e9346623f95c1a016f  -
curl --silent --compressed https://minime.stephan-brumme.com/files/lodash/lodash-4.16.0.min.zopfli.js.gz | md5sum
0cc0afe3bbec99e9346623f95c1a016f  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 23539 bytes 0cc0afe3bbec99e9346623f95c1a016f September 19, 2016 @ 17:50
jsdelivr 23524 bytes 0cc0afe3bbec99e9346623f95c1a016f September 19, 2016 @ 18:17

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Boot 27827 bytes 63e2aeeb9d17534ed6690aad03a2a6b9 < /**
< * @license
< * lodash lodash.com/license | Underscore.js 1.8.3 undersc [...]
< */
< ;(function(){function t(t,n){return t.set(n[0],n[1]),t}fun [...]
< return t}function o(t,n){for(var r=-1,e=t?t.length:0;++r<e [...]
< var u=-1,i=t?t.length:0;for(e&&i&&(r=t[++u]);++u<i;)r=n(r, [...]
< break t}t=-1}else t=g(t,b,r);return t}function y(t,n,r,e){ [...]
< var i=n(t[e]);i!==N&&(r=r===N?i:r+i)}return r}function E(t [...]
< return t.forEach(function(t,e){r[++n]=[e,t]}),r}function C [...]
[...]
September 21, 2016 @ 17:15
cdnjs 24924 bytes 63e2aeeb9d17534ed6690aad03a2a6b9 < /**
< * @license
< * lodash lodash.com/license | Underscore.js 1.8.3 undersc [...]
< */
< ;(function(){function t(t,n){return t.set(n[0],n[1]),t}fun [...]
< return t}function o(t,n){for(var r=-1,e=t?t.length:0;++r<e [...]
< var u=-1,i=t?t.length:0;for(e&&i&&(r=t[++u]);++u<i;)r=n(r, [...]
< break t}t=-1}else t=g(t,b,r);return t}function y(t,n,r,e){ [...]
< var i=n(t[e]);i!==N&&(r=r===N?i:r+i)}return r}function E(t [...]
< return t.forEach(function(t,e){r[++n]=[e,t]}),r}function C [...]
[...]
September 19, 2016 @ 18:32

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
22586 bytes -1 byte zopfli --i1000000 --mls16 --bsr14 --lazy --ohh September 20, 2016 @ 16:08
22587 bytes -2 bytes zopfli --i100000 --mls16 --bsr14 --lazy --ohh September 20, 2016 @ 00:49
22589 bytes -3 bytes zopfli --i100000 --mls16 --bsr40 --lazy --ohh September 19, 2016 @ 18:46
22592 bytes -6 bytes zopfli --i10000 --mls16 --bsr40 --lazy --ohh September 19, 2016 @ 18:05
22598 bytes -4 bytes zopfli --i1000 --mls256 --bsr13 --lazy --ohh September 19, 2016 @ 17:56
22602 bytes -8 bytes zopfli --i1000 --mls256 --bsr15 --lazy --ohh September 19, 2016 @ 17:56
22610 bytes zopfli --i100 --mls256 --bsr15 --lazy --ohh September 19, 2016 @ 17:54

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

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, 100,000 or 1,000,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
22656 22650 22650 22651 22656 22651 22655 22658 22656 22658 22664 22637 22634 22624 22629
22629 22624 22618 22598 22610 22604 22619 22615 22604 22608 22620 22629 22619 22611 22609
22601 22602 22604 22608 22603 22611 22614 22599 22603 22601 22613 22609 22609 22626 22602
22611 22597 22599 22615 22617 22626 22599 22596 22621 22619 22614 22604 22611 22619 22619
22613 22604 22612 22610 22612 22609 22613 22609 22603 22610 22622 22606 22607 22622 22602
22598 22600 22604 22597 22604 22613 22600 22597 22601 22603 22610 22605 22605 22607 22610
22603 22608 22606 22589 22605 22605 22606 22614 22608 22605 22599 22610 22604 22616 22606
22627 22607 22610 22591 22598 22603 22613 22596 22603 22605 22622 22612 22608 22618 22617
22600 22613 22604 22599 22599 22603 22605 22597 22601 22604 22609 22603 22607 22619 22615
22604 22597 22606 22598 22607 22607 22619 22592 22599 22604 22604 22606 22622 22619 22611
22607 22602 22598 22586 22606 22609 22605 22603 22607 22612 22606 22610 22616 22620 22603
22601 22595 22603 22613 22606 22613 22604 22597 22609 22601 22622 22608 22611 22622 22601
22606 22601 22600 22600 22602 22603 22609 22601 22600 22608 22607 22612 22629 22619 22604
22597 22597 22597 22608 22612 22603 22613 22598 22601 22608 22606 22610 22610 22619 22604
22599 22603 22604 22590 22603 22604 22607 22603 22603 22605 22611 22605 22603 22621 22605
22607 22601 22606 22605 22601 22608 22604 22604 22606 22606 22604 22605 22603 22620 22614
22605 22602 22603 22598 22602 22600 22613 22603 22599 22603 22603 22611 22614 22620 22612
22605 22621 22598 22604 22597 22609 22607 22607 22608 22612 22607 22610 22605 22618 22605
22600 22601 22601 22591 22610 22604 22608 22602 22602 22606 22600 22606 22604 22610 22617
22596 22608 22604 22597 22603 22606 22601 22604 22597 22601 22621 22606 22608 22622 22603
22600 22608 22612 22595 22604 22602 22601 22599 22605 22601 22604 22605 22604 22619 22604
22625 22605 22608 22598 22602 22600 22611 22604 22605 22605 22616 22607 22616 22610 22601
22611 22614 22598 22587 22606 22600 22604 22598 22599 22599 22609 22604 22605 22619 22606

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 22610 bytes 100%
1,000 22598 bytes -12 bytes 100%
10,000 22591 bytes -7 bytes 100%
100,000 22587 bytes -4 bytes 2.03%
1,000,000 22586 bytes -1 byte 0.58%
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
22698 bytes +112 bytes (+0.50%) +9 bytes
22830 bytes +244 bytes (+1.08%) +141 bytes
22716 bytes +130 bytes (+0.58%) +27 bytes
22711 bytes +125 bytes (+0.55%) +22 bytes
22699 bytes +113 bytes (+0.50%) +10 bytes
22689 bytes +103 bytes (+0.46%)
22711 bytes +125 bytes (+0.55%) +22 bytes
22738 bytes +152 bytes (+0.67%) +49 bytes
22770 bytes +184 bytes (+0.81%) +81 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 19052 bytes -3534 bytes (-15.65%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 19600 bytes -2986 bytes (-13.22%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 19949 bytes -2637 bytes (-11.68%)
Brotli (Wikipedia) brotli brotli -q 11 21153 bytes -1433 bytes (-6.34%)
LZMA2 (Wikipedia) xz xz -9 21640 bytes -946 bytes (-4.19%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 21983 bytes -603 bytes (-2.67%)
Zstandard (Wikipedia) zstd zstd -19 22493 bytes -93 bytes (-0.41%)

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.