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
  53763 bytes (52.5k)
local copy
kzip -s0 -rn -b1
  53687 bytes (52.4k)
local copy
zultra
  53686 bytes (52.4k)
local copy
pigz -11 -n
  53671 bytes (52.4k)
local copy
Zopfli
  53596 bytes (52.3k)
local copy
Zopfli (defluff)
  53591 bytes (52.3k)
local copy

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

You will automatically get the smallest Dojo 1.16.4 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 March 23, 2021)
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 5 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.4/dojo.js --location | md5sum
b4103bd0e17a7007eff3021b2f958634  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.16.4.min.zopfli.js.gz | md5sum
b4103bd0e17a7007eff3021b2f958634  -

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

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
53596 bytes -1 byte zopfli --i1000000 --mls128 --bsr14 --lazy --ohh March 23, 2021 @ 22:37
53597 bytes -1 byte zopfli --i100000 --mls128 --bsr14 --lazy --ohh March 23, 2021 @ 14:21
53598 bytes -1 byte zopfli --i100000 --mls128 --bsr40 --lazy --ohh March 23, 2021 @ 12:43
53599 bytes -3 bytes zopfli --i100000 --mls512 --bsr2 --lazy --ohh March 23, 2021 @ 12:42
53602 bytes -1 byte zopfli --i10000 --mls512 --bsr2 --lazy --ohh March 22, 2021 @ 17:49
53603 bytes -5 bytes zopfli --i10000 --mls128 --bsr17 --lazy --ohh March 22, 2021 @ 17:19
53608 bytes -2 bytes zopfli --i10000 --mls16 --bsr4 --lazy --ohh March 22, 2021 @ 17:06
53610 bytes -2 bytes zopfli --i1000 --mls16 --bsr19 --lazy --ohh March 22, 2021 @ 15:44
53612 bytes zopfli --i100 --mls16 --bsr13 --lazy --ohh March 22, 2021 @ 15:22

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

Most recent activity on February 24, 2022 @ 16:23.

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 53623 53605 53606 53606 53607 53607 53606 53599 53605 53607 53609 53608 53632 53633
53630 53639 53611 53608 53617 53613 53604 53604 53613 53607 53612 53608 53619 53625 53614
53648 53608 53603 53606 53617 53618 53604 53615 53620 53619 53621 53624 53621 53622 53615
53631 53637 53640 53635 53609 53614 53603 53611 53612 53614 53616 53608 53622 53610 53619
53633 53628 53642 53607 53608 53621 53598 53608 53617 53623 53623 53623 53620 53620 53619
53615 53611 53609 53606 53609 53608 53604 53598 53613 53623 53618 53621 53616 53624 53607
53607 53622 53607 53641 53608 53620 53606 53606 53613 53613 53618 53611 53615 53613 53625
53621 53619 53609 53638 53607 53605 53603 53604 53613 53613 53616 53612 53615 53625 53619
53630 53629 53636 53643 53604 53605 53603 53608 53613 53614 53618 53622 53615 53616 53625
53634 53640 53604 53608 53607 53614 53603 53608 53616 53616 53615 53613 53616 53620 53615
53619 53621 53634 53643 53603 53609 53596 53605 53613 53614 53616 53626 53616 53618 53617
53621 53620 53608 53633 53607 53614 53603 53614 53613 53614 53632 53609 53615 53626 53616
53631 53637 53633 53606 53605 53620 53616 53614 53613 53613 53627 53614 53614 53616 53614
53640 53639 53634 53643 53609 53605 53603 53613 53613 53620 53625 53627 53615 53617 53618
53606 53610 53607 53637 53604 53605 53603 53608 53613 53614 53618 53621 53618 53619 53623
53634 53633 53607 53608 53608 53627 53603 53598 53614 53614 53622 53626 53616 53617 53619
53620 53637 53637 53606 53607 53605 53603 53612 53614 53614 53622 53622 53616 53621 53623
53637 53642 53637 53642 53607 53612 53616 53606 53613 53614 53623 53621 53616 53623 53622
53626 53618 53612 53612 53604 53613 53603 53614 53613 53622 53616 53627 53616 53623 53619
53623 53632 53604 53641 53604 53615 53598 53613 53613 53613 53621 53622 53615 53626 53617
53635 53630 53631 53638 53604 53614 53618 53609 53613 53614 53616 53627 53616 53619 53626
53629 53634 53634 53643 53609 53617 53616 53614 53613 53613 53622 53621 53615 53624 53615
53633 53634 53630 53642 53606 53619 53598 53615 53613 53613 53615 53623 53614 53622 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 53612 bytes 100%
1,000 53610 bytes -2 bytes 100%
10,000 53602 bytes -8 bytes 100%
100,000 53597 bytes -5 bytes 2.03%
1,000,000 53596 bytes -1 byte 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
53745 bytes +149 bytes (+0.28%) +58 bytes
53687 bytes +91 bytes (+0.17%)
53708 bytes +112 bytes (+0.21%) +21 bytes
53723 bytes +127 bytes (+0.24%) +36 bytes
53761 bytes +165 bytes (+0.31%) +74 bytes
53789 bytes +193 bytes (+0.36%) +102 bytes
53823 bytes +227 bytes (+0.42%) +136 bytes
53851 bytes +255 bytes (+0.48%) +164 bytes
53836 bytes +240 bytes (+0.45%) +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 39398 bytes -14198 bytes (-26.49%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 47037 bytes -6559 bytes (-12.24%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 47974 bytes -5622 bytes (-10.49%)
Brotli (Wikipedia) brotli brotli -q 11 49490 bytes -4106 bytes (-7.66%)
LZMA2 (Wikipedia) xz xz -9 50552 bytes -3044 bytes (-5.68%)
Zstandard (Wikipedia) zstd zstd -19 51922 bytes -1674 bytes (-3.12%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 52127 bytes -1469 bytes (-2.74%)

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.