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

After GZIP compression these minified files vary in size:
gzip -6 (default)
  55659 bytes (54.4k)
local copy
gzip -9
  55605 bytes (54.3k)
local copy
libdeflate -12
  52949 bytes (51.7k)
local copy
7zip -mx=9 -tgzip
  52915 bytes (51.7k)
local copy
zultra
  52871 bytes (51.6k)
local copy
kzip -s0 -rn -b1
  52870 bytes (51.6k)
local copy
pigz -11 -n
  52869 bytes (51.6k)
local copy
Zopfli
  52778 bytes (51.5k)
local copy
Zopfli (defluff)
  52775 bytes (51.5k)
local copy

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

You will automatically get the smallest Dojo 1.12.1 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 --mls32 --bsr15 --lazy --ohh

(found January 25, 2017)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 32  --mls32
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 3 more bytes (52775 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.12.1/dojo.js --location | md5sum
b42e40f99a835ae2041220f3c7bdbe2f  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.12.1.min.zopfli.js.gz | md5sum
b42e40f99a835ae2041220f3c7bdbe2f  -

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

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
52778 bytes -1 byte zopfli --i100000 --mls32 --bsr15 --lazy --ohh January 25, 2017 @ 15:07
52779 bytes -6 bytes zopfli --i100000 --mls16 --bsr10 --lazy --ohh January 25, 2017 @ 12:47
52785 bytes -2 bytes zopfli --i10000 --mls16 --bsr10 --lazy --ohh January 25, 2017 @ 12:08
52787 bytes -5 bytes zopfli --i10000 --mls64 --bsr13 --lazy --ohh January 25, 2017 @ 12:05
52792 bytes -1 byte zopfli --i10000 --mls32 --bsr23 --lazy --ohh January 25, 2017 @ 12:02
52793 bytes -2 bytes zopfli --i1000 --mls64 --bsr13 --lazy --ohh January 25, 2017 @ 11:56
52795 bytes -5 bytes zopfli --i1000 --mls32 --bsr10 --lazy --ohh January 25, 2017 @ 11:56
52800 bytes zopfli --i100 --mls32 --bsr10 --lazy --ohh January 25, 2017 @ 11:54

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

Most recent activity on March 17, 2022 @ 17:22.

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
52789 52790 52790 52792 52790 52787 52788 52797 52793 52793 52797 52792 52797 52816 52817
52828 52790 52792 52802 52790 52791 52792 52793 52801 52793 52795 52796 52795 52795 52799
52823 52789 52791 52789 52790 52800 52799 52798 52805 52797 52795 52788 52792 52800 52807
52792 52819 52822 52826 52804 52788 52781 52791 52788 52796 52804 52789 52792 52798 52806
52821 52789 52786 52786 52792 52788 52791 52790 52798 52799 52796 52795 52796 52797 52801
52791 52815 52792 52820 52778 52791 52778 52791 52803 52796 52793 52796 52793 52800 52801
52792 52821 52818 52779 52788 52796 52787 52791 52792 52797 52793 52793 52792 52800 52801
52791 52792 52790 52792 52779 52790 52790 52786 52799 52796 52795 52792 52792 52793 52811
52823 52820 52792 52821 52787 52790 52783 52792 52801 52797 52792 52796 52792 52791 52804
52821 52821 52792 52789 52802 52787 52781 52790 52800 52797 52793 52795 52792 52801 52798
52791 52818 52780 52789 52788 52786 52793 52788 52792 52796 52799 52795 52792 52801 52799
52823 52821 52790 52822 52778 52789 52791 52791 52792 52796 52798 52793 52793 52793 52793
52818 52820 52821 52789 52791 52790 52790 52791 52806 52799 52790 52795 52798 52801 52801
52822 52814 52786 52790 52788 52790 52789 52792 52799 52795 52795 52797 52795 52799 52798
52792 52822 52792 52823 52779 52791 52790 52790 52809 52795 52797 52793 52799 52792 52801
52791 52790 52780 52822 52787 52790 52790 52786 52799 52795 52795 52793 52800 52801 52801
52822 52819 52788 52786 52779 52791 52789 52791 52800 52797 52796 52790 52794 52801 52798
52822 52817 52791 52822 52779 52788 52787 52790 52801 52796 52789 52795 52792 52800 52801
52820 52819 52784 52821 52779 52790 52791 52793 52792 52797 52795 52792 52796 52793 52801
52822 52822 52786 52789 52792 52790 52787 52792 52799 52795 52791 52793 52793 52794 52801
52825 52791 52789 52794 52787 52794 52787 52791 52801 52796 52795 52795 52791 52793 52801
52823 52823 52790 52789 52779 52790 52790 52791 52799 52799 52796 52797 52793 52803 52801
52822 52814 52779 52792 52789 52784 52790 52794 52800 52795 52791 52794 52793 52801 52804

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 52800 bytes 100%
1,000 52793 bytes -7 bytes 100%
10,000 52784 bytes -9 bytes 100%
100,000 52778 bytes -6 bytes 5.80%
1,000,000 52778 bytes 0.87%
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
52954 bytes +176 bytes (+0.33%) +84 bytes
52870 bytes +92 bytes (+0.17%)
52877 bytes +99 bytes (+0.19%) +7 bytes
52919 bytes +141 bytes (+0.27%) +49 bytes
52954 bytes +176 bytes (+0.33%) +84 bytes
52995 bytes +217 bytes (+0.41%) +125 bytes
53013 bytes +235 bytes (+0.45%) +143 bytes
53060 bytes +282 bytes (+0.53%) +190 bytes
53074 bytes +296 bytes (+0.56%) +204 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 38855 bytes -13923 bytes (-26.38%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 46347 bytes -6431 bytes (-12.19%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 47199 bytes -5579 bytes (-10.57%)
Brotli (Wikipedia) brotli brotli -q 11 48789 bytes -3989 bytes (-7.56%)
LZMA2 (Wikipedia) xz xz -9 49820 bytes -2958 bytes (-5.60%)
Zstandard (Wikipedia) zstd zstd -19 51312 bytes -1466 bytes (-2.78%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 51489 bytes -1289 bytes (-2.44%)

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.