Choose a version:
48% The original file has 1002348 bytes (978.9k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 483776 bytes (472.4k, 48%).

After GZIP compression these minified files vary in size:
Boot
  150314 bytes (146.8k)
CDN
cdnjs
  126514 bytes (123.5k)
CDN
unpkg
  125422 bytes (122.5k)
CDN
Google
  125229 bytes (122.3k)
CDN
jsdelivr
  125144 bytes (122.2k)
CDN
gzip -6 (default)
  125134 bytes (122.2k)
local copy
gzip -9
  124760 bytes (121.8k)
local copy
libdeflate -12
  120640 bytes (117.8k)
local copy
7zip -mx=9 -tgzip
  120552 bytes (117.7k)
local copy
zultra
  120383 bytes (117.6k)
local copy
pigz -11 -n
  120243 bytes (117.4k)
local copy
kzip -s0 -rn -b0
  120211 bytes (117.4k)
local copy
Zopfli
  120126 bytes (117.3k)
local copy
Zopfli (defluff)
  120121 bytes (117.3k)
local copy

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

You will automatically get the smallest ThreeJS 82 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 5018 bytes by using my ThreeJS 82 Zopfli version instead of the best available CDN (4.18% smaller than jsdelivr, 120126 vs. 125144 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 --mls512 --bsr19 --lazy --ohh

(found October 26, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 512  --mls512
block splitting recursion 19  --bsr19
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 5 more bytes (120121 bytes).

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://raw.githubusercontent.com/mrdoob/three.js/r82/build/three.min.js --location | md5sum
27b214112cf8cd61b9cfee9d38415c4e  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r82.min.zopfli.js.gz | md5sum
27b214112cf8cd61b9cfee9d38415c4e  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mrdoob/three.js/r82/build/three.min.js --location | sha1sum
0d310f742a35dac34bfa34a0b363a207d620f9a6  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r82.min.zopfli.js.gz | sha1sum
0d310f742a35dac34bfa34a0b363a207d620f9a6  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 150314 bytes 27b214112cf8cd61b9cfee9d38415c4e (invalid)
cdnjs 126514 bytes 27b214112cf8cd61b9cfee9d38415c4e (invalid)
unpkg 125422 bytes 27b214112cf8cd61b9cfee9d38415c4e October 25, 2016 @ 11:04
Google 125229 bytes 27b214112cf8cd61b9cfee9d38415c4e December 20, 2016 @ 14:06
jsdelivr 125144 bytes 27b214112cf8cd61b9cfee9d38415c4e February 19, 2018 @ 16:22

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

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

148, 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50

The project site contains an overview how well these versions were compressed.
Other interesting projects are AngularJS, BackboneJS, Bootstrap, D3, Dojo, Ember, jQuery, Knockout, lodash, React, Socket.IO, UnderscoreJS and Vue.

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
120126 bytes -3 bytes zopfli --i1000000 --mls512 --bsr19 --lazy --ohh October 26, 2016 @ 16:20
120129 bytes -3 bytes zopfli --i100000 --mls512 --bsr19 --lazy --ohh October 25, 2016 @ 17:08
120132 bytes -8 bytes zopfli --i10000 --mls512 --bsr19 --lazy --ohh October 25, 2016 @ 11:46
120140 bytes -32 bytes zopfli --i1000 --mls512 --bsr19 --lazy --ohh October 25, 2016 @ 11:19
120172 bytes zopfli --i100 --mls512 --bsr19 --lazy --ohh October 25, 2016 @ 11:12

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

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
120314 120339 120343 120325 120309 120295 120333 120291 120339 120357 120343 120440 120372 120355 120341
120377 120373 120376 120373 120231 120230 120261 120379 120380 120382 120224 120228 120247 120380 120268
120359 120260 120261 120363 120362 120379 120228 120255 120201 120294 120290 120317 120250 120227 120229
120362 120228 120368 120363 120358 120213 120209 120203 120219 120196 120195 120294 120241 120233 120271
120228 120229 120207 120210 120262 120268 120202 120245 120192 120302 120263 120220 120221 120280 120279
120213 120221 120209 120200 120212 120266 120196 120216 120222 120286 120187 120221 120221 120218 120292
120222 120211 120216 120209 120212 120237 120150 120194 120203 120261 120215 120328 120226 120294 120321
120222 120217 120224 120233 120209 120193 120203 120162 120210 120313 120286 120214 120295 120205 120268
120230 120221 120214 120212 120201 120217 120227 120165 120211 120304 120199 120287 120295 120283 120276
120210 120208 120214 120209 120209 120217 120201 120191 120195 120159 120182 120261 120215 120262 120277
120212 120208 120218 120214 120211 120199 120209 120203 120201 120293 120238 120217 120225 120250 120309
120219 120235 120215 120212 120303 120292 120199 120197 120224 120204 120191 120221 120215 120253 120302
120216 120225 120211 120212 120206 120201 120189 120205 120208 120258 120255 120212 120164 120257 120305
120235 120217 120219 120222 120298 120273 120163 120150 120150 120209 120253 120201 120219 120201 120314
120215 120223 120208 120218 120216 120294 120204 120194 120217 120266 120255 120266 120273 120266 120308
120224 120210 120211 120212 120205 120284 120200 120139 120126 120214 120201 120208 120222 120211 120216
120217 120214 120207 120212 120208 120230 120249 120195 120149 120304 120263 120277 120259 120270 120319
120220 120212 120214 120212 120213 120284 120189 120271 120215 120294 120284 120209 120224 120208 120277
120212 120209 120213 120306 120289 120303 120289 120153 120151 120268 120259 120267 120226 120254 120306
120212 120223 120206 120210 120197 120265 120293 120264 120250 120262 120256 120264 120223 120256 120279
120210 120223 120216 120304 120292 120297 120289 120196 120292 120288 120257 120269 120282 120252 120327
120224 120209 120218 120204 120303 120193 120288 120265 120186 120290 120283 120273 120173 120262 120307
120200 120209 120209 120212 120200 120196 120200 120135 120206 120188 120290 120263 120174 120256 120280

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 120172 bytes 100%
1,000 120140 bytes -32 bytes 100%
10,000 120132 bytes -8 bytes 100%
100,000 120129 bytes -3 bytes 0.87%
1,000,000 120126 bytes -3 bytes 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
120211 bytes +85 bytes (+0.07%)
120722 bytes +596 bytes (+0.50%) +511 bytes
120699 bytes +573 bytes (+0.48%) +488 bytes
120571 bytes +445 bytes (+0.37%) +360 bytes
120505 bytes +379 bytes (+0.32%) +294 bytes
120372 bytes +246 bytes (+0.20%) +161 bytes
120367 bytes +241 bytes (+0.20%) +156 bytes
120304 bytes +178 bytes (+0.15%) +93 bytes
120294 bytes +168 bytes (+0.14%) +83 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 81835 bytes -38291 bytes (-31.88%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 93907 bytes -26219 bytes (-21.83%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 100549 bytes -19577 bytes (-16.30%)
Brotli (Wikipedia) brotli brotli -q 11 102800 bytes -17326 bytes (-14.42%)
LZMA2 (Wikipedia) xz xz -9 103504 bytes -16622 bytes (-13.84%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 107805 bytes -12321 bytes (-10.26%)
Zstandard (Wikipedia) zstd zstd -19 109458 bytes -10668 bytes (-8.88%)

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.