Choose a version:
26% The original file has 639077 bytes (624.1k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 167776 bytes (163.8k, 26%).

After GZIP compression these minified files vary in size:
gzip -6 (default)
  56363 bytes (55.0k)
local copy
gzip -9
  56294 bytes (55.0k)
local copy
libdeflate -12
  53620 bytes (52.4k)
local copy
7zip -mx=9 -tgzip
  53598 bytes (52.3k)
local copy
zultra
  53532 bytes (52.3k)
local copy
kzip -s0 -rn -b1
  53526 bytes (52.3k)
local copy
pigz -11 -n
  53524 bytes (52.3k)
local copy
Zopfli
  53436 bytes (52.2k)
local copy
Zopfli (defluff)
  53434 bytes (52.2k)
local copy

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

You will automatically get the smallest Dojo 1.15.3 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

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 --mls128 --bsr15 --lazy --ohh

(found March 18, 2020)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 128  --mls128
block splitting recursion 15  --bsr15
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 2 more bytes (53434 bytes).

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://download.dojotoolkit.org/release-1.15.3/dojo.js --location | md5sum
0d61ce44259a3dcd210a8807161a3db9  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.15.3.min.zopfli.js.gz | md5sum
0d61ce44259a3dcd210a8807161a3db9  -

SHA1:
curl --silent --compressed https://download.dojotoolkit.org/release-1.15.3/dojo.js --location | sha1sum
1056c10899868bf060e49bb2c3bb9fd8a1145537  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.15.3.min.zopfli.js.gz | sha1sum
1056c10899868bf060e49bb2c3bb9fd8a1145537  -

Other Versions

Available Dojo versions at minime.stephan-brumme.com:

1.16.3, 1.16.2, 1.16.1, 1.16.0,
1.15.4, 1.15.3, 1.15.2, 1.15.1, 1.15.0,
1.14.7, 1.14.6, 1.14.5, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14.0,
1.13.5, 1.13.4, 1.13.3, 1.13.2, 1.13.1, 1.13.0,
1.12.5, 1.12.4, 1.12.3, 1.12.2, 1.12.1,
1.11.8, 1.11.7, 1.11.6, 1.11.5, 1.11.4, 1.11.3, 1.11.2, 1.11.1, 1.11.0,
1.10.10, 1.10.9, 1.10.8, 1.10.7, 1.10.6, 1.10.5, 1.10.4, 1.10.3, 1.10.2, 1.10.1, 1.10.0,
1.9.11, 1.9.10, 1.9.9, 1.9.8, 1.9.7, 1.9.6, 1.9.5, 1.9.4, 1.9.3, 1.9.2, 1.9.1, 1.9.0,
1.8.14, 1.8.13, 1.8.12, 1.8.11, 1.8.10, 1.8.9, 1.8.8, 1.8.7, 1.8.6, 1.8.5, 1.8.4, 1.8.3, 1.8.2, 1.8.1, 1.8.0,
1.7.12, 1.7.11, 1.7.10, 1.7.9, 1.7.8, 1.7.7, 1.7.6, 1.7.5, 1.7.4, 1.7.3, 1.7.2, 1.7.1, 1.7.0,
1.6.5, 1.6.4, 1.6.3, 1.6.2, 1.6.1, 1.6.0,
1.5.6, 1.5.5, 1.5.4, 1.5.3, 1.5.2, 1.5.1, 1.5.0,
1.4.8, 1.4.7, 1.4.6, 1.4.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4.0,
1.3.3, 1.3.2, 1.3.1, 1.3.0,
1.2.3, 1.2.2

The project site contains an overview how well these versions were compressed.
Other interesting projects are AngularJS, BackboneJS, Bootstrap, D3, Ember, jQuery, Knockout, lodash, React, Socket.IO, ThreeJS, UnderscoreJS and Vue.

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
53436 bytes -1 byte zopfli --i100000 --mls128 --bsr15 --lazy --ohh March 18, 2020 @ 10:25
53437 bytes -2 bytes zopfli --i100000 --mls256 --bsr2 --lazy --ohh March 18, 2020 @ 09:03
53439 bytes -4 bytes zopfli --i10000 --mls256 --bsr2 --lazy --ohh March 17, 2020 @ 13:11
53443 bytes -3 bytes zopfli --i10000 --mls8192 --bsr20 --lazy --ohh March 17, 2020 @ 12:51
53446 bytes -2 bytes zopfli --i10000 --mls8 --bsr10 --lazy --ohh March 17, 2020 @ 12:29
53448 bytes -1 byte zopfli --i1000 --mls4 --bsr18 --lazy --ohh March 17, 2020 @ 11:23
53449 bytes -2 bytes zopfli --i1000 --mls8192 --bsr9 --lazy --ohh March 17, 2020 @ 11:07
53451 bytes -1 byte zopfli --i1000 --mls8192 --bsr20 --lazy --ohh March 17, 2020 @ 10:49
53452 bytes -1 byte zopfli --i1000 --mls256 --bsr13 --lazy --ohh March 17, 2020 @ 10:38
53453 bytes -1 byte zopfli --i1000 --mls32 --bsr8 --lazy --ohh March 17, 2020 @ 10:30
53454 bytes -1 byte zopfli --i1000 --mls2 --bsr11 --lazy --ohh March 17, 2020 @ 10:30
53455 bytes zopfli --i100 --mls8192 --bsr9 --lazy --ohh March 17, 2020 @ 10:03

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

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
53480 53443 53444 53444 53444 53445 53444 53437 53465 53457 53448 53447 53448 53477 53453
53488 53478 53449 53445 53454 53458 53445 53443 53454 53447 53466 53450 53448 53474 53449
53479 53479 53443 53442 53449 53459 53437 53453 53454 53453 53459 53467 53452 53462 53455
53475 53443 53485 53481 53444 53456 53443 53445 53452 53450 53461 53450 53456 53468 53451
53481 53472 53490 53483 53445 53453 53444 53442 53462 53460 53464 53444 53445 53462 53460
53450 53473 53447 53444 53442 53447 53445 53441 53452 53455 53466 53444 53442 53467 53453
53443 53443 53446 53480 53445 53443 53453 53443 53453 53454 53455 53451 53444 53461 53456
53443 53443 53446 53443 53444 53442 53444 53443 53452 53453 53455 53444 53450 53451 53454
53475 53444 53475 53451 53444 53442 53443 53441 53453 53455 53464 53451 53449 53465 53454
53476 53474 53442 53489 53445 53456 53441 53444 53453 53449 53455 53444 53443 53462 53459
53443 53485 53487 53451 53447 53446 53441 53445 53453 53457 53455 53449 53453 53465 53452
53474 53480 53442 53446 53457 53459 53436 53443 53453 53452 53465 53451 53444 53461 53455
53473 53480 53475 53486 53444 53453 53441 53454 53456 53451 53455 53459 53457 53462 53455
53480 53447 53479 53492 53443 53453 53441 53453 53453 53451 53459 53444 53450 53463 53452
53476 53442 53442 53478 53444 53443 53441 53452 53453 53453 53457 53449 53450 53459 53463
53475 53444 53442 53444 53447 53458 53442 53444 53457 53454 53458 53445 53444 53461 53453
53476 53444 53442 53445 53444 53458 53441 53452 53453 53453 53465 53449 53443 53463 53455
53474 53444 53442 53443 53448 53446 53455 53442 53453 53453 53459 53457 53443 53463 53450
53467 53484 53446 53478 53444 53464 53441 53443 53457 53452 53455 53444 53453 53460 53452
53443 53446 53443 53444 53443 53457 53441 53453 53452 53451 53461 53445 53447 53452 53449
53473 53473 53443 53443 53443 53445 53442 53453 53455 53455 53455 53456 53457 53462 53458
53473 53443 53443 53444 53447 53457 53441 53453 53452 53452 53458 53444 53449 53463 53451
53474 53484 53448 53444 53443 53459 53441 53453 53453 53453 53460 53456 53449 53462 53453

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 53455 bytes 100%
1,000 53448 bytes -7 bytes 100%
10,000 53439 bytes -9 bytes 100%
100,000 53436 bytes -3 bytes 0.87%
1,000,000 53436 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
53611 bytes +175 bytes (+0.33%) +85 bytes
53526 bytes +90 bytes (+0.17%)
53555 bytes +119 bytes (+0.22%) +29 bytes
53587 bytes +151 bytes (+0.28%) +61 bytes
53611 bytes +175 bytes (+0.33%) +85 bytes
53616 bytes +180 bytes (+0.34%) +90 bytes
53603 bytes +167 bytes (+0.31%) +77 bytes
53647 bytes +211 bytes (+0.39%) +121 bytes
53676 bytes +240 bytes (+0.45%) +150 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 - for example, your browser actually supports it !
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 39287 bytes -14149 bytes (-26.48%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 46919 bytes -6517 bytes (-12.20%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 47836 bytes -5600 bytes (-10.48%)
Brotli (Wikipedia) brotli brotli -q 11 49404 bytes -4032 bytes (-7.55%)
LZMA2 (Wikipedia) xz xz -9 50432 bytes -3004 bytes (-5.62%)
Zstandard (Wikipedia) zstd zstd -19 51755 bytes -1681 bytes (-3.15%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 52064 bytes -1372 bytes (-2.57%)

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 2020.
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.