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

After GZIP compression these minified files vary in size:
gzip -6 (default)
  56521 bytes (55.2k)
local copy
gzip -9
  56452 bytes (55.1k)
local copy
libdeflate -12
  53784 bytes (52.5k)
local copy
7zip -mx=9 -tgzip
  53762 bytes (52.5k)
local copy
kzip -s0 -rn -b1
  53685 bytes (52.4k)
local copy
pigz -11 -n
  53675 bytes (52.4k)
local copy
Zopfli
  53595 bytes (52.3k)
local copy
cdnjs
  22885 bytes (22.3k)
CDN

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

You will automatically get the smallest Dojo 1.16.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 --i1000000 --mb8 --mls128 --bsr14 --lazy --ohh

(found June 17, 2020)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 128  --mls128
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

Even Smaller Files Thanks To Defluff

Zopfli's output can be further optimized by the defluff tool.
In this particular case, defluff saves 4 more bytes (53591 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.16.3/dojo.js --location | md5sum
d2357caa15572d8991a023bc84e3aaa4  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.16.3.min.zopfli.js.gz | md5sum
d2357caa15572d8991a023bc84e3aaa4  -

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

cdn/dojo/dojo-1.16.3.min.js.gz.cdnjs not found
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp

Note: only the MD5 hashes are shown to keep things simple.

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
53595 bytes -2 bytes zopfli --i1000000 --mls128 --bsr14 --lazy --ohh June 17, 2020 @ 15:57
53597 bytes -1 byte zopfli --i100000 --mls128 --bsr40 --lazy --ohh June 17, 2020 @ 08:03
53598 bytes -4 bytes zopfli --i100000 --mls256 --bsr9 --lazy --ohh June 17, 2020 @ 08:02
53602 bytes -3 bytes zopfli --i10000 --mls256 --bsr9 --lazy --ohh June 15, 2020 @ 15:43
53605 bytes -5 bytes zopfli --i10000 --mls1024 --bsr2 --lazy --ohh June 15, 2020 @ 15:12
53610 bytes -2 bytes zopfli --i1000 --mls128 --bsr6 --lazy --ohh June 15, 2020 @ 12:49
53612 bytes -1 byte zopfli --i1000 --mls128 --bsr2 --lazy --ohh June 15, 2020 @ 12:40
53613 bytes zopfli --i100 --mls16 --bsr20 --lazy --ohh June 15, 2020 @ 11:29

If there are multiple parameter sets yielding the same compressed size, only the first one found is shown.

Most recent activity on June 18, 2020 @ 16:05.

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
53605 53622 53605 53610 53604 53607 53605 53603 53607 53605 53608 53609 53608 53631 53625
53630 53639 53609 53609 53617 53614 53604 53604 53614 53606 53612 53608 53617 53625 53614
53648 53608 53604 53606 53616 53618 53605 53613 53617 53619 53620 53634 53621 53622 53615
53631 53638 53640 53635 53609 53613 53604 53615 53612 53621 53616 53608 53623 53609 53618
53633 53629 53642 53608 53608 53620 53603 53607 53617 53622 53621 53622 53620 53620 53618
53615 53610 53609 53606 53609 53607 53604 53598 53613 53613 53619 53621 53616 53625 53607
53604 53621 53607 53640 53608 53620 53606 53605 53613 53617 53618 53610 53615 53610 53622
53621 53619 53609 53637 53607 53606 53603 53604 53613 53613 53615 53611 53615 53625 53619
53630 53628 53636 53642 53604 53606 53604 53608 53613 53613 53620 53622 53615 53617 53625
53634 53640 53604 53606 53607 53614 53603 53607 53617 53616 53617 53611 53615 53618 53615
53619 53620 53634 53643 53604 53610 53595 53605 53613 53614 53615 53628 53616 53617 53617
53620 53619 53608 53632 53605 53614 53603 53614 53613 53614 53621 53610 53616 53624 53617
53631 53637 53632 53605 53606 53620 53615 53613 53613 53613 53616 53613 53614 53626 53615
53639 53639 53634 53643 53609 53608 53603 53614 53613 53619 53625 53627 53615 53618 53618
53607 53637 53607 53636 53605 53607 53603 53608 53613 53613 53618 53622 53617 53620 53623
53634 53632 53608 53606 53606 53628 53603 53598 53614 53614 53622 53627 53616 53619 53618
53619 53637 53636 53607 53606 53606 53603 53612 53613 53613 53622 53622 53616 53622 53623
53636 53642 53636 53642 53606 53612 53615 53606 53613 53613 53623 53621 53616 53624 53622
53628 53618 53612 53611 53604 53612 53603 53621 53613 53614 53616 53628 53615 53622 53617
53623 53632 53604 53641 53605 53615 53603 53613 53613 53612 53622 53625 53616 53626 53618
53635 53630 53631 53637 53604 53613 53617 53606 53613 53614 53617 53627 53616 53623 53626
53628 53634 53634 53643 53609 53618 53617 53614 53613 53614 53622 53622 53615 53622 53615
53633 53633 53630 53641 53606 53619 53596 53622 53613 53613 53615 53623 53614 53623 53619

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 53613 bytes 100%
1,000 53610 bytes -3 bytes 100%
10,000 53602 bytes -8 bytes 100%
100,000 53597 bytes -5 bytes 1.16%
1,000,000 53595 bytes -2 bytes 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
53765 bytes +170 bytes (+0.32%) +80 bytes
53685 bytes +90 bytes (+0.17%)
53707 bytes +112 bytes (+0.21%) +22 bytes
53730 bytes +135 bytes (+0.25%) +45 bytes
53757 bytes +162 bytes (+0.30%) +72 bytes
53787 bytes +192 bytes (+0.36%) +102 bytes
53840 bytes +245 bytes (+0.46%) +155 bytes
53848 bytes +253 bytes (+0.47%) +163 bytes
53841 bytes +246 bytes (+0.46%) +156 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 39400 bytes -14195 bytes (-26.49%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 47040 bytes -6555 bytes (-12.23%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 47974 bytes -5621 bytes (-10.49%)
Brotli (Wikipedia) brotli brotli -q 11 49500 bytes -4095 bytes (-7.64%)
LZMA2 (Wikipedia) xz xz -9 50552 bytes -3043 bytes (-5.68%)
Zstandard (Wikipedia) zstd zstd -19 51923 bytes -1672 bytes (-3.12%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 52120 bytes -1475 bytes (-2.75%)

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.