Choose a version:
53% The original file has 1156150 bytes (1,129.1k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 610143 bytes (595.8k, 53%).

After GZIP compression these minified files vary in size:
unpkg
  203866 bytes (199.1k)
CDN
gzip -6 (default)
  151328 bytes (147.8k)
local copy
jsdelivr
  151157 bytes (147.6k)
CDN
gzip -9
  150790 bytes (147.3k)
local copy
libdeflate -12
  145550 bytes (142.1k)
local copy
7zip -mx=9 -tgzip
  145400 bytes (142.0k)
local copy
zultra
  145277 bytes (141.9k)
local copy
kzip -s0 -rn -b8
  145150 bytes (141.7k)
local copy
Zopfli
  144994 bytes (141.6k)
local copy
pigz -11 -n
  144918 bytes (141.5k)
local copy

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

You will automatically get the smallest ThreeJS 130 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 6163 bytes by using my ThreeJS 130 Zopfli version instead of the best available CDN (4.25% smaller than jsdelivr, 144994 vs. 151157 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 --mls32768 --bsr9 --lazy --ohh

(found July 2, 2021)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 32768  --mls32768
block splitting recursion 9  --bsr9
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 6 more bytes (144988 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/r130/build/three.min.js --location | md5sum
937996c4ecb3ead5b2817a348c90657d  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r130.min.zopfli.js.gz | md5sum
937996c4ecb3ead5b2817a348c90657d  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 203866 bytes 937996c4ecb3ead5b2817a348c90657d (invalid)
jsdelivr 151157 bytes 937996c4ecb3ead5b2817a348c90657d June 30, 2021 @ 14:40

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
144994 bytes -4 bytes zopfli --i1000000 --mls32768 --bsr9 --lazy --ohh July 2, 2021 @ 11:16
144998 bytes -7 bytes zopfli --i100000 --mls32768 --bsr9 --lazy --ohh June 30, 2021 @ 18:52
145005 bytes -13 bytes zopfli --i10000 --mls32768 --bsr9 --lazy --ohh June 30, 2021 @ 16:01
145018 bytes -27 bytes zopfli --i1000 --mls32768 --bsr9 --lazy --ohh June 30, 2021 @ 15:35
145045 bytes zopfli --i100 --mls32768 --bsr9 --lazy --ohh June 30, 2021 @ 15:22

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

Most recent activity on July 2, 2021 @ 13:04.

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
145284 145257 145242 145247 145259 145240 145249 145252 145157 145208 145176 145157 145251 145206 145169
145227 145221 145214 145207 145086 145203 145194 145293 145150 145193 145149 145141 145104 145064 145008
145094 145165 145140 145137 145085 145195 145193 145144 145154 145145 145210 145146 145102 145078 145121
145138 145185 145097 145114 145082 145138 145156 145163 145258 145168 145187 145157 145074 145132 145118
145151 145173 145125 145119 145088 145102 145098 145167 145156 145144 145146 145144 145161 145140 145089
145203 145188 145185 145188 145178 145177 145184 145170 145168 145166 145153 145180 145122 145151 144994
145169 145203 145178 145193 145098 145081 145176 145197 145178 145168 145129 145163 145145 145157 145138
145135 145154 145177 145125 145099 145139 145103 145199 145200 145268 145138 145159 145142 145054 145073
145079 145185 145180 145177 145286 145286 145299 145188 145272 145295 145141 145163 145087 145137 145108
145231 145137 145193 145127 145091 145083 145141 145174 145248 145273 145198 145105 145125 145145 145148
145129 145195 145125 145196 145080 145172 145171 145171 145152 145169 145138 145146 145121 145152 145157
145144 145140 145096 145191 145169 145139 145139 145208 145132 145172 145135 145152 145109 145149 145115
145231 145207 145141 145168 145124 145200 145145 145151 145142 145276 145154 145165 145134 145061 145109
145143 145237 145295 145204 145125 145139 145098 145188 145177 145143 145159 145175 145047 145171 145108
145296 145180 145187 145319 145204 145320 145095 145154 145142 145205 145140 145152 145040 145149 145149
145326 145318 145294 145330 145294 145288 145289 145135 145159 145139 145171 145172 145134 145145 145151
145281 145150 145315 145122 145180 145084 145127 145153 145148 145131 145159 145162 145141 145163 145134
145334 145222 145216 145182 145313 145309 145185 145301 145154 145148 145145 145169 145156 145063 145138
145314 145216 145190 145186 145295 145198 145193 145295 145156 145159 145176 145163 145155 145060 145137
145330 145290 145304 145320 145130 145135 145129 145161 145144 145138 145168 145166 145156 145076 145125
145230 145229 145311 145215 145194 145083 145126 145139 145169 145153 145143 145144 145136 145145 145121
145295 145230 145216 145199 145319 145173 145170 145160 145134 145144 145151 145144 145160 145072 145149
145227 145236 145294 145210 145195 145082 145082 145186 145175 145188 145151 145077 145135 145139 145118

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 145045 bytes 100%
1,000 145018 bytes -27 bytes 100%
10,000 145005 bytes -13 bytes 100%
100,000 144998 bytes -7 bytes 0.58%
1,000,000 144994 bytes -4 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
145156 bytes +162 bytes (+0.11%) +6 bytes
145534 bytes +540 bytes (+0.37%) +384 bytes
145530 bytes +536 bytes (+0.37%) +380 bytes
145267 bytes +273 bytes (+0.19%) +117 bytes
145238 bytes +244 bytes (+0.17%) +88 bytes
145236 bytes +242 bytes (+0.17%) +86 bytes
145225 bytes +231 bytes (+0.16%) +75 bytes
145225 bytes +231 bytes (+0.16%) +75 bytes
145150 bytes +156 bytes (+0.11%)

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 97895 bytes -47099 bytes (-32.48%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 112676 bytes -32318 bytes (-22.29%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 116755 bytes -28239 bytes (-19.48%)
Brotli (Wikipedia) brotli brotli -q 11 122527 bytes -22467 bytes (-15.50%)
LZMA2 (Wikipedia) xz xz -9 122900 bytes -22094 bytes (-15.24%)
Zstandard (Wikipedia) zstd zstd -19 129048 bytes -15946 bytes (-11.00%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 130214 bytes -14780 bytes (-10.19%)

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.