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

After GZIP compression these minified files vary in size:
gzip -6 (default)
  56330 bytes (55.0k)
local copy
gzip -9
  56263 bytes (54.9k)
local copy
libdeflate -12
  53578 bytes (52.3k)
local copy
7zip -mx=9 -tgzip
  53565 bytes (52.3k)
local copy
kzip -s0 -rn -b1
  53489 bytes (52.2k)
local copy
zultra
  53487 bytes (52.2k)
local copy
pigz -11 -n
  53469 bytes (52.2k)
local copy
Zopfli
  53394 bytes (52.1k)
local copy
Zopfli (defluff)
  53390 bytes (52.1k)
local copy

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

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

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 --bsr15 --lazy --ohh

(found December 2, 2019)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 8  --mls8
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 4 more bytes (53390 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.14.4/dojo.js --location | md5sum
b61971358d52e1e6d4680e58ad45506e  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.14.4.min.zopfli.js.gz | md5sum
b61971358d52e1e6d4680e58ad45506e  -

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

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
53394 bytes -5 bytes zopfli --i1000000 --mls8 --bsr15 --lazy --ohh December 2, 2019 @ 16:27
53399 bytes -1 byte zopfli --i100000 --mls8 --bsr15 --lazy --ohh December 1, 2019 @ 23:44
53400 bytes -1 byte zopfli --i10000 --mls8 --bsr15 --lazy --ohh November 30, 2019 @ 18:37
53401 bytes -1 byte zopfli --i10000 --mls128 --bsr17 --lazy --ohh November 30, 2019 @ 05:16
53402 bytes -1 byte zopfli --i10000 --mls16 --bsr40 --lazy --ohh November 30, 2019 @ 04:09
53403 bytes -5 bytes zopfli --i10000 --mls4 --bsr20 --lazy --ohh November 30, 2019 @ 00:13
53408 bytes -3 bytes zopfli --i10000 --mls4096 --bsr9 --lazy --ohh November 29, 2019 @ 23:37
53411 bytes -1 byte zopfli --i1000 --mls64 --bsr12 --lazy --ohh November 29, 2019 @ 21:00
53412 bytes -3 bytes zopfli --i1000 --mls64 --bsr11 --lazy --ohh November 29, 2019 @ 20:23
53415 bytes zopfli --i100 --mls128 --bsr30 --lazy --ohh November 29, 2019 @ 19:33

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

Most recent activity on February 24, 2022 @ 16:45.

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 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
53402 53403 53409 53411 53405 53402 53409 53407 53422 53426 53412 53406 53406 53440 53413
53403 53402 53408 53409 53419 53420 53403 53402 53415 53410 53425 53412 53403 53417 53408
53434 53410 53403 53409 53409 53413 53401 53401 53416 53416 53419 53424 53414 53422 53417
53443 53403 53406 53442 53419 53418 53404 53415 53409 53409 53417 53410 53403 53423 53413
53401 53434 53428 53441 53402 53417 53405 53406 53414 53422 53425 53413 53404 53420 53416
53435 53440 53412 53403 53409 53406 53409 53406 53414 53414 53419 53408 53401 53437 53416
53407 53433 53405 53445 53415 53401 53408 53403 53414 53416 53419 53402 53403 53429 53417
53407 53431 53408 53403 53409 53401 53408 53408 53414 53414 53417 53408 53411 53429 53416
53402 53409 53405 53440 53408 53402 53404 53401 53414 53415 53420 53412 53414 53419 53418
53440 53431 53408 53403 53416 53414 53401 53407 53414 53414 53421 53404 53409 53421 53418
53402 53409 53438 53403 53410 53418 53403 53409 53414 53415 53416 53413 53413 53427 53412
53429 53403 53394 53403 53420 53413 53405 53408 53414 53414 53422 53411 53402 53423 53421
53401 53401 53402 53411 53410 53418 53401 53403 53414 53413 53417 53413 53403 53422 53416
53401 53406 53407 53438 53408 53412 53401 53416 53415 53415 53420 53413 53412 53423 53418
53429 53406 53408 53403 53407 53409 53401 53415 53414 53414 53419 53412 53412 53424 53421
53408 53412 53408 53440 53408 53417 53402 53402 53415 53415 53420 53409 53403 53424 53419
53403 53403 53408 53403 53409 53418 53405 53415 53414 53415 53423 53416 53403 53417 53419
53430 53403 53407 53403 53407 53411 53401 53406 53414 53415 53415 53403 53412 53422 53414
53428 53430 53406 53403 53405 53416 53401 53407 53415 53414 53417 53412 53415 53419 53414
53402 53403 53434 53407 53406 53418 53408 53414 53415 53414 53419 53403 53405 53423 53418
53402 53430 53409 53438 53407 53412 53402 53415 53415 53415 53417 53413 53414 53421 53417
53396 53408 53408 53435 53408 53420 53405 53403 53416 53414 53419 53403 53423 53429 53417
53432 53432 53411 53402 53407 53415 53404 53404 53414 53414 53416 53412 53410 53423 53417

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 53415 bytes 100%
1,000 53411 bytes -4 bytes 100%
10,000 53400 bytes -11 bytes 100%
100,000 53399 bytes -1 byte 0.58%
1,000,000 53394 bytes -5 bytes 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
53564 bytes +170 bytes (+0.32%) +75 bytes
53489 bytes +95 bytes (+0.18%)
53517 bytes +123 bytes (+0.23%) +28 bytes
53542 bytes +148 bytes (+0.28%) +53 bytes
53564 bytes +170 bytes (+0.32%) +75 bytes
53575 bytes +181 bytes (+0.34%) +86 bytes
53565 bytes +171 bytes (+0.32%) +76 bytes
53601 bytes +207 bytes (+0.39%) +112 bytes
53621 bytes +227 bytes (+0.43%) +132 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 39290 bytes -14104 bytes (-26.41%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 46876 bytes -6518 bytes (-12.21%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 47821 bytes -5573 bytes (-10.44%)
Brotli (Wikipedia) brotli brotli -q 11 49342 bytes -4052 bytes (-7.59%)
LZMA2 (Wikipedia) xz xz -9 50388 bytes -3006 bytes (-5.63%)
Zstandard (Wikipedia) zstd zstd -19 51729 bytes -1665 bytes (-3.12%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 52014 bytes -1380 bytes (-2.58%)

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.