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

After GZIP compression these minified files vary in size:
Boot
  148968 bytes (145.5k)
CDN
cdnjs
  125341 bytes (122.4k)
CDN
unpkg
  124295 bytes (121.4k)
CDN
gzip -6 (default)
  124097 bytes (121.2k)
local copy
Google
  124053 bytes (121.1k)
CDN
jsdelivr
  124007 bytes (121.1k)
CDN
gzip -9
  123707 bytes (120.8k)
local copy
libdeflate -12
  119389 bytes (116.6k)
local copy
zultra
  119238 bytes (116.4k)
local copy
7zip -mx=9 -tgzip
  119214 bytes (116.4k)
local copy
pigz -11 -n
  118985 bytes (116.2k)
local copy
kzip -s0 -rn -b0
  118978 bytes (116.2k)
local copy
Zopfli
  118881 bytes (116.1k)
local copy
Zopfli (defluff)
  118875 bytes (116.1k)
local copy

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

You will automatically get the smallest ThreeJS 80 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 5126 bytes by using my ThreeJS 80 Zopfli version instead of the best available CDN (4.31% smaller than jsdelivr, 118881 vs. 124007 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 --mls2048 --bsr23 --lazy --ohh

(found August 24, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 2048  --mls2048
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 6 more bytes (118875 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/r80/build/three.min.js --location | md5sum
8259a8acfe2609a9d13d8d5360ab2a96  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r80.min.zopfli.js.gz | md5sum
8259a8acfe2609a9d13d8d5360ab2a96  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 148968 bytes 8259a8acfe2609a9d13d8d5360ab2a96 August 24, 2016 @ 15:22
cdnjs 125341 bytes 8259a8acfe2609a9d13d8d5360ab2a96 (invalid)
unpkg 124295 bytes 8259a8acfe2609a9d13d8d5360ab2a96 August 23, 2016 @ 08:34
jsdelivr 124007 bytes 8259a8acfe2609a9d13d8d5360ab2a96 February 19, 2018 @ 16:22

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Google 124053 bytes 1b7e7fe6c5db801bdc25fbc928ab8af0 < (function(h,pa){"object"===typeof exports&&"undefined"!==t [...]
< c?c:1001;this.wrapT=void 0!==d?d:1001;this.magFilter=void [...]
< function ja(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c|| [...]
< 1,2,0,2,3]);G=y.createBuffer();D=y.createBuffer();y.bindBu [...]
< y.shaderSource(P,["precision "+a.getPrecision()+" float;", [...]
< y.compileShader(O);y.compileShader(P);y.attachShader(L,O); [...]
< y.getUniformLocation(K,"fogType");m=y.getUniformLocation(K [...]
< F.disable(y.CULL_FACE);F.enable(y.BLEND);y.bindBuffer(y.AR [...]
< (y.uniform1i(p,0),O=L=0);for(var P=0,Q=b.length;P<Q;P++){v [...]
< y.uniform2f(d,V.map.repeat.x,V.map.repeat.y)):(y.uniform2f [...]
[...]
December 20, 2016 @ 14:06

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
118881 bytes -3 bytes zopfli --i1000000 --mls2048 --bsr23 --lazy --ohh August 24, 2016 @ 12:57
118884 bytes -3 bytes zopfli --i100000 --mls2048 --bsr23 --lazy --ohh August 23, 2016 @ 11:51
118887 bytes -13 bytes zopfli --i10000 --mls2048 --bsr23 --lazy --ohh August 23, 2016 @ 09:25
118900 bytes -33 bytes zopfli --i1000 --mls2048 --bsr23 --lazy --ohh August 23, 2016 @ 09:04
118933 bytes zopfli --i100 --mls2048 --bsr23 --lazy --ohh August 23, 2016 @ 08:45

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

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
119127 119160 119087 119079 119092 119139 119066 119185 119006 119013 119010 119012 119042 119030 119033
119007 118965 118992 118983 119020 119025 119012 118987 119135 119052 118933 119091 119023 119054 119044
118996 118995 119149 119056 119047 119032 119017 119070 119027 119005 119055 119063 119031 119007 119050
119004 118995 119057 119042 119041 119059 119041 119010 119013 119014 119018 119067 119007 118999 118999
119059 119067 118961 119066 119032 119019 119018 119062 119048 119016 119034 119052 119033 118984 119059
118978 118991 118974 119021 119013 119047 119014 119018 118941 119011 119032 119031 119043 118983 118983
118967 118972 118985 118975 119016 119030 119038 118933 118994 119014 119000 118972 119048 119031 119063
119043 118984 118977 118985 118955 119068 119034 118996 118992 119018 119028 118998 119028 119037 119091
118987 118989 118970 119048 119048 118951 119052 118994 118911 119032 119010 119017 119029 119025 119019
118975 118984 118988 118972 119057 119018 118951 118958 118963 119033 118997 119028 119041 119055 119011
118992 118983 118977 118912 119040 118993 119030 118925 118915 119017 119000 119018 119060 118990 119047
118984 118985 118977 118913 119039 119055 119009 118961 119055 119016 119002 119025 119031 119010 119062
118994 118997 118974 118999 119057 118980 119018 118950 119047 119017 118916 118982 119034 118989 119052
119021 118986 118993 118985 118967 119014 119022 119053 118925 119031 119033 119025 119023 119005 119040
118990 118991 118985 118958 119061 119062 119017 118974 118939 119031 119010 119019 119047 118989 119043
118993 118993 118981 118917 119057 118986 119017 118934 119049 119015 119010 118987 119019 119007 118987
118999 118998 118937 118991 119002 119039 118938 119030 119000 119034 119005 119024 119048 118974 118952
118995 118999 119032 118913 119017 118979 119019 118999 118926 119013 119035 119046 119034 119046 119046
119175 119034 118972 118994 118972 119048 118936 119008 118974 119030 119009 119018 119024 119010 119061
118985 118984 119026 118914 118987 118981 119020 118944 118964 119017 118881 118987 118948 119019 118986
118985 118990 118975 119051 119029 119052 119053 119054 119047 119004 118994 119020 119039 118982 119029
118968 118981 118983 118985 119020 118990 119048 119053 118962 119024 118987 119017 119038 119010 119046
118982 118988 118985 118989 119038 118982 118956 118931 118923 119026 119004 118985 119024 118974 119042

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 118933 bytes 100%
1,000 118900 bytes -33 bytes 100%
10,000 118887 bytes -13 bytes 100%
100,000 118884 bytes -3 bytes 2.61%
1,000,000 118881 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
118978 bytes +97 bytes (+0.08%)
119502 bytes +621 bytes (+0.52%) +524 bytes
119485 bytes +604 bytes (+0.51%) +507 bytes
119327 bytes +446 bytes (+0.38%) +349 bytes
119295 bytes +414 bytes (+0.35%) +317 bytes
119139 bytes +258 bytes (+0.22%) +161 bytes
119152 bytes +271 bytes (+0.23%) +174 bytes
119099 bytes +218 bytes (+0.18%) +121 bytes
119064 bytes +183 bytes (+0.15%) +86 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 81267 bytes -37614 bytes (-31.64%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 92799 bytes -26082 bytes (-21.94%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 99581 bytes -19300 bytes (-16.23%)
Brotli (Wikipedia) brotli brotli -q 11 101838 bytes -17043 bytes (-14.34%)
LZMA2 (Wikipedia) xz xz -9 102664 bytes -16217 bytes (-13.64%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 106612 bytes -12269 bytes (-10.32%)
Zstandard (Wikipedia) zstd zstd -19 108534 bytes -10347 bytes (-8.70%)

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.