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

After GZIP compression these minified files vary in size:
Boot
  122417 bytes (119.5k)
CDN
cdnjs
  101200 bytes (98.8k)
CDN
unpkg
  100778 bytes (98.4k)
CDN
Google
  100083 bytes (97.7k)
CDN
gzip -6 (default)
  100066 bytes (97.7k)
local copy
fastcdn
  100065 bytes (97.7k)
CDN
gzip -9
  99636 bytes (97.3k)
local copy
jsdelivr
  99162 bytes (96.8k)
CDN
7zip -mx=9 -tgzip
  96207 bytes (94.0k)
local copy
libdeflate -12
  96202 bytes (93.9k)
local copy
zultra
  96168 bytes (93.9k)
local copy
pigz -11 -n
  95853 bytes (93.6k)
local copy
kzip -s0 -rn -b8
  95841 bytes (93.6k)
local copy
Zopfli
  95771 bytes (93.5k)
local copy
Zopfli (defluff)
  95768 bytes (93.5k)
local copy

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

You will automatically get the smallest ThreeJS 73 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 3391 bytes by using my ThreeJS 73 Zopfli version instead of the best available CDN (3.54% smaller than jsdelivr, 95771 vs. 99162 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 --mls16384 --bsr8 --lazy --ohh

(found November 25, 2015)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 8  --bsr8
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 3 more bytes (95768 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/r73/build/three.min.js --location | md5sum
1cbf0b3bafbd5d7f6fbdbe8da8cc98c4  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r73.min.zopfli.js.gz | md5sum
1cbf0b3bafbd5d7f6fbdbe8da8cc98c4  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 122417 bytes 1cbf0b3bafbd5d7f6fbdbe8da8cc98c4 (invalid)
cdnjs 101200 bytes 1cbf0b3bafbd5d7f6fbdbe8da8cc98c4 (invalid)
Google 100083 bytes 1cbf0b3bafbd5d7f6fbdbe8da8cc98c4 (invalid)
fastcdn 100065 bytes 1cbf0b3bafbd5d7f6fbdbe8da8cc98c4 (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
unpkg 100778 bytes b5b0fa4046bc1f2d3f1b1bb12617e61a < // 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
jsdelivr 99162 bytes 130f3f943b1dffc0c682ecea913c92ba < 'use strict';var THREE={REVISION:"73"};"function"===typeof [...]
> 'use strict';var THREE={REVISION:"72"};"function"===typeof [...]
< g)},g);a=c+g;return f});void 0===self.cancelAnimationFrame [...]
< void 0===Function.prototype.name&&void 0!==Object.definePr [...]
< THREE.DoubleSide=2;THREE.FlatShading=1;THREE.SmoothShading [...]
< THREE.SrcAlphaFactor=204;THREE.OneMinusSrcAlphaFactor=205; [...]
< THREE.CubeRefractionMapping=302;THREE.EquirectangularRefle [...]
< THREE.ShortType=1011;THREE.UnsignedShortType=1012;THREE.In [...]
< THREE.RGBA_S3TC_DXT5_Format=2004;THREE.RGB_PVRTC_4BPPV1_Fo [...]
> g)},g);a=c+g;return f});void 0===self.cancelAnimationFrame [...]
[...]
(invalid)

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
95771 bytes -1 byte zopfli --i1000000 --mls16384 --bsr8 --lazy --ohh November 25, 2015 @ 15:36
95772 bytes -8 bytes zopfli --i100000 --mls16384 --bsr8 --lazy --ohh November 23, 2015 @ 21:03
95780 bytes -5 bytes zopfli --i100000 --mls128 --bsr2 --lazy --ohh November 14, 2015 @ 10:58
95785 bytes -4 bytes zopfli --i10000 --mls16384 --bsr8 --lazy --ohh November 14, 2015 @ 08:36
95789 bytes -10 bytes zopfli --i10000 --mls128 --bsr2 --lazy --ohh November 14, 2015 @ 01:22
95799 bytes -12 bytes zopfli --i1000 --mls128 --bsr2 --lazy --ohh November 14, 2015 @ 01:05
95811 bytes zopfli --i100 --mls128 --bsr2 --lazy --ohh November 14, 2015 @ 00:09

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

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
95922 95963 95934 95872 95928 95899 95780 95936 95966 95895 96028 95930 96018 95943 95999
95936 95924 95925 95918 95917 95918 95921 95894 95908 95920 95823 95904 95869 95874 95900
95922 95898 95934 95877 95875 95916 95914 95912 95915 95929 95807 95870 95886 95938 95938
95899 95859 95916 95923 95915 95902 95902 95888 95894 95914 95910 95912 95880 95918 95863
95910 95894 95908 95932 95880 95913 95875 95869 95914 95900 95803 95823 95930 95771 95940
95917 95923 95930 95891 96039 95900 95831 95880 95882 95917 95894 95912 95870 95948 95952
95909 95940 95900 95919 95904 95920 95872 95867 95853 95891 95804 95836 95889 95798 95946
95899 95894 95902 95843 95885 95905 95866 95881 95872 95916 95892 95908 95900 95816 95944
95923 95913 95921 95914 95903 95863 95884 95861 95921 95915 95888 95906 95911 95913 95954
95907 95889 95888 95911 95890 95910 95918 95888 95893 95890 95888 95907 95891 95894 95939
95915 95895 95918 95901 95917 95895 95917 95859 95803 95907 95804 95893 95896 95909 95946
95924 95890 95915 95919 95883 95909 95864 95874 95873 95839 95895 95922 95895 95933 95949
95926 95905 95920 95868 95903 95912 95898 95862 95861 95912 95887 95920 95892 95908 95939
95921 95924 95896 96052 96023 95882 95893 95862 95909 95908 95796 95897 95856 95800 95953
95893 95887 95930 96034 96043 95873 95884 95861 95911 95906 95799 95892 95888 95915 95942
95921 95896 95920 95887 96077 95887 96014 95915 95882 95906 95883 95911 95894 95910 95938
95924 95918 95900 95911 96040 95896 95888 95860 95893 95911 95889 95917 95903 95894 95946
95909 95887 95911 95904 95878 95863 95858 95857 95907 95918 95894 95928 95900 95913 95943
95897 95890 95923 95918 95900 95915 95880 95871 95852 95905 95892 95889 95892 95942 95941
95925 95886 95936 95920 95880 95907 95907 95908 95910 95868 95907 95897 95881 95896 95942
95914 95888 95915 95922 95881 95819 95865 95913 95919 95908 95902 95905 95900 95912 95944
95917 95888 95935 95901 95882 95901 95843 95872 95898 95912 95909 95906 95899 95916 95946
95917 95926 95921 95910 95903 95913 95912 95909 95901 95906 95905 95913 95894 95938 95944

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 95811 bytes 100%
1,000 95793 bytes -18 bytes 100%
10,000 95785 bytes -8 bytes 100%
100,000 95772 bytes -13 bytes 0.58%
1,000,000 95771 bytes -1 byte 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
95901 bytes +130 bytes (+0.14%) +60 bytes
96307 bytes +536 bytes (+0.56%) +466 bytes
96289 bytes +518 bytes (+0.54%) +448 bytes
96199 bytes +428 bytes (+0.45%) +358 bytes
96080 bytes +309 bytes (+0.32%) +239 bytes
96048 bytes +277 bytes (+0.29%) +207 bytes
96039 bytes +268 bytes (+0.28%) +198 bytes
95925 bytes +154 bytes (+0.16%) +84 bytes
95841 bytes +70 bytes (+0.07%)

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 65609 bytes -30162 bytes (-31.49%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 75303 bytes -20468 bytes (-21.37%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 79330 bytes -16441 bytes (-17.17%)
Brotli (Wikipedia) brotli brotli -q 11 83419 bytes -12352 bytes (-12.90%)
LZMA2 (Wikipedia) xz xz -9 84212 bytes -11559 bytes (-12.07%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 87238 bytes -8533 bytes (-8.91%)
Zstandard (Wikipedia) zstd zstd -19 89084 bytes -6687 bytes (-6.98%)

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.