Choose a version:
25% The original file has 565450 bytes (552.2k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 140742 bytes (137.4k, 25%).

After GZIP compression these minified files vary in size:
Boot
  56186 bytes (54.9k)
CDN
cdnjs
  48828 bytes (47.7k)
CDN
gzip -6 (default)
  48653 bytes (47.5k)
local copy
gzip -9
  48608 bytes (47.5k)
local copy
7zip -mx=9 -tgzip
  46394 bytes (45.3k)
local copy
libdeflate -12
  46348 bytes (45.3k)
local copy
zultra
  46323 bytes (45.2k)
local copy
kzip -s0 -rn -b1
  46319 bytes (45.2k)
local copy
pigz -11 -n
  46312 bytes (45.2k)
local copy
Zopfli
  46229 bytes (45.1k)
local copy
Zopfli (defluff)
  46228 bytes (45.1k)
local copy

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

You will automatically get the smallest Dojo 1.7.7 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 2599 bytes by using my Dojo 1.7.7 Zopfli version instead of the best available CDN (5.62% smaller than cdnjs, 46229 vs. 48828 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 --mls16384 --bsr40 --lazy --ohh

(found March 16, 2022)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 40  --bsr40
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 (46228 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.7.7/dojo.js --location | md5sum
c61a4912ff79a5f783724d1c885dd26d  -
curl --silent --compressed https://minime.stephan-brumme.com/files/dojo/dojo-1.7.7.min.zopfli.js.gz | md5sum
c61a4912ff79a5f783724d1c885dd26d  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 56186 bytes c61a4912ff79a5f783724d1c885dd26d March 19, 2015 @ 15:36
cdnjs 48828 bytes c61a4912ff79a5f783724d1c885dd26d 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
46229 bytes -1 byte zopfli --i1000000 --mls16384 --bsr40 --lazy --ohh March 16, 2022 @ 20:57
46230 bytes -1 byte zopfli --i100000 --mls32768 --bsr12 --lazy --ohh December 2, 2015 @ 18:35
46231 bytes -2 bytes zopfli --i100000 --mls16384 --bsr10 --lazy --ohh December 2, 2015 @ 17:38
46233 bytes -2 bytes zopfli --i10000 --mls16384 --bsr10 --lazy --ohh November 23, 2015 @ 00:12
46235 bytes -1 byte zopfli --i10000 --mls16384 --bsr12 --lazy --ohh November 22, 2015 @ 22:50
46236 bytes -1 byte zopfli --i10000 --mls32 --bsr19 --lazy --ohh October 14, 2015 @ 05:50
46237 bytes -1 byte zopfli --i1000 --mls16384 --bsr16 --lazy --ohh September 12, 2015 @ 19:36
46238 bytes -2 bytes zopfli --i1000 --mls256 --bsr10 --lazy --ohh September 12, 2015 @ 19:36
46240 bytes -2 bytes zopfli --i1000 --mls512 --bsr16 --lazy --ohh September 10, 2015 @ 21:29
46242 bytes -1 byte zopfli --i1000 --mls512 --bsr11 --lazy --ohh September 10, 2015 @ 21:29
46243 bytes -2 bytes zopfli --i1000 --mls512 --bsr8 --lazy --ohh September 10, 2015 @ 21:25
46245 bytes -1 byte zopfli --i1000 --mls512 --bsr4 --lazy --ohh September 10, 2015 @ 21:25
46246 bytes zopfli --i100 --mls512 --bsr11 --lazy --ohh September 10, 2015 @ 15:08

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

Most recent activity on March 17, 2022 @ 02:03.

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
46250 46253 46253 46248 46247 46246 46246 46245 46244 46276 46240 46265 46265 46270 46248
46241 46237 46242 46237 46242 46245 46249 46242 46243 46263 46262 46252 46254 46258 46241
46243 46236 46245 46241 46243 46246 46255 46247 46246 46253 46251 46252 46249 46251 46229
46241 46238 46240 46241 46236 46250 46252 46236 46246 46251 46258 46253 46263 46251 46244
46241 46239 46242 46241 46243 46250 46254 46241 46241 46262 46260 46261 46265 46241 46247
46241 46239 46236 46236 46237 46251 46249 46241 46246 46247 46249 46256 46258 46250 46240
46240 46237 46241 46237 46237 46253 46250 46236 46241 46249 46257 46251 46266 46231 46239
46239 46243 46244 46243 46241 46250 46241 46241 46241 46249 46249 46253 46253 46231 46247
46242 46238 46239 46241 46239 46245 46252 46237 46250 46247 46252 46260 46253 46230 46230
46241 46244 46242 46236 46235 46249 46239 46241 46252 46253 46253 46249 46265 46236 46248
46239 46240 46239 46243 46236 46250 46245 46250 46251 46249 46254 46252 46256 46240 46243
46241 46242 46237 46241 46243 46250 46248 46244 46245 46250 46252 46259 46251 46252 46247
46241 46239 46239 46241 46236 46248 46251 46241 46238 46249 46249 46249 46266 46231 46246
46239 46239 46240 46241 46239 46248 46251 46242 46247 46247 46253 46261 46251 46231 46242
46240 46243 46237 46241 46236 46249 46253 46239 46244 46249 46249 46250 46256 46250 46245
46242 46237 46240 46237 46236 46250 46241 46236 46246 46249 46257 46250 46256 46251 46243
46239 46239 46240 46237 46239 46253 46251 46241 46247 46250 46248 46250 46258 46242 46239
46240 46236 46242 46241 46236 46257 46253 46236 46247 46248 46249 46246 46257 46241 46243
46241 46236 46241 46242 46237 46251 46251 46243 46246 46248 46256 46246 46241 46236 46248
46240 46239 46241 46237 46245 46258 46256 46241 46241 46249 46254 46253 46266 46252 46240
46239 46241 46241 46242 46237 46250 46252 46239 46243 46249 46257 46256 46250 46241 46244
46239 46241 46239 46241 46238 46249 46249 46241 46241 46249 46252 46255 46262 46235 46236
46239 46239 46239 46239 46236 46252 46255 46241 46252 46255 46252 46259 46265 46229 46243

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 46243 bytes 100%
1,000 46237 bytes -6 bytes 100%
10,000 46233 bytes -4 bytes 100%
100,000 46230 bytes -3 bytes 2.32%
1,000,000 46229 bytes -1 byte 1.16%
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
46352 bytes +123 bytes (+0.27%) +33 bytes
46319 bytes +90 bytes (+0.19%)
46349 bytes +120 bytes (+0.26%) +30 bytes
46387 bytes +158 bytes (+0.34%) +68 bytes
46411 bytes +182 bytes (+0.39%) +92 bytes
46403 bytes +174 bytes (+0.38%) +84 bytes
46431 bytes +202 bytes (+0.44%) +112 bytes
46462 bytes +233 bytes (+0.50%) +143 bytes
46483 bytes +254 bytes (+0.55%) +164 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 34493 bytes -11736 bytes (-25.39%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 40479 bytes -5750 bytes (-12.44%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 41373 bytes -4856 bytes (-10.50%)
Brotli (Wikipedia) brotli brotli -q 11 42492 bytes -3737 bytes (-8.08%)
LZMA2 (Wikipedia) xz xz -9 43544 bytes -2685 bytes (-5.81%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 44837 bytes -1392 bytes (-3.01%)
Zstandard (Wikipedia) zstd zstd -19 44858 bytes -1371 bytes (-2.97%)

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.