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

After GZIP compression these minified files vary in size:
gzip -6 (default)
  54789 bytes (53.5k)
local copy
gzip -9
  54739 bytes (53.5k)
local copy
libdeflate -12
  52081 bytes (50.9k)
local copy
7zip -mx=9 -tgzip
  52061 bytes (50.8k)
local copy
pigz -11 -n
  52052 bytes (50.8k)
local copy
zultra
  52039 bytes (50.8k)
local copy
kzip -s0 -rn -b1
  52022 bytes (50.8k)
local copy
Zopfli
  51930 bytes (50.7k)
local copy
Zopfli (defluff)
  51926 bytes (50.7k)
local copy

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

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

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 --mls64 --bsr12 --lazy --ohh

(found December 19, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 64  --mls64
block splitting recursion 12  --bsr12
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 (51926 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.9.10/dojo.js --location | md5sum
232915e1bf297b39353876f68465f21a  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.9.10.min.zopfli.js.gz | md5sum
232915e1bf297b39353876f68465f21a  -

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

Other Versions

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

1.17.3, 1.17.2, 1.17.1, 1.17.0,
1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16.0,
1.15.6, 1.15.5, 1.15.4, 1.15.3, 1.15.2, 1.15.1, 1.15.0,
1.14.9, 1.14.8, 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.10, 1.13.9, 1.13.8, 1.13.7, 1.13.6, 1.13.5, 1.13.4, 1.13.3, 1.13.2, 1.13.1, 1.13.0,
1.12.11, 1.12.10, 1.12.9, 1.12.8, 1.12.7, 1.12.6, 1.12.5, 1.12.4, 1.12.3, 1.12.2, 1.12.1,
1.11.13, 1.11.12, 1.11.11, 1.11.10, 1.11.9, 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
51930 bytes -3 bytes zopfli --i1000000 --mls64 --bsr12 --lazy --ohh December 19, 2016 @ 22:21
51933 bytes -1 byte zopfli --i100000 --mls64 --bsr12 --lazy --ohh December 19, 2016 @ 08:09
51934 bytes -2 bytes zopfli --i100000 --mls16 --bsr25 --lazy --ohh December 19, 2016 @ 02:46
51936 bytes -10 bytes zopfli --i100000 --mls16 --bsr9 --lazy --ohh December 19, 2016 @ 00:35
51946 bytes -5 bytes zopfli --i10000 --mls16 --bsr14 --lazy --ohh December 18, 2016 @ 22:49
51951 bytes -7 bytes zopfli --i1000 --mls32 --bsr18 --lazy --ohh December 18, 2016 @ 22:36
51958 bytes zopfli --i100 --mls32 --bsr18 --lazy --ohh December 18, 2016 @ 22:30

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
51952 51949 51948 51951 51951 51952 51948 51948 51967 51966 51967 51966 51970 51967 51965
51962 51957 51949 51948 51949 51963 51956 51957 51952 51962 51959 51958 51959 51964 51954
51961 51957 51957 51948 51960 51947 51959 51957 51952 51958 51952 51957 51962 51969 51966
51981 51958 51964 51947 51951 51945 51959 51947 51958 51957 51950 51958 51963 51956 51965
51957 51966 51959 51936 51934 51946 51947 51936 51957 51959 51950 51962 51957 51959 51957
51947 51950 51947 51936 51954 51950 51949 51955 51947 51950 51950 51965 51962 51951 51960
51949 51957 51947 51947 51948 51951 51947 51948 51955 51963 51957 51960 51963 51957 51957
51947 51951 51949 51952 51953 51947 51951 51946 51946 51956 51950 51950 51963 51970 51957
51949 51951 51949 51947 51954 51930 51949 51947 51946 51957 51955 51959 51965 51951 51958
51960 51958 51957 51947 51953 51959 51947 51955 51946 51955 51945 51957 51957 51958 51966
51947 51953 51947 51946 51948 51949 51947 51946 51948 51947 51950 51957 51962 51956 51966
51947 51958 51947 51946 51954 51959 51946 51956 51948 51956 51957 51957 51963 51955 51965
51956 51958 51957 51949 51948 51948 51950 51957 51953 51947 51941 51960 51963 51951 51960
51948 51962 51947 51946 51946 51948 51949 51946 51954 51966 51950 51955 51961 51953 51954
51957 51957 51957 51946 51946 51960 51948 51955 51946 51951 51941 51948 51964 51966 51959
51957 51958 51957 51949 51948 51957 51949 51955 51953 51956 51952 51955 51964 51951 51957
51947 51958 51951 51946 51953 51947 51947 51946 51947 51957 51950 51961 51963 51966 51950
51947 51950 51947 51949 51948 51949 51963 51947 51953 51957 51950 51958 51957 51956 51958
51955 51958 51949 51946 51953 51960 51952 51956 51952 51958 51955 51956 51956 51955 51968
51946 51958 51957 51948 51947 51949 51953 51947 51946 51959 51950 51957 51963 51952 51957
51958 51959 51957 51934 51948 51948 51951 51954 51947 51959 51952 51956 51961 51964 51958
51935 51950 51957 51947 51953 51946 51949 51955 51948 51963 51942 51957 51964 51967 51948
51960 51961 51948 51946 51953 51948 51947 51950 51946 51956 51951 51957 51962 51956 51961

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 51958 bytes 100%
1,000 51951 bytes -7 bytes 100%
10,000 51944 bytes -7 bytes 100%
100,000 51933 bytes -11 bytes 2.90%
1,000,000 51930 bytes -3 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
52092 bytes +162 bytes (+0.31%) +70 bytes
52022 bytes +92 bytes (+0.18%)
52031 bytes +101 bytes (+0.19%) +9 bytes
52054 bytes +124 bytes (+0.24%) +32 bytes
52093 bytes +163 bytes (+0.31%) +71 bytes
52136 bytes +206 bytes (+0.40%) +114 bytes
52151 bytes +221 bytes (+0.43%) +129 bytes
52176 bytes +246 bytes (+0.47%) +154 bytes
52171 bytes +241 bytes (+0.46%) +149 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 38332 bytes -13598 bytes (-26.19%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 45662 bytes -6268 bytes (-12.07%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 46567 bytes -5363 bytes (-10.33%)
Brotli (Wikipedia) brotli brotli -q 11 47897 bytes -4033 bytes (-7.77%)
LZMA2 (Wikipedia) xz xz -9 49040 bytes -2890 bytes (-5.57%)
Zstandard (Wikipedia) zstd zstd -19 50510 bytes -1420 bytes (-2.73%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 50649 bytes -1281 bytes (-2.47%)

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.