Choose a version:
28% The original file has 276341 bytes (269.9k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 78603 bytes (76.8k, 28%).

After GZIP compression these minified files vary in size:
Baidu
  26538 bytes (25.9k)
CDN
gzip -6 (default)
  26441 bytes (25.8k)
local copy
gzip -9
  26423 bytes (25.8k)
local copy
Sina
  26388 bytes (25.8k)
CDN
7zip -mx=9 -tgzip
  25296 bytes (24.7k)
local copy
kzip -s0 -rn -b3
  25255 bytes (24.7k)
local copy
libdeflate -12
  25244 bytes (24.7k)
local copy
zultra
  25239 bytes (24.6k)
local copy
pigz -11 -n
  25212 bytes (24.6k)
local copy
Zopfli
  25116 bytes (24.5k)
local copy
Zopfli (defluff)
  25115 bytes (24.5k)
local copy

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

You will automatically get the smallest Dojo 1.2.3 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 1272 bytes by using my Dojo 1.2.3 Zopfli version instead of the best available CDN (5.06% smaller than Sina, 25116 vs. 26388 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 --mls128 --bsr15 --lazy --ohh

(found March 2, 2020)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 128  --mls128
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 1 more byte (25115 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.2.3/dojo.js --location | md5sum
4245b24f70c09cb1dc9085882c180858  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.2.3.min.zopfli.js.gz | md5sum
4245b24f70c09cb1dc9085882c180858  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Sina 26388 bytes 4245b24f70c09cb1dc9085882c180858 April 25, 2019 @ 14:07

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 26538 bytes 502ae72cf1c76d31787f4e7544cdea21 only whitespaces differ January 7, 2015 @ 10: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
25116 bytes -1 byte zopfli --i1000000 --mls128 --bsr15 --lazy --ohh March 2, 2020 @ 14:56
25117 bytes -2 bytes zopfli --i100000 --mls128 --bsr15 --lazy --ohh February 2, 2016 @ 20:12
25119 bytes -2 bytes zopfli --i10000 --mls128 --bsr15 --lazy --ohh February 2, 2016 @ 19:08
25121 bytes -5 bytes zopfli --i1000 --mls128 --bsr15 --lazy --ohh February 2, 2016 @ 18:59
25126 bytes -4 bytes zopfli --i1000 --mls8 --bsr15 --lazy --ohh February 2, 2016 @ 18:58
25130 bytes zopfli --i100 --mls8 --bsr15 --lazy --ohh February 2, 2016 @ 18:57

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

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
25183 25161 25183 25160 25169 25161 25205 25204 25207 25209 25207 25206 25175 25206 25197
25170 25149 25155 25153 25180 25163 25167 25197 25203 25209 25200 25207 25141 25211 25199
25201 25159 25154 25165 25220 25218 25220 25197 25206 25201 25201 25207 25205 25210 25202
25183 25167 25157 25175 25153 25220 25223 25196 25206 25199 25207 25207 25201 25201 25203
25176 25169 25168 25126 25172 25219 25224 25197 25207 25205 25201 25200 25206 25201 25205
25182 25165 25149 25151 25220 25204 25220 25196 25206 25202 25199 25203 25203 25202 25208
25167 25172 25166 25175 25168 25130 25198 25197 25206 25196 25204 25199 25149 25210 25201
25167 25174 25163 25172 25157 25197 25133 25197 25197 25199 25198 25207 25172 25209 25200
25165 25167 25150 25148 25171 25121 25171 25196 25198 25198 25199 25197 25163 25209 25205
25144 25134 25165 25151 25178 25155 25176 25213 25199 25204 25197 25199 25120 25213 25206
25172 25173 25163 25171 25164 25215 25211 25197 25205 25199 25199 25197 25151 25210 25202
25155 25164 25118 25167 25164 25122 25116 25197 25206 25197 25197 25199 25200 25201 25202
25175 25169 25172 25171 25179 25122 25174 25197 25206 25205 25205 25201 25155 25201 25204
25173 25141 25167 25152 25164 25222 25220 25196 25196 25200 25201 25207 25154 25201 25199
25153 25138 25148 25150 25185 25130 25200 25199 25199 25196 25199 25198 25199 25201 25201
25171 25169 25173 25170 25172 25155 25220 25220 25207 25205 25202 25201 25127 25201 25203
25176 25151 25129 25173 25171 25156 25219 25197 25207 25206 25201 25207 25177 25201 25202
25165 25166 25172 25168 25163 25212 25214 25197 25197 25196 25199 25203 25200 25209 25205
25181 25171 25171 25175 25153 25222 25220 25149 25206 25197 25197 25200 25200 25201 25205
25175 25167 25166 25166 25155 25195 25211 25154 25207 25198 25200 25205 25207 25200 25202
25161 25167 25150 25153 25168 25123 25216 25197 25206 25196 25200 25199 25206 25202 25202
25151 25154 25147 25148 25149 25197 25214 25196 25197 25197 25199 25206 25206 25200 25207
25155 25174 25162 25171 25172 25215 25212 25197 25206 25199 25198 25197 25152 25201 25205

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 25130 bytes 100%
1,000 25121 bytes -9 bytes 100%
10,000 25119 bytes -2 bytes 100%
100,000 25117 bytes -2 bytes 2.03%
1,000,000 25116 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
25261 bytes +145 bytes (+0.58%) +6 bytes
25262 bytes +146 bytes (+0.58%) +7 bytes
25276 bytes +160 bytes (+0.64%) +21 bytes
25255 bytes +139 bytes (+0.55%)
25290 bytes +174 bytes (+0.69%) +35 bytes
25271 bytes +155 bytes (+0.62%) +16 bytes
25257 bytes +141 bytes (+0.56%) +2 bytes
25259 bytes +143 bytes (+0.57%) +4 bytes
25296 bytes +180 bytes (+0.72%) +41 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 20441 bytes -4675 bytes (-18.61%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 22391 bytes -2725 bytes (-10.85%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 23276 bytes -1840 bytes (-7.33%)
Brotli (Wikipedia) brotli brotli -q 11 23326 bytes -1790 bytes (-7.13%)
LZMA2 (Wikipedia) xz xz -9 24240 bytes -876 bytes (-3.49%)
Zstandard (Wikipedia) zstd zstd -19 24855 bytes -261 bytes (-1.04%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 24985 bytes -131 bytes (-0.52%)

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.