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

After GZIP compression these minified files vary in size:
Boot
  37592 bytes (36.7k)
CDN
cdnjs
  30940 bytes (30.2k)
CDN
gzip -6 (default)
  21187 bytes (20.7k)
local copy
jsdelivr
  21114 bytes (20.6k)
CDN
gzip -9
  21103 bytes (20.6k)
local copy
7zip -mx=9 -tgzip
  20453 bytes (20.0k)
local copy
libdeflate -12
  20448 bytes (20.0k)
local copy
zultra
  20386 bytes (19.9k)
local copy
kzip -s0 -rn -b2
  20380 bytes (19.9k)
local copy
pigz -11 -n
  20329 bytes (19.9k)
local copy
Zopfli
  20293 bytes (19.8k)
local copy
Zopfli (defluff)
  20292 bytes (19.8k)
local copy

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

You will automatically get the smallest lodash 4.4.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 821 bytes by using my lodash 4.4.0 Zopfli version instead of the best available CDN (4.05% smaller than jsdelivr, 20293 vs. 21114 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 --bsr25 --lazy --ohh

(found April 13, 2016)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 2  --mls2
block splitting recursion 25  --bsr25
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

Even Smaller Files Thanks To Defluff

Zopfli's output can be further optimized by the defluff tool.
In this particular case, defluff saves 1 more byte (20292 bytes).

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.4.0/dist/lodash.min.js --location | md5sum
84244080bb80c86338b32a9d37ec495f  -
curl --silent --compressed https://minime.stephan-brumme.com/files/lodash/lodash-4.4.0.min.zopfli.js.gz | md5sum
84244080bb80c86338b32a9d37ec495f  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
jsdelivr 21114 bytes 84244080bb80c86338b32a9d37ec495f (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Boot 37592 bytes c1fce7946f14bf7569e1d8595b62779b < /**
< * @license
< * lodash 4.4.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=-1,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,u){return u(n,function(n,u,o){ [...]
< return r}function k(n,t){for(var r=n.length;r--&&-1<d(t,n[ [...]
[...]
(invalid)
cdnjs 30940 bytes c1fce7946f14bf7569e1d8595b62779b < /**
< * @license
< * lodash 4.4.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=-1,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,u){return u(n,function(n,u,o){ [...]
< return r}function k(n,t){for(var r=n.length;r--&&-1<d(t,n[ [...]
[...]
(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
20293 bytes -3 bytes zopfli --i100000 --mls2 --bsr25 --lazy --ohh April 13, 2016 @ 13:44
20296 bytes -3 bytes zopfli --i10000 --mls2 --bsr25 --lazy --ohh April 13, 2016 @ 12:57
20299 bytes -1 byte zopfli --i10000 --mls16 --bsr14 --lazy --ohh April 12, 2016 @ 18:22
20300 bytes -3 bytes zopfli --i10000 --mls512 --bsr21 --lazy --ohh April 12, 2016 @ 15:54
20303 bytes -6 bytes zopfli --i1000 --mls512 --bsr21 --lazy --ohh April 12, 2016 @ 10:40
20309 bytes zopfli --i100 --mls512 --bsr40 --lazy --ohh April 12, 2016 @ 02:42

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 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
20307 20306 20333 20352 20336 20354 20354 20352 20349 20345 20340 20331 20329 20342 20348
20305 20302 20305 20308 20310 20310 20314 20313 20299 20307 20318 20315 20323 20328 20307
20299 20303 20301 20307 20304 20308 20319 20324 20308 20316 20327 20323 20306 20316 20308
20300 20303 20300 20303 20301 20300 20305 20301 20299 20311 20305 20306 20304 20301 20303
20299 20299 20303 20302 20303 20299 20301 20300 20300 20309 20305 20322 20320 20305 20306
20311 20302 20302 20315 20304 20299 20301 20299 20307 20301 20322 20320 20305 20307 20300
20303 20311 20303 20310 20308 20304 20305 20301 20301 20308 20315 20323 20304 20306 20303
20301 20302 20302 20303 20305 20300 20300 20310 20302 20307 20303 20322 20320 20303 20302
20302 20304 20302 20307 20305 20303 20303 20300 20299 20310 20305 20319 20300 20301 20305
20302 20301 20302 20305 20303 20302 20301 20304 20302 20306 20303 20322 20325 20304 20309
20300 20300 20309 20299 20304 20301 20308 20308 20306 20307 20322 20319 20320 20306 20303
20301 20300 20303 20302 20304 20300 20301 20309 20307 20308 20299 20321 20302 20301 20306
20316 20317 20299 20304 20305 20302 20302 20300 20302 20306 20304 20319 20304 20304 20304
20301 20302 20298 20307 20304 20301 20310 20308 20308 20310 20299 20319 20300 20302 20303
20301 20301 20303 20303 20302 20301 20313 20300 20309 20309 20304 20320 20320 20302 20303
20299 20304 20302 20303 20304 20299 20309 20300 20298 20301 20304 20323 20305 20322 20305
20301 20301 20304 20302 20303 20300 20304 20300 20308 20301 20307 20319 20304 20304 20303
20303 20303 20303 20299 20302 20301 20311 20302 20300 20308 20310 20322 20319 20307 20303
20299 20300 20299 20302 20302 20299 20301 20300 20304 20307 20304 20322 20323 20306 20302
20301 20300 20305 20302 20305 20301 20302 20300 20306 20309 20301 20324 20323 20304 20302
20293 20299 20303 20303 20304 20300 20302 20309 20308 20308 20306 20322 20302 20306 20305
20303 20302 20302 20305 20303 20299 20301 20300 20300 20308 20299 20321 20324 20301 20302
20303 20303 20303 20304 20305 20301 20304 20301 20301 20299 20302 20318 20302 20305 20302

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 20309 bytes 100%
1,000 20301 bytes -8 bytes 100%
10,000 20296 bytes -5 bytes 100%
100,000 20293 bytes -3 bytes 0.29%
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
20388 bytes +95 bytes (+0.47%) +8 bytes
20450 bytes +157 bytes (+0.77%) +70 bytes
20380 bytes +87 bytes (+0.43%)
20386 bytes +93 bytes (+0.46%) +6 bytes
20392 bytes +99 bytes (+0.49%) +12 bytes
20400 bytes +107 bytes (+0.53%) +20 bytes
20423 bytes +130 bytes (+0.64%) +43 bytes
20435 bytes +142 bytes (+0.70%) +55 bytes
20451 bytes +158 bytes (+0.78%) +71 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 17191 bytes -3102 bytes (-15.29%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 17538 bytes -2755 bytes (-13.58%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 18644 bytes -1649 bytes (-8.13%)
Brotli (Wikipedia) brotli brotli -q 11 19144 bytes -1149 bytes (-5.66%)
LZMA2 (Wikipedia) xz xz -9 19568 bytes -725 bytes (-3.57%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 19675 bytes -618 bytes (-3.05%)
Zstandard (Wikipedia) zstd zstd -19 20184 bytes -109 bytes (-0.54%)

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.