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

After GZIP compression these minified files vary in size:
cdnjs
  139018 bytes (135.8k)
CDN
unpkg
  137868 bytes (134.6k)
CDN
gzip -6 (default)
  137604 bytes (134.4k)
local copy
jsdelivr
  137460 bytes (134.2k)
CDN
gzip -9
  137097 bytes (133.9k)
local copy
7zip -mx=9 -tgzip
  132463 bytes (129.4k)
local copy
libdeflate -12
  132400 bytes (129.3k)
local copy
pigz -11 -n
  132056 bytes (129.0k)
local copy
kzip -s0 -rn -b0
  132007 bytes (128.9k)
local copy
Zopfli
  131895 bytes (128.8k)
local copy
Zopfli (defluff)
  131892 bytes (128.8k)
local copy

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

You will automatically get the smallest ThreeJS 100 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 5565 bytes by using my ThreeJS 100 Zopfli version instead of the best available CDN (4.22% smaller than jsdelivr, 131895 vs. 137460 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 --mls4096 --bsr23 --lazy --ohh

(found January 8, 2019)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 4096  --mls4096
block splitting recursion 23  --bsr23
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 3 more bytes (131892 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/r100/build/three.min.js --location | md5sum
54ea4c40b4ce924f260f543b3c9fb06e  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r100.min.zopfli.js.gz | md5sum
54ea4c40b4ce924f260f543b3c9fb06e  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
cdnjs 139018 bytes 54ea4c40b4ce924f260f543b3c9fb06e (invalid)
unpkg 137868 bytes 54ea4c40b4ce924f260f543b3c9fb06e (invalid)
jsdelivr 137460 bytes 54ea4c40b4ce924f260f543b3c9fb06e January 4, 2019 @ 15:46

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

Other Versions

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

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
131895 bytes -3 bytes zopfli --i1000000 --mls4096 --bsr23 --lazy --ohh January 8, 2019 @ 07:14
131898 bytes -3 bytes zopfli --i100000 --mls4096 --bsr30 --lazy --ohh January 4, 2019 @ 18:21
131901 bytes -2 bytes zopfli --i10000 --mls4096 --bsr23 --lazy --ohh January 4, 2019 @ 15:50
131903 bytes -7 bytes zopfli --i10000 --mls4096 --bsr30 --lazy --ohh January 4, 2019 @ 14:29
131910 bytes -21 bytes zopfli --i1000 --mls4096 --bsr30 --lazy --ohh January 4, 2019 @ 09:50
131931 bytes zopfli --i100 --mls4096 --bsr30 --lazy --ohh January 3, 2019 @ 16:50

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

Most recent activity on January 8, 2019 @ 11:11.

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
132120 132156 132145 132145 132156 132126 132146 131998 132152 132152 132152 132144 132171 132153 132135
132176 132171 132146 132152 132157 132217 132152 132045 132200 132199 132195 132190 132146 132175 132105
132233 132236 132061 132158 132126 132189 132052 131978 132062 132228 132030 131971 132177 131980 132120
132023 132189 132152 132155 132184 132152 132202 132042 132017 132211 132019 132019 132029 132011 132139
132150 132169 132159 132157 132185 132144 132183 131990 132019 132200 132032 132182 132172 132145 132137
132126 132167 132158 132152 132136 132209 132143 132043 132128 132151 132084 131939 132207 132165 132132
132187 132200 132187 132026 132133 132133 132134 132213 132103 132103 131916 131924 132172 132154 132127
132166 132147 132163 132161 132138 132139 132163 132188 132160 132139 131968 131964 132161 132117 132131
132190 132153 132171 132171 131997 132157 132149 131969 132181 132154 132013 132116 132176 132132 132139
132152 132150 132149 132145 132154 132021 132177 132082 132131 132173 132043 131959 132177 131972 132176
132158 132169 132185 132152 132151 132154 132134 132061 131974 132181 132215 132169 132164 132160 132133
132185 132149 132177 132194 132221 132169 132188 131988 132150 132200 132149 131960 132181 132163 132100
132194 132173 132162 132156 132168 132152 132139 132035 132161 132174 131966 132140 132184 131999 132100
132171 132177 132170 132162 132173 132164 132193 132220 132151 132174 132147 131967 132142 132141 132121
132212 132170 132167 132170 132148 132155 132156 132029 132151 132175 132150 132142 132143 132141 132091
132169 132167 132176 132161 132029 132175 132183 132051 132040 132173 132215 132143 132145 132143 132072
132209 132197 132174 132166 132188 131998 132141 132002 132150 132170 132128 132142 132144 132160 132108
132178 132171 132165 132167 132175 132155 132167 132018 131972 132143 132001 132149 132141 131972 132090
132182 132157 132163 132165 132180 132192 132184 132032 131970 132172 132132 131932 131959 132116 132089
132167 132171 132161 132162 132033 132181 132185 132084 132154 132171 131925 131895 132145 131975 132130
132185 132174 132172 132165 132199 132165 132140 132012 131968 132174 131956 132149 131958 132160 132128
132156 132173 132176 132162 132175 132161 132039 132001 132152 132097 131914 131895 132169 132126 132091
132156 132149 132175 132162 132157 132165 132182 132039 131959 132181 131962 131961 132146 132118 132088

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 131931 bytes 100%
1,000 131910 bytes -21 bytes 100%
10,000 131901 bytes -9 bytes 100%
100,000 131898 bytes -3 bytes 1.16%
1,000,000 131895 bytes -3 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
132007 bytes +112 bytes (+0.08%)
132675 bytes +780 bytes (+0.59%) +668 bytes
132607 bytes +712 bytes (+0.54%) +600 bytes
132449 bytes +554 bytes (+0.42%) +442 bytes
132355 bytes +460 bytes (+0.35%) +348 bytes
132154 bytes +259 bytes (+0.20%) +147 bytes
132138 bytes +243 bytes (+0.18%) +131 bytes
132104 bytes +209 bytes (+0.16%) +97 bytes
132081 bytes +186 bytes (+0.14%) +74 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 88848 bytes -43047 bytes (-32.64%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 102295 bytes -29600 bytes (-22.44%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 105882 bytes -26013 bytes (-19.72%)
Brotli (Wikipedia) brotli brotli -q 11 112245 bytes -19650 bytes (-14.90%)
LZMA2 (Wikipedia) xz xz -9 113056 bytes -18839 bytes (-14.28%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 117657 bytes -14238 bytes (-10.79%)
Zstandard (Wikipedia) zstd zstd -19 118919 bytes -12976 bytes (-9.84%)

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