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

After GZIP compression these minified files vary in size:
unpkg
  186015 bytes (181.7k)
CDN
gzip -6 (default)
  152014 bytes (148.5k)
local copy
jsdelivr
  151854 bytes (148.3k)
CDN
gzip -9
  151445 bytes (147.9k)
local copy
libdeflate -12
  146240 bytes (142.8k)
local copy
7zip -mx=9 -tgzip
  146143 bytes (142.7k)
local copy
zultra
  146005 bytes (142.6k)
local copy
Zopfli
  145735 bytes (142.3k)
local copy
kzip -s0 -rn -b0
  145678 bytes (142.3k)
local copy
pigz -11 -n
  145630 bytes (142.2k)
local copy

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

You will automatically get the smallest ThreeJS 115 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 6119 bytes by using my ThreeJS 115 Zopfli version instead of the best available CDN (4.20% smaller than jsdelivr, 145735 vs. 151854 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 --bsr22 --lazy --ohh

(found April 18, 2020)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 1024  --mls1024
block splitting recursion 22  --bsr22
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 (145731 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/r115/build/three.min.js --location | md5sum
9061499f5316e2cd884f429f2746328d  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r115.min.zopfli.js.gz | md5sum
9061499f5316e2cd884f429f2746328d  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 186015 bytes 9061499f5316e2cd884f429f2746328d (invalid)
jsdelivr 151854 bytes 9061499f5316e2cd884f429f2746328d April 14, 2020 @ 15:16

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
145735 bytes -6 bytes zopfli --i1000000 --mls1024 --bsr22 --lazy --ohh April 18, 2020 @ 09:58
145741 bytes -5 bytes zopfli --i100000 --mls1024 --bsr22 --lazy --ohh April 16, 2020 @ 17:13
145746 bytes -14 bytes zopfli --i10000 --mls1024 --bsr22 --lazy --ohh April 15, 2020 @ 00:04
145760 bytes -2 bytes zopfli --i10000 --mls1024 --bsr16 --lazy --ohh April 14, 2020 @ 23:49
145762 bytes -31 bytes zopfli --i1000 --mls1024 --bsr22 --lazy --ohh April 14, 2020 @ 15:55
145793 bytes zopfli --i100 --mls1024 --bsr23 --lazy --ohh April 14, 2020 @ 15:42

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
145958 145913 145861 145860 145950 145871 145906 145935 145844 145850 145980 145926 145920 145913 145890
145867 145954 145881 145932 145917 145906 145917 145943 145877 145884 145877 145824 146030 145869 145844
145815 145834 145817 145841 145812 145814 145813 145901 145810 145829 145825 145939 145906 145843 145879
145782 145841 145829 145822 145811 145804 145876 145773 145770 145780 145787 145928 145905 145921 145924
145866 145834 145884 145876 145869 145872 145846 145838 145863 145839 145814 145932 145921 145898 145856
145811 145836 145825 145840 145836 145878 145817 145834 145856 145839 145819 145904 145894 145915 145829
145887 145906 145895 145876 145860 145855 145829 145844 145814 145824 145840 145852 145907 145844 145852
145813 145851 145792 145809 145847 145785 145839 145832 145825 145764 145819 145818 145900 145890 145835
145873 145808 145877 145886 145875 145860 145863 145841 145840 145851 145765 145803 145763 145845 145857
145801 145837 145835 145768 145812 145812 145817 145830 145830 145895 145930 145916 145909 145893 145847
145806 145847 145847 145833 145845 145822 145813 145848 145815 145825 145794 145845 145895 145845 145844
145846 145857 145840 145879 145860 145865 145839 145820 145813 145776 145811 145917 145902 145907 145831
145819 145833 145874 145862 145874 145810 145853 145842 145835 145760 145751 145813 145811 145847 145835
145892 145917 145870 145822 145873 145851 145850 145854 145814 145917 145812 145922 145913 145920 145903
145825 145850 145848 145837 145843 145837 145787 145807 145807 145785 145827 145799 145817 145843 145772
145811 145839 145807 145806 145810 145833 145825 145808 145811 145846 145832 145907 145919 145892 145914
145812 145810 145831 145805 145810 145812 145838 145812 145811 145788 145775 145805 145825 145846 145858
145842 145846 145850 145853 145860 145789 145797 145816 145831 145822 145820 145900 145898 145914 145905
145792 145833 145830 145854 145875 145836 145794 145808 145784 145735 145820 145921 145818 145848 145833
145815 145851 145897 145802 145874 145812 145825 145848 145831 145746 145837 145822 145900 145896 145760
145825 145829 145809 145805 145873 145836 145837 145810 145808 145836 145764 145922 145898 145868 145854
145818 145860 145855 145839 145815 145812 145803 145835 145822 145842 145763 145822 145819 145845 145855
145838 145830 145846 145880 145855 145812 145810 145848 145819 145764 145765 145869 145897 145850 145845

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 145793 bytes 100%
1,000 145762 bytes -31 bytes 100%
10,000 145746 bytes -16 bytes 100%
100,000 145741 bytes -5 bytes 0.58%
1,000,000 145735 bytes -6 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
145678 bytes -57 bytes (-0.04%)
146400 bytes +665 bytes (+0.46%) +722 bytes
146361 bytes +626 bytes (+0.43%) +683 bytes
146098 bytes +363 bytes (+0.25%) +420 bytes
145991 bytes +256 bytes (+0.18%) +313 bytes
145987 bytes +252 bytes (+0.17%) +309 bytes
145949 bytes +214 bytes (+0.15%) +271 bytes
145868 bytes +133 bytes (+0.09%) +190 bytes
145894 bytes +159 bytes (+0.11%) +216 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 97256 bytes -48479 bytes (-33.27%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 112639 bytes -33096 bytes (-22.71%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 118194 bytes -27541 bytes (-18.90%)
Brotli (Wikipedia) brotli brotli -q 11 123396 bytes -22339 bytes (-15.33%)
LZMA2 (Wikipedia) xz xz -9 124204 bytes -21531 bytes (-14.77%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 129964 bytes -15771 bytes (-10.82%)
Zstandard (Wikipedia) zstd zstd -19 130278 bytes -15457 bytes (-10.61%)

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.