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

After GZIP compression these minified files vary in size:
Boot
  63370 bytes (61.9k)
CDN
cdnjs
  54921 bytes (53.6k)
CDN
gzip -6 (default)
  54681 bytes (53.4k)
local copy
gzip -9
  54624 bytes (53.3k)
local copy
jsdelivr
  54594 bytes (53.3k)
CDN
7zip -mx=9 -tgzip
  52032 bytes (50.8k)
local copy
libdeflate -12
  52029 bytes (50.8k)
local copy
zultra
  52007 bytes (50.8k)
local copy
pigz -11 -n
  51989 bytes (50.8k)
local copy
kzip -s0 -rn -b1
  51983 bytes (50.8k)
local copy
Zopfli
  51817 bytes (50.6k)
local copy
Zopfli (defluff)
  51815 bytes (50.6k)
local copy

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

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

Save 2777 bytes by using my Dojo 1.9.0 Zopfli version instead of the best available CDN (5.36% smaller than jsdelivr, 51817 vs. 54594 bytes):
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 --mls4 --bsr4 --lazy --ohh

(found January 30, 2020)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 4  --mls4
block splitting recursion 4  --bsr4
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 (51815 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.0/dojo.js --location | md5sum
0c560e1d33b8fba04b506ecac0374acb  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.9.0.min.zopfli.js.gz | md5sum
0c560e1d33b8fba04b506ecac0374acb  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 63370 bytes 0c560e1d33b8fba04b506ecac0374acb March 19, 2015 @ 15:41
cdnjs 54921 bytes 0c560e1d33b8fba04b506ecac0374acb February 8, 2015 @ 14:45
jsdelivr 54594 bytes 0c560e1d33b8fba04b506ecac0374acb August 7, 2014 @ 19:16

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

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
51817 bytes -2 bytes zopfli --i1000000 --mls4 --bsr4 --lazy --ohh January 30, 2020 @ 21:08
51819 bytes -5 bytes zopfli --i100000 --mls4 --bsr4 --lazy --ohh December 3, 2015 @ 17:11
51824 bytes -3 bytes zopfli --i100000 --mls2 --bsr20 --lazy --ohh December 3, 2015 @ 16:07
51827 bytes -1 byte zopfli --i10000 --mls2 --bsr20 --lazy --ohh October 14, 2015 @ 00:07
51828 bytes -2 bytes zopfli --i10000 --mls4 --bsr4 --lazy --ohh October 13, 2015 @ 18:48
51830 bytes -5 bytes zopfli --i1000 --mls4 --bsr4 --lazy --ohh September 21, 2015 @ 17:53
51835 bytes zopfli --i100 --mls4 --bsr4 --lazy --ohh September 21, 2015 @ 13:37

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

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
51898 51898 51895 51895 51898 51899 51897 51897 51911 51920 51915 51916 51912 51916 51935
51828 51817 51851 51902 51901 51896 51898 51902 51898 51902 51909 51908 51892 51894 51886
51848 51847 51842 51907 51897 51898 51899 51899 51896 51897 51915 51913 51902 51904 51889
51843 51894 51836 51899 51897 51897 51898 51899 51897 51908 51906 51909 51901 51892 51890
51847 51835 51898 51899 51894 51891 51897 51899 51907 51894 51893 51892 51901 51896 51904
51849 51835 51898 51900 51891 51890 51898 51901 51904 51907 51908 51911 51909 51894 51898
51843 51855 51835 51899 51897 51891 51898 51902 51899 51893 51896 51906 51902 51894 51894
51835 51837 51836 51905 51897 51891 51897 51903 51904 51899 51900 51908 51904 51912 51887
51847 51849 51835 51906 51890 51892 51897 51900 51899 51888 51897 51916 51906 51888 51889
51846 51836 51835 51899 51893 51891 51899 51899 51904 51904 51910 51910 51906 51892 51896
51849 51837 51834 51912 51895 51890 51897 51899 51905 51886 51902 51908 51902 51895 51890
51832 51843 51836 51898 51897 51892 51899 51899 51897 51889 51907 51909 51904 51892 51887
51842 51849 51836 51897 51892 51897 51904 51902 51904 51893 51908 51910 51906 51891 51897
51835 51849 51896 51911 51895 51896 51898 51891 51902 51895 51906 51908 51902 51888 51888
51835 51847 51907 51908 51892 51897 51899 51903 51901 51893 51901 51909 51915 51887 51886
51838 51856 51899 51907 51891 51891 51899 51899 51906 51892 51896 51902 51902 51887 51891
51824 51851 51900 51907 51891 51891 51897 51903 51899 51889 51905 51910 51902 51895 51887
51827 51836 51836 51897 51893 51891 51898 51899 51900 51887 51906 51908 51907 51890 51889
51834 51835 51897 51897 51890 51897 51897 51899 51901 51894 51894 51898 51901 51902 51895
51836 51847 51898 51907 51894 51898 51898 51898 51900 51892 51907 51912 51902 51892 51893
51845 51849 51897 51907 51893 51897 51897 51899 51901 51900 51903 51909 51909 51894 51889
51838 51835 51834 51897 51896 51891 51896 51899 51903 51907 51894 51899 51902 51896 51905
51829 51851 51837 51899 51891 51898 51897 51901 51897 51894 51910 51909 51904 51890 51896

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 51835 bytes 100%
1,000 51830 bytes -5 bytes 100%
10,000 51827 bytes -3 bytes 100%
100,000 51819 bytes -8 bytes 1.45%
1,000,000 51817 bytes -2 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
52034 bytes +217 bytes (+0.42%) +51 bytes
51983 bytes +166 bytes (+0.32%)
51998 bytes +181 bytes (+0.35%) +15 bytes
52035 bytes +218 bytes (+0.42%) +52 bytes
52055 bytes +238 bytes (+0.46%) +72 bytes
52081 bytes +264 bytes (+0.51%) +98 bytes
52115 bytes +298 bytes (+0.58%) +132 bytes
52124 bytes +307 bytes (+0.59%) +141 bytes
52134 bytes +317 bytes (+0.61%) +151 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 38010 bytes -13807 bytes (-26.65%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 45077 bytes -6740 bytes (-13.01%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 46472 bytes -5345 bytes (-10.32%)
Brotli (Wikipedia) brotli brotli -q 11 47463 bytes -4354 bytes (-8.40%)
LZMA2 (Wikipedia) xz xz -9 48688 bytes -3129 bytes (-6.04%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 50144 bytes -1673 bytes (-3.23%)
Zstandard (Wikipedia) zstd zstd -19 50160 bytes -1657 bytes (-3.20%)

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.