Choose a version:
53% The original file has 939702 bytes (917.7k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 496830 bytes (485.2k, 53%).

After GZIP compression these minified files vary in size:
Boot
  141165 bytes (137.9k)
CDN
cdnjs
  116961 bytes (114.2k)
CDN
unpkg
  116421 bytes (113.7k)
CDN
gzip -6 (default)
  115702 bytes (113.0k)
local copy
Google
  115632 bytes (112.9k)
CDN
gzip -9
  115270 bytes (112.6k)
local copy
libdeflate -12
  111210 bytes (108.6k)
local copy
7zip -mx=9 -tgzip
  111121 bytes (108.5k)
local copy
zultra
  111108 bytes (108.5k)
local copy
kzip -s0 -rn -b0
  110783 bytes (108.2k)
local copy
pigz -11 -n
  110755 bytes (108.2k)
local copy
Zopfli
  110717 bytes (108.1k)
local copy
Zopfli (defluff)
  110715 bytes (108.1k)
local copy

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

You will automatically get the smallest ThreeJS 75 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 4915 bytes by using my ThreeJS 75 Zopfli version instead of the best available CDN (4.44% smaller than Google, 110717 vs. 115632 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 --mls512 --bsr17 --lazy --ohh

(found March 17, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 512  --mls512
block splitting recursion 17  --bsr17
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 2 more bytes (110715 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/r75/build/three.min.js --location | md5sum
1d9fca28f3bf5decef9cae38fa5b9192  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r75.min.zopfli.js.gz | md5sum
1d9fca28f3bf5decef9cae38fa5b9192  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 141165 bytes 1d9fca28f3bf5decef9cae38fa5b9192 May 6, 2016 @ 13:25
cdnjs 116961 bytes 1d9fca28f3bf5decef9cae38fa5b9192 (invalid)
Google 115632 bytes 1d9fca28f3bf5decef9cae38fa5b9192 May 13, 2016 @ 20:29

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
unpkg 116421 bytes cf3c7e29eaf77f9d565d2619670737ca < // threejs.org/license
> var self = self || {};// threejs.org/license
>
> // Export the THREE object for **Node.js**, with
> // backwards-compatibility for the old `require()` API. If [...]
> // the browser, add `_` as a global object via a string id [...]
> // for Closure Compiler "advanced" mode.
> if (typeof exports !== 'undefined') {
> if (typeof module !== 'undefined' && module.exports) {
> exports = module.exports = THREE;
[...]
July 11, 2016 @ 15:49

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
110717 bytes -8 bytes zopfli --i1000000 --mls512 --bsr17 --lazy --ohh March 17, 2016 @ 22:16
110725 bytes -7 bytes zopfli --i100000 --mls512 --bsr17 --lazy --ohh March 16, 2016 @ 14:49
110732 bytes -20 bytes zopfli --i10000 --mls512 --bsr17 --lazy --ohh March 16, 2016 @ 11:05
110752 bytes -22 bytes zopfli --i1000 --mls256 --bsr23 --lazy --ohh March 16, 2016 @ 10:38
110774 bytes zopfli --i100 --mls256 --bsr23 --lazy --ohh March 16, 2016 @ 10:34

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

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
110872 110859 110860 110835 110836 110860 110892 110855 110871 110808 110788 110897 110844 110882 110931
110815 110816 110820 110809 110793 110812 110806 110802 110806 110810 110813 110778 110798 110794 110848
110814 110796 110792 110891 110882 110936 110881 110789 110790 110795 110791 110769 110794 110756 110877
110814 110780 110767 110763 110806 110822 110755 110755 110789 110769 110787 110756 110774 110791 110780
110786 110791 110780 110781 110790 110792 110801 110770 110749 110778 110792 110763 110778 110775 110832
110907 110904 110903 110889 110898 110911 110904 110769 110755 110881 110780 110793 110795 110777 110833
110798 110788 110777 110899 110782 110799 110884 110792 110788 110763 110800 110790 110769 110773 110808
110799 110782 110785 110784 110754 110780 110775 110785 110760 110789 110785 110785 110788 110776 110852
110792 110768 110785 110762 110787 110797 110788 110744 110780 110763 110750 110787 110775 110775 110805
110777 110775 110790 110795 110779 110813 110756 110741 110772 110789 110800 110787 110782 110783 110824
110774 110783 110761 110781 110764 110772 110760 110746 110743 110761 110804 110765 110791 110746 110749
110765 110773 110781 110760 110763 110789 110793 110741 110748 110768 110769 110800 110765 110755 110787
110812 110787 110785 110780 110796 110792 110766 110802 110787 110757 110783 110767 110764 110796 110762
110818 110788 110786 110800 110758 110778 110808 110741 110717 110777 110764 110757 110784 110771 110848
110775 110781 110781 110784 110786 110766 110754 110757 110759 110761 110766 110765 110749 110770 110847
110768 110804 110780 110792 110784 110771 110780 110750 110748 110780 110755 110766 110782 110760 110792
110783 110779 110910 110874 110897 110883 110874 110743 110756 110759 110756 110764 110780 110763 110845
110773 110783 110779 110888 110895 110890 110878 110753 110883 110861 110756 110767 110773 110765 110808
110768 110782 110786 110888 110879 110906 110882 110791 110749 110761 110755 110766 110767 110761 110764
110784 110781 110780 110785 110784 110781 110768 110727 110753 110784 110757 110752 110762 110762 110822
110772 110783 110781 110785 110784 110783 110770 110749 110781 110781 110756 110753 110763 110759 110789
110774 110781 110760 110774 110804 110777 110771 110785 110759 110767 110757 110765 110761 110762 110806
110768 110780 110755 110773 110764 110766 110769 110806 110778 110760 110755 110753 110776 110762 110751

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 110774 bytes 100%
1,000 110752 bytes -22 bytes 100%
10,000 110732 bytes -20 bytes 100%
100,000 110725 bytes -7 bytes 0.58%
1,000,000 110717 bytes -8 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
110783 bytes +66 bytes (+0.06%)
111301 bytes +584 bytes (+0.53%) +518 bytes
111300 bytes +583 bytes (+0.53%) +517 bytes
111153 bytes +436 bytes (+0.39%) +370 bytes
111036 bytes +319 bytes (+0.29%) +253 bytes
110956 bytes +239 bytes (+0.22%) +173 bytes
110974 bytes +257 bytes (+0.23%) +191 bytes
110851 bytes +134 bytes (+0.12%) +68 bytes
110805 bytes +88 bytes (+0.08%) +22 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 75305 bytes -35412 bytes (-31.98%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 86676 bytes -24041 bytes (-21.71%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 91446 bytes -19271 bytes (-17.41%)
Brotli (Wikipedia) brotli brotli -q 11 96245 bytes -14472 bytes (-13.07%)
LZMA2 (Wikipedia) xz xz -9 97040 bytes -13677 bytes (-12.35%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 100567 bytes -10150 bytes (-9.17%)
Zstandard (Wikipedia) zstd zstd -19 102573 bytes -8144 bytes (-7.36%)

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.