Choose a version:
50% The original file has 1078204 bytes (1,052.9k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 533939 bytes (521.4k, 50%).

After GZIP compression these minified files vary in size:
cdnjs
  134761 bytes (131.6k)
CDN
unpkg
  134761 bytes (131.6k)
CDN
gzip -6 (default)
  134482 bytes (131.3k)
local copy
jsdelivr
  134405 bytes (131.3k)
CDN
gzip -9
  134058 bytes (130.9k)
local copy
libdeflate -12
  129482 bytes (126.4k)
local copy
7zip -mx=9 -tgzip
  129480 bytes (126.4k)
local copy
zultra
  129206 bytes (126.2k)
local copy
kzip -s0 -rn -b8
  129132 bytes (126.1k)
local copy
pigz -11 -n
  129059 bytes (126.0k)
local copy
Zopfli
  128960 bytes (125.9k)
local copy
Zopfli (defluff)
  128953 bytes (125.9k)
local copy

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

You will automatically get the smallest ThreeJS 92 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 5445 bytes by using my ThreeJS 92 Zopfli version instead of the best available CDN (4.22% smaller than jsdelivr, 128960 vs. 134405 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 --mls8192 --bsr15 --lazy --ohh

(found April 27, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 8192  --mls8192
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 7 more bytes (128953 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/r92/build/three.min.js --location | md5sum
c10b0dcd6981ae16bc72cf1d6c32a8da  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r92.min.zopfli.js.gz | md5sum
c10b0dcd6981ae16bc72cf1d6c32a8da  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
cdnjs 134761 bytes c10b0dcd6981ae16bc72cf1d6c32a8da (invalid)
unpkg 134761 bytes c10b0dcd6981ae16bc72cf1d6c32a8da (invalid)
jsdelivr 134405 bytes c10b0dcd6981ae16bc72cf1d6c32a8da April 23, 2018 @ 08:55

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
128960 bytes -2 bytes zopfli --i1000000 --mls8192 --bsr15 --lazy --ohh April 27, 2018 @ 06:13
128962 bytes -6 bytes zopfli --i100000 --mls8192 --bsr15 --lazy --ohh April 25, 2018 @ 17:05
128968 bytes -4 bytes zopfli --i10000 --mls8192 --bsr15 --lazy --ohh April 24, 2018 @ 00:17
128972 bytes -8 bytes zopfli --i10000 --mls2048 --bsr11 --lazy --ohh April 23, 2018 @ 22:50
128980 bytes -20 bytes zopfli --i1000 --mls8192 --bsr15 --lazy --ohh April 23, 2018 @ 09:59
129000 bytes zopfli --i100 --mls8192 --bsr15 --lazy --ohh April 23, 2018 @ 09:25

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

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
129099 129092 129235 129094 129243 129124 129226 129216 129119 129223 129145 129137 129148 129073 129136
129231 129248 129255 129245 129272 129267 129093 129097 129095 129257 129189 129204 129115 129118 129253
129215 129194 129128 129186 129130 129116 129115 129237 129244 129230 129194 129194 129075 129261 129216
129060 129178 129197 129250 129225 129179 129261 129215 129331 129180 129222 129200 129083 129251 128995
129081 129201 129219 129202 129186 129181 129060 129227 129207 129218 129223 129086 129229 129104 129194
129057 129054 129188 129219 129263 129172 129217 129217 129251 129257 129221 129233 129067 129252 129213
129220 129204 129200 129232 129225 129090 129235 129222 129229 129193 129090 129060 129086 129246 129179
129051 129052 129054 129246 129205 129201 129253 129032 129215 129030 128965 128981 129086 129241 129174
129215 129030 129214 129209 129180 129055 129177 129222 129203 129255 129214 129212 129228 129247 129182
129212 129038 129243 129211 129221 129180 129230 129236 129212 129173 129048 128975 129075 129243 129177
129078 129055 129195 129206 129226 129219 129247 129201 129191 129256 129247 129086 129076 129249 129172
129077 129052 129211 129217 129196 129222 129060 129052 129050 129057 129053 128981 128960 129252 129178
129058 129063 129198 129213 129189 129183 129207 129202 129208 129262 129215 129066 129071 129246 129198
129062 129189 129221 129176 129214 129214 129199 129212 129202 129035 129239 129063 129071 129098 129162
129052 129205 129214 129201 129191 129201 129209 129228 129202 129226 129214 129060 129074 129244 129154
129054 129056 129190 129199 129206 129204 129196 129233 129253 129260 129241 129253 129071 129248 129143
129223 129185 129053 129051 129205 129239 129247 129209 129230 129059 129225 128982 129251 128976 129154
129055 129061 129056 129198 129255 129175 129238 129203 129216 129044 129243 128978 129071 129256 129203
129076 129032 129200 129192 129200 129206 129254 129202 129175 129259 129238 128983 129078 129250 129145
129205 129148 129197 129201 129208 129217 129232 129227 129207 129034 129014 128984 129062 129257 129144
129037 129034 129035 129038 129199 129148 129221 129229 129173 129045 129155 128979 129253 129249 129188
129052 129033 129192 129210 129194 129217 129225 129209 129206 129180 129239 128974 129260 129258 129186
129064 129034 129208 129207 129218 129229 129227 129234 129185 129179 129240 129179 129073 129246 129180

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 129000 bytes 100%
1,000 128980 bytes -20 bytes 100%
10,000 128968 bytes -12 bytes 100%
100,000 128962 bytes -6 bytes 0.58%
1,000,000 128960 bytes -2 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
129162 bytes +202 bytes (+0.16%) +30 bytes
129712 bytes +752 bytes (+0.58%) +580 bytes
129714 bytes +754 bytes (+0.58%) +582 bytes
129529 bytes +569 bytes (+0.44%) +397 bytes
129448 bytes +488 bytes (+0.38%) +316 bytes
129305 bytes +345 bytes (+0.27%) +173 bytes
129247 bytes +287 bytes (+0.22%) +115 bytes
129161 bytes +201 bytes (+0.16%) +29 bytes
129132 bytes +172 bytes (+0.13%)

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 86677 bytes -42283 bytes (-32.79%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 99812 bytes -29148 bytes (-22.60%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 103629 bytes -25331 bytes (-19.64%)
Brotli (Wikipedia) brotli brotli -q 11 109583 bytes -19377 bytes (-15.03%)
LZMA2 (Wikipedia) xz xz -9 110416 bytes -18544 bytes (-14.38%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 114732 bytes -14228 bytes (-11.03%)
Zstandard (Wikipedia) zstd zstd -19 116913 bytes -12047 bytes (-9.34%)

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.