Choose a version:
14% The original file has 539838 bytes (527.2k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 73156 bytes (71.4k, 14%).

After GZIP compression these minified files vary in size:
Boot
  25485 bytes (24.9k)
CDN
cdnjs
  24593 bytes (24.0k)
CDN
unpkg
  24422 bytes (23.8k)
CDN
gzip -6 (default)
  24393 bytes (23.8k)
local copy
gzip -9
  24324 bytes (23.8k)
local copy
7zip -mx=9 -tgzip
  23494 bytes (22.9k)
local copy
libdeflate -12
  23487 bytes (22.9k)
local copy
zultra
  23434 bytes (22.9k)
local copy
kzip -s0 -rn -b3
  23411 bytes (22.9k)
local copy
pigz -11 -n
  23394 bytes (22.8k)
local copy
Zopfli
  23336 bytes (22.8k)
local copy

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

You will automatically get the smallest lodash 4.17.10 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 1086 bytes by using my lodash 4.17.10 Zopfli version instead of the best available CDN (4.65% smaller than unpkg, 23336 vs. 24422 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 --mls8 --bsr22 --lazy --ohh

(found July 5, 2018)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 8  --mls8
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.17.10/dist/lodash.min.js --location | md5sum
51a949e651144b8e525d4b2d913e6215  -
curl --silent --compressed https://minime.stephan-brumme.com/files/lodash/lodash-4.17.10.min.zopfli.js.gz | md5sum
51a949e651144b8e525d4b2d913e6215  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 25485 bytes 51a949e651144b8e525d4b2d913e6215 (invalid)
cdnjs 24593 bytes 51a949e651144b8e525d4b2d913e6215 (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
unpkg 24422 bytes 19b988e43053f61d1be63a6dc5bc120e only whitespaces differ (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
23336 bytes -1 byte zopfli --i100000 --mls8 --bsr22 --lazy --ohh July 5, 2018 @ 17:34
23337 bytes -2 bytes zopfli --i10000 --mls8 --bsr22 --lazy --ohh July 5, 2018 @ 16:54
23339 bytes -1 byte zopfli --i1000 --mls8 --bsr22 --lazy --ohh July 5, 2018 @ 16:24
23340 bytes -6 bytes zopfli --i1000 --mls8 --bsr12 --lazy --ohh July 5, 2018 @ 16:23
23346 bytes zopfli --i100 --mls8 --bsr12 --lazy --ohh July 5, 2018 @ 16:06

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

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
23390 23385 23377 23380 23383 23383 23381 23381 23379 23404 23389 23371 23373 23377 23376
23366 23402 23368 23371 23369 23380 23367 23371 23402 23365 23368 23366 23369 23361 23371
23368 23366 23367 23350 23351 23348 23350 23359 23365 23350 23368 23366 23365 23348 23363
23350 23350 23367 23375 23374 23351 23360 23358 23362 23409 23412 23367 23361 23351 23364
23365 23353 23358 23366 23371 23366 23361 23360 23364 23359 23359 23359 23360 23349 23363
23366 23352 23381 23389 23377 23377 23349 23364 23362 23362 23366 23350 23360 23352 23350
23353 23355 23376 23375 23365 23364 23349 23356 23366 23361 23360 23358 23360 23349 23353
23366 23366 23371 23378 23375 23364 23373 23370 23369 23362 23387 23408 23365 23351 23363
23349 23350 23338 23349 23360 23358 23350 23356 23362 23347 23374 23364 23366 23349 23363
23366 23368 23372 23375 23389 23365 23366 23378 23369 23356 23363 23373 23350 23349 23358
23351 23352 23377 23350 23350 23349 23351 23360 23362 23359 23361 23367 23362 23374 23363
23351 23349 23365 23375 23376 23349 23358 23361 23361 23361 23363 23364 23362 23351 23364
23370 23366 23338 23366 23379 23350 23360 23348 23348 23347 23387 23360 23359 23349 23350
23351 23349 23351 23389 23379 23376 23372 23373 23365 23358 23348 23364 23359 23351 23351
23365 23351 23353 23374 23364 23350 23361 23360 23365 23357 23357 23366 23351 23351 23357
23365 23366 23372 23380 23371 23373 23373 23373 23358 23360 23364 23360 23350 23374 23365
23351 23351 23359 23360 23366 23360 23360 23359 23362 23364 23365 23408 23359 23350 23351
23366 23371 23359 23365 23367 23350 23361 23356 23368 23362 23349 23362 23358 23352 23364
23365 23365 23336 23380 23375 23361 23369 23349 23362 23363 23364 23363 23350 23374 23349
23350 23352 23341 23374 23362 23350 23368 23362 23361 23363 23386 23409 23360 23350 23348
23351 23351 23372 23392 23377 23350 23358 23361 23362 23397 23357 23363 23358 23375 23349
23351 23351 23364 23365 23362 23360 23349 23356 23362 23359 23349 23411 23360 23351 23349
23365 23366 23366 23376 23376 23362 23347 23347 23369 23357 23365 23367 23349 23351 23354

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 23346 bytes 100%
1,000 23339 bytes -7 bytes 100%
10,000 23337 bytes -2 bytes 100%
100,000 23336 bytes -1 byte 0.87%
1,000,000 23336 bytes 0.29%
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
23434 bytes +98 bytes (+0.42%) +23 bytes
23584 bytes +248 bytes (+1.06%) +173 bytes
23463 bytes +127 bytes (+0.54%) +52 bytes
23411 bytes +75 bytes (+0.32%)
23428 bytes +92 bytes (+0.39%) +17 bytes
23434 bytes +98 bytes (+0.42%) +23 bytes
23429 bytes +93 bytes (+0.40%) +18 bytes
23452 bytes +116 bytes (+0.50%) +41 bytes
23478 bytes +142 bytes (+0.61%) +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 19574 bytes -3762 bytes (-16.12%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 20226 bytes -3110 bytes (-13.33%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 21019 bytes -2317 bytes (-9.93%)
Brotli (Wikipedia) brotli brotli -q 11 21811 bytes -1525 bytes (-6.53%)
LZMA2 (Wikipedia) xz xz -9 22316 bytes -1020 bytes (-4.37%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 22560 bytes -776 bytes (-3.33%)
Zstandard (Wikipedia) zstd zstd -19 23127 bytes -209 bytes (-0.90%)

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.