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

After GZIP compression these minified files vary in size:
gzip -6 (default)
  56244 bytes (54.9k)
local copy
gzip -9
  56182 bytes (54.9k)
local copy
libdeflate -12
  53516 bytes (52.3k)
local copy
7zip -mx=9 -tgzip
  53515 bytes (52.3k)
local copy
kzip -s0 -rn -b1
  53449 bytes (52.2k)
local copy
zultra
  53445 bytes (52.2k)
local copy
pigz -11 -n
  53410 bytes (52.2k)
local copy
Zopfli
  53352 bytes (52.1k)
local copy
Zopfli (defluff)
  53351 bytes (52.1k)
local copy

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

You will automatically get the smallest Dojo 1.13.9 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 --i1000000 --mb8 --mls128 --bsr18 --lazy --ohh

(found March 10, 2022)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 128  --mls128
block splitting recursion 18  --bsr18
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 (53351 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.13.9/dojo.js --location | md5sum
c323ac79fad98f36c2df5bbd5ae13516  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.13.9.min.zopfli.js.gz | md5sum
c323ac79fad98f36c2df5bbd5ae13516  -

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

Other Versions

Available Dojo versions at minime.stephan-brumme.com:

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
53352 bytes -1 byte zopfli --i1000000 --mls128 --bsr18 --lazy --ohh March 10, 2022 @ 05:35
53353 bytes -1 byte zopfli --i100000 --mls8 --bsr25 --lazy --ohh March 4, 2022 @ 12:48
53354 bytes -1 byte zopfli --i10000 --mls8 --bsr25 --lazy --ohh February 26, 2022 @ 02:00
53355 bytes -1 byte zopfli --i10000 --mls32 --bsr23 --lazy --ohh February 25, 2022 @ 17:29
53356 bytes -1 byte zopfli --i10000 --mls2 --bsr14 --lazy --ohh February 25, 2022 @ 12:12
53357 bytes -8 bytes zopfli --i10000 --mls2 --bsr8 --lazy --ohh February 25, 2022 @ 09:15
53365 bytes -1 byte zopfli --i1000 --mls4 --bsr9 --lazy --ohh February 24, 2022 @ 20:38
53366 bytes -1 byte zopfli --i1000 --mls8 --bsr10 --lazy --ohh February 24, 2022 @ 18:10
53367 bytes zopfli --i100 --mls4 --bsr9 --lazy --ohh February 24, 2022 @ 15:43

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

Most recent activity on March 10, 2022 @ 17:25.

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
53357 53367 53357 53365 53364 53364 53362 53357 53356 53365 53379 53379 53375 53387 53398
53386 53384 53359 53363 53366 53369 53366 53364 53369 53365 53369 53374 53367 53373 53374
53399 53357 53361 53365 53357 53363 53361 53367 53369 53364 53366 53373 53369 53372 53370
53386 53402 53365 53368 53363 53375 53361 53373 53366 53363 53367 53365 53367 53374 53369
53357 53385 53364 53358 53360 53373 53357 53361 53380 53385 53371 53375 53368 53372 53369
53385 53360 53357 53363 53362 53361 53363 53361 53365 53364 53374 53370 53364 53371 53366
53356 53363 53362 53374 53367 53371 53362 53362 53371 53367 53386 53373 53370 53372 53363
53388 53384 53359 53359 53365 53372 53361 53354 53366 53367 53386 53375 53370 53376 53373
53383 53384 53363 53390 53365 53367 53357 53360 53366 53380 53370 53371 53364 53374 53372
53387 53397 53364 53366 53358 53369 53363 53365 53365 53385 53370 53373 53375 53375 53366
53356 53365 53361 53391 53360 53377 53363 53362 53365 53367 53369 53371 53367 53370 53379
53389 53393 53362 53366 53367 53362 53361 53365 53371 53358 53372 53374 53374 53373 53368
53381 53394 53361 53356 53355 53370 53364 53367 53366 53364 53370 53368 53374 53370 53371
53384 53381 53367 53357 53366 53376 53362 53361 53366 53384 53369 53372 53368 53371 53365
53385 53395 53361 53363 53355 53368 53352 53362 53366 53368 53366 53373 53367 53369 53368
53392 53389 53363 53357 53355 53378 53361 53361 53373 53385 53370 53369 53369 53368 53362
53393 53383 53364 53356 53366 53367 53366 53365 53366 53370 53387 53371 53366 53367 53370
53382 53385 53357 53357 53363 53378 53365 53356 53366 53364 53370 53369 53366 53368 53366
53387 53389 53365 53357 53361 53373 53361 53361 53369 53364 53389 53371 53369 53368 53368
53389 53397 53364 53358 53355 53375 53362 53360 53371 53363 53371 53371 53369 53368 53364
53387 53384 53352 53358 53365 53363 53365 53360 53366 53385 53374 53373 53364 53373 53372
53394 53385 53364 53358 53367 53369 53364 53362 53365 53385 53384 53372 53367 53367 53368
53385 53361 53358 53365 53356 53369 53363 53363 53371 53363 53369 53370 53370 53368 53371

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 53367 bytes 100%
1,000 53365 bytes -2 bytes 100%
10,000 53354 bytes -11 bytes 100%
100,000 53353 bytes -1 byte 2.90%
1,000,000 53352 bytes -1 byte 0.58%
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
53524 bytes +172 bytes (+0.32%) +75 bytes
53449 bytes +97 bytes (+0.18%)
53475 bytes +123 bytes (+0.23%) +26 bytes
53488 bytes +136 bytes (+0.25%) +39 bytes
53527 bytes +175 bytes (+0.33%) +78 bytes
53543 bytes +191 bytes (+0.36%) +94 bytes
53582 bytes +230 bytes (+0.43%) +133 bytes
53605 bytes +253 bytes (+0.47%) +156 bytes
53590 bytes +238 bytes (+0.45%) +141 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 - for example, your browser actually supports it !
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 39200 bytes -14152 bytes (-26.53%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 46823 bytes -6529 bytes (-12.24%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 47804 bytes -5548 bytes (-10.40%)
Brotli (Wikipedia) brotli brotli -q 11 49230 bytes -4122 bytes (-7.73%)
LZMA2 (Wikipedia) xz xz -9 50368 bytes -2984 bytes (-5.59%)
Zstandard (Wikipedia) zstd zstd -19 51666 bytes -1686 bytes (-3.16%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 52024 bytes -1328 bytes (-2.49%)

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 2022.
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.