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

After GZIP compression these minified files vary in size:
Boot
  64015 bytes (62.5k)
CDN
cdnjs
  55473 bytes (54.2k)
CDN
gzip -6 (default)
  55216 bytes (53.9k)
local copy
gzip -9
  55163 bytes (53.9k)
local copy
libdeflate -12
  52572 bytes (51.3k)
local copy
7zip -mx=9 -tgzip
  52552 bytes (51.3k)
local copy
pigz -11 -n
  52501 bytes (51.3k)
local copy
kzip -s0 -rn -b1
  52498 bytes (51.3k)
local copy
zultra
  52466 bytes (51.2k)
local copy
Zopfli
  52319 bytes (51.1k)
local copy
Zopfli (defluff)
  52318 bytes (51.1k)
local copy

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

You will automatically get the smallest Dojo 1.9.5 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 3154 bytes by using my Dojo 1.9.5 Zopfli version instead of the best available CDN (6.03% smaller than cdnjs, 52319 vs. 55473 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 --mls8 --bsr13 --lazy --ohh

(found January 30, 2020)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 8  --mls8
block splitting recursion 13  --bsr13
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 (52318 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.5/dojo.js --location | md5sum
c6c14af2cf27df34ab18ae136112e34e  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.9.5.min.zopfli.js.gz | md5sum
c6c14af2cf27df34ab18ae136112e34e  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 64015 bytes c6c14af2cf27df34ab18ae136112e34e March 19, 2015 @ 15:44
cdnjs 55473 bytes c6c14af2cf27df34ab18ae136112e34e February 8, 2015 @ 14:45

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
52319 bytes -1 byte zopfli --i1000000 --mls8 --bsr13 --lazy --ohh January 30, 2020 @ 08:51
52320 bytes -8 bytes zopfli --i100000 --mls8 --bsr13 --lazy --ohh December 3, 2015 @ 18:59
52328 bytes -8 bytes zopfli --i10000 --mls8 --bsr13 --lazy --ohh October 14, 2015 @ 09:39
52336 bytes -14 bytes zopfli --i1000 --mls8 --bsr15 --lazy --ohh September 19, 2015 @ 01:06
52350 bytes -9 bytes zopfli --i1000 --mls8 --bsr4 --lazy --ohh September 19, 2015 @ 01:04
52359 bytes zopfli --i100 --mls8 --bsr13 --lazy --ohh September 18, 2015 @ 16:16

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

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
52402 52401 52399 52401 52403 52402 52401 52402 52400 52418 52397 52421 52423 52418 52401
52361 52351 52341 52394 52411 52403 52415 52407 52403 52401 52406 52418 52416 52406 52402
52353 52346 52359 52395 52395 52403 52398 52398 52401 52400 52411 52420 52412 52416 52403
52396 52338 52335 52394 52395 52401 52402 52413 52402 52402 52410 52417 52411 52410 52401
52341 52339 52342 52396 52395 52396 52399 52394 52400 52412 52410 52418 52408 52401 52407
52341 52336 52354 52394 52394 52396 52400 52396 52403 52410 52402 52415 52414 52408 52404
52357 52358 52353 52394 52398 52395 52396 52398 52403 52402 52406 52420 52415 52417 52405
52341 52346 52355 52397 52396 52395 52398 52399 52403 52399 52411 52418 52418 52396 52403
52338 52340 52340 52395 52394 52396 52396 52399 52400 52397 52408 52403 52415 52397 52413
52337 52343 52319 52394 52394 52396 52396 52394 52400 52397 52397 52417 52419 52405 52403
52341 52342 52416 52396 52396 52395 52396 52396 52402 52395 52410 52408 52415 52409 52404
52340 52345 52322 52404 52401 52395 52395 52406 52400 52396 52411 52416 52417 52400 52404
52335 52342 52336 52393 52395 52397 52400 52401 52399 52400 52401 52416 52414 52401 52402
52346 52346 52418 52396 52396 52397 52398 52396 52399 52410 52410 52416 52418 52398 52404
52344 52340 52339 52395 52396 52395 52399 52398 52398 52393 52403 52417 52416 52395 52403
52341 52396 52395 52395 52396 52396 52403 52395 52401 52394 52412 52417 52416 52400 52403
52341 52338 52359 52395 52394 52397 52396 52400 52403 52394 52408 52416 52417 52418 52402
52341 52340 52355 52395 52394 52396 52397 52395 52398 52410 52403 52417 52415 52400 52402
52348 52339 52340 52395 52396 52396 52400 52399 52401 52409 52396 52410 52420 52415 52409
52341 52339 52355 52394 52397 52396 52402 52395 52400 52409 52411 52416 52414 52410 52404
52347 52347 52352 52394 52395 52396 52400 52408 52402 52399 52406 52417 52414 52399 52403
52338 52351 52352 52393 52398 52396 52400 52398 52402 52410 52407 52416 52419 52401 52404
52341 52341 52341 52395 52394 52396 52396 52398 52403 52412 52407 52417 52417 52399 52406

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 52350 bytes 100%
1,000 52336 bytes -14 bytes 100%
10,000 52328 bytes -8 bytes 100%
100,000 52320 bytes -8 bytes 0.58%
1,000,000 52319 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
52553 bytes +234 bytes (+0.45%) +55 bytes
52498 bytes +179 bytes (+0.34%)
52516 bytes +197 bytes (+0.38%) +18 bytes
52561 bytes +242 bytes (+0.46%) +63 bytes
52595 bytes +276 bytes (+0.53%) +97 bytes
52610 bytes +291 bytes (+0.56%) +112 bytes
52622 bytes +303 bytes (+0.58%) +124 bytes
52652 bytes +333 bytes (+0.64%) +154 bytes
52666 bytes +347 bytes (+0.66%) +168 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 38446 bytes -13873 bytes (-26.52%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 45526 bytes -6793 bytes (-12.98%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 46851 bytes -5468 bytes (-10.45%)
Brotli (Wikipedia) brotli brotli -q 11 47920 bytes -4399 bytes (-8.41%)
LZMA2 (Wikipedia) xz xz -9 49116 bytes -3203 bytes (-6.12%)
Zstandard (Wikipedia) zstd zstd -19 50591 bytes -1728 bytes (-3.30%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 50617 bytes -1702 bytes (-3.25%)

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.