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

After GZIP compression these minified files vary in size:
Boot
  27266 bytes (26.6k)
CDN
cdnjs
  24230 bytes (23.7k)
CDN
gzip -6 (default)
  23065 bytes (22.5k)
local copy
unpkg
  23028 bytes (22.5k)
CDN
jsdelivr
  23004 bytes (22.5k)
CDN
gzip -9
  22993 bytes (22.5k)
local copy
libdeflate -12
  22320 bytes (21.8k)
local copy
7zip -mx=9 -tgzip
  22263 bytes (21.7k)
local copy
zultra
  22257 bytes (21.7k)
local copy
kzip -s0 -rn -b4
  22244 bytes (21.7k)
local copy
pigz -11 -n
  22218 bytes (21.7k)
local copy
Zopfli
  22170 bytes (21.7k)
local copy

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

You will automatically get the smallest lodash 4.14.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 834 bytes by using my lodash 4.14.0 Zopfli version instead of the best available CDN (3.76% smaller than jsdelivr, 22170 vs. 23004 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 --mls32 --bsr21 --lazy --ohh

(found July 26, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 32  --mls32
block splitting recursion 21  --bsr21
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.14.0/dist/lodash.min.js --location | md5sum
ba3602241b0cceab2c43466efb2cdcbe  -
curl --silent --compressed https://minime.stephan-brumme.com/files/lodash/lodash-4.14.0.min.zopfli.js.gz | md5sum
ba3602241b0cceab2c43466efb2cdcbe  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 23028 bytes ba3602241b0cceab2c43466efb2cdcbe July 25, 2016 @ 10:33
jsdelivr 23004 bytes ba3602241b0cceab2c43466efb2cdcbe (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Boot 27266 bytes 5afd805c3412a5fd37ff98276450ff10 < /**
< * @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 i(t,n){for(var r=-1,e=t?t.length:0;++r<e [...]
< var u=-1,o=t?t.length:0;for(e&&o&&(r=t[++u]);++u<o;)r=n(r, [...]
< return-1}function y(t,n,r,e){--r;for(var u=t.length;++r<u; [...]
< }return r}function k(t,n){for(var r=-1,e=Array(t);++r<t;)e [...]
< n=!!(t+"")}catch(t){}return n}function L(t){for(var n,r=[] [...]
[...]
July 25, 2016 @ 10:56
cdnjs 24230 bytes 5afd805c3412a5fd37ff98276450ff10 < /**
< * @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 i(t,n){for(var r=-1,e=t?t.length:0;++r<e [...]
< var u=-1,o=t?t.length:0;for(e&&o&&(r=t[++u]);++u<o;)r=n(r, [...]
< return-1}function y(t,n,r,e){--r;for(var u=t.length;++r<u; [...]
< }return r}function k(t,n){for(var r=-1,e=Array(t);++r<t;)e [...]
< n=!!(t+"")}catch(t){}return n}function L(t){for(var n,r=[] [...]
[...]
(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
22170 bytes -1 byte zopfli --i1000000 --mls32 --bsr21 --lazy --ohh July 26, 2016 @ 16:40
22171 bytes -5 bytes zopfli --i100000 --mls32 --bsr21 --lazy --ohh July 25, 2016 @ 11:45
22176 bytes -3 bytes zopfli --i10000 --mls32 --bsr21 --lazy --ohh July 25, 2016 @ 11:05
22179 bytes -10 bytes zopfli --i1000 --mls32 --bsr21 --lazy --ohh July 25, 2016 @ 11:01
22189 bytes zopfli --i100 --mls512 --bsr9 --lazy --ohh July 25, 2016 @ 10:56

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

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
22210 22212 22209 22213 22219 22219 22214 22215 22217 22216 22215 22217 22216 22213 22221
22184 22180 22185 22187 22204 22191 22207 22196 22190 22201 22200 22195 22196 22211 22195
22191 22199 22209 22204 22207 22208 22204 22189 22189 22204 22195 22196 22181 22207 22202
22180 22190 22196 22192 22189 22194 22178 22191 22194 22178 22203 22182 22179 22210 22195
22193 22196 22193 22189 22201 22187 22197 22189 22176 22170 22204 22195 22191 22213 22195
22186 22191 22182 22189 22181 22189 22195 22195 22173 22190 22193 22195 22194 22197 22199
22180 22195 22188 22199 22173 22187 22195 22191 22190 22188 22195 22190 22178 22193 22194
22189 22198 22201 22205 22187 22189 22194 22194 22176 22180 22201 22190 22181 22210 22200
22195 22200 22188 22197 22188 22200 22197 22204 22172 22194 22197 22197 22182 22206 22194
22193 22196 22187 22203 22188 22183 22184 22190 22177 22190 22194 22196 22191 22192 22200
22182 22191 22193 22202 22187 22179 22186 22201 22188 22188 22202 22194 22182 22194 22196
22186 22195 22186 22193 22194 22192 22184 22191 22180 22173 22201 22195 22196 22209 22200
22187 22192 22191 22200 22200 22181 22193 22190 22173 22186 22202 22195 22181 22181 22193
22189 22198 22196 22201 22194 22192 22196 22189 22190 22188 22203 22197 22193 22192 22193
22189 22197 22194 22179 22184 22194 22182 22192 22188 22176 22195 22198 22193 22192 22201
22184 22195 22197 22190 22187 22179 22189 22191 22172 22178 22195 22184 22181 22194 22184
22192 22191 22192 22191 22190 22195 22196 22183 22191 22172 22197 22191 22181 22191 22182
22194 22200 22199 22194 22170 22181 22184 22188 22172 22178 22195 22191 22181 22196 22199
22188 22201 22198 22195 22189 22181 22195 22190 22176 22186 22194 22195 22184 22212 22200
22188 22199 22188 22191 22195 22201 22195 22182 22173 22179 22182 22191 22179 22193 22198
22194 22196 22196 22194 22189 22183 22192 22192 22187 22187 22195 22196 22188 22210 22196
22193 22191 22198 22177 22194 22195 22195 22190 22188 22179 22201 22190 22180 22208 22199
22187 22193 22196 22174 22190 22190 22195 22176 22176 22189 22184 22191 22179 22193 22184

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 22189 bytes 100%
1,000 22178 bytes -11 bytes 100%
10,000 22173 bytes -5 bytes 100%
100,000 22171 bytes -2 bytes 3.48%
1,000,000 22170 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
22259 bytes +89 bytes (+0.40%) +15 bytes
22323 bytes +153 bytes (+0.69%) +79 bytes
22252 bytes +82 bytes (+0.37%) +8 bytes
22259 bytes +89 bytes (+0.40%) +15 bytes
22244 bytes +74 bytes (+0.33%)
22266 bytes +96 bytes (+0.43%) +22 bytes
22276 bytes +106 bytes (+0.48%) +32 bytes
22304 bytes +134 bytes (+0.60%) +60 bytes
22327 bytes +157 bytes (+0.71%) +83 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 18709 bytes -3461 bytes (-15.61%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 19069 bytes -3101 bytes (-13.99%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 19473 bytes -2697 bytes (-12.17%)
Brotli (Wikipedia) brotli brotli -q 11 20840 bytes -1330 bytes (-6.00%)
LZMA2 (Wikipedia) xz xz -9 21300 bytes -870 bytes (-3.92%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 21437 bytes -733 bytes (-3.31%)
Zstandard (Wikipedia) zstd zstd -19 22022 bytes -148 bytes (-0.67%)

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.