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

After GZIP compression these minified files vary in size:
Boot
  64880 bytes (63.4k)
CDN
fastcdn
  56572 bytes (55.2k)
CDN
cdnjs
  56230 bytes (54.9k)
CDN
gzip -6 (default)
  55961 bytes (54.6k)
local copy
gzip -9
  55905 bytes (54.6k)
local copy
jsdelivr
  55880 bytes (54.6k)
CDN
7zip -mx=9 -tgzip
  53256 bytes (52.0k)
local copy
libdeflate -12
  53237 bytes (52.0k)
local copy
kzip -s0 -rn -b1
  53194 bytes (51.9k)
local copy
pigz -11 -n
  53185 bytes (51.9k)
local copy
zultra
  53175 bytes (51.9k)
local copy
Zopfli
  53008 bytes (51.8k)
local copy

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

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

Save 2872 bytes by using my Dojo 1.10.4 Zopfli version instead of the best available CDN (5.42% smaller than jsdelivr, 53008 vs. 55880 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 --mls2 --bsr21 --lazy --ohh

(found October 20, 2015)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 2  --mls2
block splitting recursion 21  --bsr21
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

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://download.dojotoolkit.org/release-1.10.4/dojo.js --location | md5sum
776a5d5f76ffc0758a890bb6bb2d7ee2  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.10.4.min.zopfli.js.gz | md5sum
776a5d5f76ffc0758a890bb6bb2d7ee2  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 64880 bytes 776a5d5f76ffc0758a890bb6bb2d7ee2 March 19, 2015 @ 15:29
fastcdn 56572 bytes 776a5d5f76ffc0758a890bb6bb2d7ee2 November 4, 2015 @ 10:08
cdnjs 56230 bytes 776a5d5f76ffc0758a890bb6bb2d7ee2 February 8, 2015 @ 14:45

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
jsdelivr 55880 bytes f88d8d43c76319f39ba6f5a18ade15bc only whitespaces differ April 14, 2015 @ 11:32

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
53008 bytes -2 bytes zopfli --i1000000 --mls2 --bsr21 --lazy --ohh October 20, 2015 @ 17:37
53010 bytes -1 byte zopfli --i1000000 --mls2 --bsr16 --lazy --ohh October 11, 2015 @ 10:00
53011 bytes -1 byte zopfli --i100000 --mls2 --bsr21 --lazy --ohh October 10, 2015 @ 22:31
53012 bytes -1 byte zopfli --i100000 --mls2 --bsr30 --lazy --ohh October 10, 2015 @ 03:50
53013 bytes -2 bytes zopfli --i100000 --mls2 --bsr8 --lazy --ohh September 24, 2015 @ 10:05
53015 bytes -1 byte zopfli --i10000 --mls2 --bsr8 --lazy --ohh September 23, 2015 @ 23:23
53016 bytes -1 byte zopfli --i10000 --mls2 --bsr17 --lazy --ohh September 23, 2015 @ 23:18
53017 bytes -6 bytes zopfli --i10000 --mls2 --bsr11 --lazy --ohh September 23, 2015 @ 22:53
53023 bytes -1 byte zopfli --i1000 --mls2 --bsr17 --lazy --ohh September 22, 2015 @ 13:09
53024 bytes -1 byte zopfli --i1000 --mls4 --bsr6 --lazy --ohh September 21, 2015 @ 13:48
53025 bytes -2 bytes zopfli --i1000 --mls4 --bsr12 --lazy --ohh September 21, 2015 @ 13:44
53027 bytes zopfli --i100 --mls4 --bsr15 --lazy --ohh September 21, 2015 @ 13:13

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
53058 53067 53085 53086 53085 53088 53093 53098 53099 53093 53116 53091 53093 53126 53098
53023 53026 53038 53028 53086 53088 53096 53104 53089 53096 53095 53103 53106 53094 53093
53034 53016 53041 53033 53087 53080 53089 53095 53091 53102 53092 53099 53099 53098 53096
53116 53120 53125 53088 53097 53088 53088 53088 53090 53111 53091 53089 53089 53106 53092
53013 53021 53104 53042 53083 53088 53096 53094 53088 53090 53104 53105 53100 53102 53090
53010 53046 53052 53034 53084 53088 53094 53094 53089 53087 53098 53089 53101 53103 53096
53045 53045 53048 53087 53085 53088 53092 53087 53089 53095 53096 53090 53126 53103 53100
53013 53016 53032 53087 53087 53077 53100 53098 53088 53095 53097 53101 53098 53095 53088
53014 53014 53051 53032 53092 53078 53085 53088 53090 53093 53096 53101 53099 53096 53095
53029 53012 53030 53030 53085 53093 53089 53095 53089 53099 53107 53088 53104 53096 53090
53010 53014 53037 53042 53086 53078 53077 53088 53098 53115 53095 53089 53098 53100 53089
53015 53011 53035 53032 53089 53083 53088 53085 53089 53104 53103 53089 53089 53105 53092
53010 53015 53029 53034 53087 53088 53087 53100 53088 53099 53096 53089 53097 53096 53097
53014 53022 53026 53032 53086 53087 53095 53094 53088 53099 53099 53089 53098 53096 53092
53016 53016 53044 53049 53087 53086 53094 53094 53088 53105 53096 53089 53098 53093 53098
53029 53016 53027 53040 53086 53086 53087 53088 53088 53102 53094 53105 53098 53095 53094
53063 53067 53087 53087 53087 53086 53094 53094 53089 53099 53096 53126 53091 53097 53096
53008 53014 53033 53031 53086 53086 53094 53088 53089 53093 53094 53089 53091 53097 53104
53023 53018 53033 53030 53085 53086 53094 53091 53088 53094 53095 53089 53098 53115 53088
53069 53059 53107 53086 53088 53084 53103 53086 53089 53098 53096 53089 53088 53111 53088
53057 53063 53072 53087 53087 53086 53087 53087 53089 53093 53098 53089 53089 53094 53088
53009 53058 53017 53086 53084 53086 53086 53089 53089 53098 53095 53089 53089 53097 53090
53016 53025 53028 53031 53086 53084 53087 53087 53088 53093 53099 53089 53089 53097 53090

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 53026 bytes 100%
1,000 53023 bytes -3 bytes 100%
10,000 53015 bytes -8 bytes 100%
100,000 53011 bytes -4 bytes 8.41%
1,000,000 53008 bytes -3 bytes 2.03%
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
53261 bytes +253 bytes (+0.48%) +67 bytes
53194 bytes +186 bytes (+0.35%)
53206 bytes +198 bytes (+0.37%) +12 bytes
53252 bytes +244 bytes (+0.46%) +58 bytes
53292 bytes +284 bytes (+0.54%) +98 bytes
53314 bytes +306 bytes (+0.58%) +120 bytes
53324 bytes +316 bytes (+0.60%) +130 bytes
53356 bytes +348 bytes (+0.66%) +162 bytes
53393 bytes +385 bytes (+0.73%) +199 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 38853 bytes -14155 bytes (-26.70%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 46085 bytes -6923 bytes (-13.06%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 47558 bytes -5450 bytes (-10.28%)
Brotli (Wikipedia) brotli brotli -q 11 48617 bytes -4391 bytes (-8.28%)
LZMA2 (Wikipedia) xz xz -9 49764 bytes -3244 bytes (-6.12%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 51238 bytes -1770 bytes (-3.34%)
Zstandard (Wikipedia) zstd zstd -19 51254 bytes -1754 bytes (-3.31%)

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.