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

After GZIP compression these minified files vary in size:
unpkg
  185190 bytes (180.8k)
CDN
gzip -6 (default)
  151399 bytes (147.9k)
local copy
jsdelivr
  151293 bytes (147.7k)
CDN
gzip -9
  150797 bytes (147.3k)
local copy
libdeflate -12
  145734 bytes (142.3k)
local copy
7zip -mx=9 -tgzip
  145577 bytes (142.2k)
local copy
zultra
  145458 bytes (142.0k)
local copy
Zopfli
  145225 bytes (141.8k)
local copy
kzip -s0 -rn -b0
  145165 bytes (141.8k)
local copy
pigz -11 -n
  145139 bytes (141.7k)
local copy

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

You will automatically get the smallest ThreeJS 114 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 6068 bytes by using my ThreeJS 114 Zopfli version instead of the best available CDN (4.18% smaller than jsdelivr, 145225 vs. 151293 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 --mls1024 --bsr16 --lazy --ohh

(found March 4, 2020)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 1024  --mls1024
block splitting recursion 16  --bsr16
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 4 more bytes (145221 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/r114/build/three.min.js --location | md5sum
968bded625343c81f1c60f08c21bceb0  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r114.min.zopfli.js.gz | md5sum
968bded625343c81f1c60f08c21bceb0  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 185190 bytes 968bded625343c81f1c60f08c21bceb0 (invalid)
jsdelivr 151293 bytes 968bded625343c81f1c60f08c21bceb0 March 2, 2020 @ 15:54

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
145225 bytes -4 bytes zopfli --i1000000 --mls1024 --bsr16 --lazy --ohh March 4, 2020 @ 21:54
145229 bytes -3 bytes zopfli --i100000 --mls1024 --bsr16 --lazy --ohh March 3, 2020 @ 13:17
145232 bytes -18 bytes zopfli --i10000 --mls1024 --bsr16 --lazy --ohh March 2, 2020 @ 21:20
145250 bytes -12 bytes zopfli --i1000 --mls1024 --bsr16 --lazy --ohh March 2, 2020 @ 17:11
145262 bytes -18 bytes zopfli --i1000 --mls32768 --bsr23 --lazy --ohh March 2, 2020 @ 17:11
145280 bytes zopfli --i100 --mls1024 --bsr16 --lazy --ohh March 2, 2020 @ 16:14

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

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
145456 145456 145356 145351 145456 145422 145483 145524 145388 145364 145466 145527 145435 145403 145388
145396 145402 145437 145440 145459 145431 145396 145387 145387 145384 145364 145349 145371 145402 145378
145311 145310 145329 145391 145413 145313 145311 145409 145313 145261 145382 145413 145411 145381 145415
145340 145340 145346 145368 145359 145355 145367 145318 145310 145329 145302 145432 145400 145429 145407
145343 145342 145316 145346 145386 145389 145395 145320 145336 145257 145310 145320 145426 145377 145374
145349 145356 145345 145318 145362 145318 145312 145330 145370 145353 145320 145427 145429 145423 145345
145536 145397 145389 145411 145395 145383 145341 145280 145306 145325 145418 145357 145412 145342 145413
145362 145355 145361 145359 145339 145312 145318 145322 145405 145285 145308 145347 145404 145432 145320
145366 145385 145388 145390 145394 145341 145335 145277 145368 145350 145261 145321 145293 145349 145296
145344 145340 145258 145258 145373 145291 145336 145278 145410 145419 145419 145414 145423 145411 145339
145289 145362 145340 145343 145365 145309 145308 145349 145311 145339 145315 145317 145279 145325 145337
145408 145414 145358 145315 145344 145354 145306 145370 145285 145251 145303 145425 145410 145403 145351
145339 145339 145378 145379 145377 145358 145328 145329 145334 145225 145321 145342 145289 145337 145342
145407 145426 145390 145405 145385 145390 145337 145320 145321 145417 145409 145410 145426 145403 145372
145358 145339 145361 145351 145373 145346 145331 145319 145305 145348 145317 145348 145296 145336 145256
145343 145340 145320 145341 145383 145315 145327 145316 145311 145286 145415 145413 145401 145430 145417
145337 145338 145339 145351 145343 145314 145318 145307 145298 145259 145322 145344 145317 145345 145291
145356 145357 145356 145345 145364 145308 145304 145312 145304 145327 145307 145402 145407 145430 145347
145341 145339 145339 145385 145371 145323 145303 145302 145293 145261 145322 145407 145320 145313 145337
145344 145347 145407 145339 145357 145308 145315 145278 145304 145328 145305 145304 145401 145426 145241
145334 145342 145407 145313 145373 145311 145321 145313 145309 145406 145411 145460 145422 145429 145329
145360 145356 145380 145327 145346 145309 145279 145314 145310 145327 145327 145318 145299 145351 145336
145351 145362 145343 145391 145358 145345 145308 145316 145388 145286 145326 145365 145399 145330 145371

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 145280 bytes 100%
1,000 145250 bytes -30 bytes 100%
10,000 145232 bytes -18 bytes 100%
100,000 145229 bytes -3 bytes 0.58%
1,000,000 145225 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
145165 bytes -60 bytes (-0.04%)
145906 bytes +681 bytes (+0.47%) +741 bytes
145847 bytes +622 bytes (+0.43%) +682 bytes
145632 bytes +407 bytes (+0.28%) +467 bytes
145500 bytes +275 bytes (+0.19%) +335 bytes
145492 bytes +267 bytes (+0.18%) +327 bytes
145444 bytes +219 bytes (+0.15%) +279 bytes
145392 bytes +167 bytes (+0.11%) +227 bytes
145387 bytes +162 bytes (+0.11%) +222 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 97074 bytes -48151 bytes (-33.16%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 112381 bytes -32844 bytes (-22.62%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 117958 bytes -27267 bytes (-18.78%)
Brotli (Wikipedia) brotli brotli -q 11 122971 bytes -22254 bytes (-15.32%)
LZMA2 (Wikipedia) xz xz -9 123856 bytes -21369 bytes (-14.71%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 129642 bytes -15583 bytes (-10.73%)
Zstandard (Wikipedia) zstd zstd -19 129948 bytes -15277 bytes (-10.52%)

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.