Choose a version:
49% The original file has 1026434 bytes (1,002.4k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 503128 bytes (491.3k, 49%).

After GZIP compression these minified files vary in size:
cdnjs
  129244 bytes (126.2k)
CDN
Google
  128545 bytes (125.5k)
CDN
gzip -6 (default)
  127996 bytes (125.0k)
local copy
unpkg
  127993 bytes (125.0k)
CDN
jsdelivr
  127847 bytes (124.9k)
CDN
gzip -9
  127558 bytes (124.6k)
local copy
libdeflate -12
  123235 bytes (120.3k)
local copy
7zip -mx=9 -tgzip
  123043 bytes (120.2k)
local copy
zultra
  122880 bytes (120.0k)
local copy
kzip -s0 -rn -b0
  122675 bytes (119.8k)
local copy
pigz -11 -n
  122666 bytes (119.8k)
local copy
Zopfli
  122562 bytes (119.7k)
local copy
Zopfli (defluff)
  122557 bytes (119.7k)
local copy

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

You will automatically get the smallest ThreeJS 84 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 5285 bytes by using my ThreeJS 84 Zopfli version instead of the best available CDN (4.31% smaller than jsdelivr, 122562 vs. 127847 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 --bsr20 --lazy --ohh

(found January 22, 2017)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 1024  --mls1024
block splitting recursion 20  --bsr20
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 5 more bytes (122557 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/r84/build/three.min.js --location | md5sum
3298078bce82bdb1afadf5b1a280915e  -
curl --silent --compressed https://minime.stephan-brumme.com/files/threejs/three-r84.min.zopfli.js.gz | md5sum
3298078bce82bdb1afadf5b1a280915e  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
cdnjs 129244 bytes 3298078bce82bdb1afadf5b1a280915e (invalid)
Google 128545 bytes 3298078bce82bdb1afadf5b1a280915e February 21, 2017 @ 20:15
unpkg 127993 bytes 3298078bce82bdb1afadf5b1a280915e January 20, 2017 @ 13:40
jsdelivr 127847 bytes 3298078bce82bdb1afadf5b1a280915e November 15, 2017 @ 13:36

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
122562 bytes -3 bytes zopfli --i1000000 --mls1024 --bsr20 --lazy --ohh January 22, 2017 @ 08:38
122565 bytes -1 byte zopfli --i100000 --mls1024 --bsr20 --lazy --ohh January 20, 2017 @ 21:34
122566 bytes -8 bytes zopfli --i100000 --mls512 --bsr40 --lazy --ohh January 20, 2017 @ 17:32
122574 bytes -6 bytes zopfli --i10000 --mls512 --bsr40 --lazy --ohh January 20, 2017 @ 14:31
122580 bytes -16 bytes zopfli --i1000 --mls512 --bsr40 --lazy --ohh January 20, 2017 @ 14:12
122596 bytes zopfli --i100 --mls512 --bsr40 --lazy --ohh January 20, 2017 @ 13:58

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
122776 122773 122772 122790 122967 122804 122884 122792 122706 122707 122738 122734 122744 122726 122801
122672 122701 122706 122681 122685 122666 122714 122846 122668 122747 122693 122643 122665 122600 122684
122698 122677 122677 122813 122659 122685 122648 122772 122639 122753 122728 122596 122765 122790 122657
122655 122670 122683 122817 122708 122681 122696 122645 122661 122693 122820 122652 122594 122744 122663
122704 122702 122691 122845 122686 122687 122698 122615 122662 122722 122660 122629 122703 122642 122638
122700 122681 122716 122650 122656 122736 122658 122611 122647 122650 122679 122594 122597 122627 122623
122723 122722 122700 122659 122664 122809 122651 122671 122647 122737 122665 122740 122678 122627 122609
122704 122677 122685 122679 122672 122685 122655 122664 122650 122743 122679 122737 122607 122658 122600
122704 122702 122685 122683 122672 122680 122682 122596 122636 122593 122682 122732 122694 122616 122615
122687 122682 122684 122684 122679 122682 122649 122621 122610 122645 122704 122681 122597 122608 122615
122695 122675 122696 122649 122691 122692 122695 122602 122622 122620 122620 122618 122597 122678 122631
122712 122705 122703 122707 122687 122689 122657 122624 122577 122652 122707 122635 122595 122731 122595
122703 122701 122693 122686 122679 122683 122673 122584 122571 122636 122694 122643 122593 122666 122711
122732 122676 122681 122687 122687 122696 122662 122591 122588 122623 122773 122594 122660 122620 122629
122687 122676 122699 122646 122678 122674 122704 122607 122696 122582 122747 122591 122652 122673 122627
122739 122674 122683 122634 122670 122671 122685 122618 122579 122623 122677 122639 122597 122667 122630
122702 122675 122683 122653 122681 122685 122655 122640 122577 122562 122735 122640 122612 122622 122655
122723 122682 122678 122644 122667 122692 122703 122623 122630 122746 122680 122597 122624 122669 122630
122679 122673 122705 122648 122678 122690 122691 122642 122655 122621 122772 122592 122672 122660 122705
122677 122677 122681 122711 122670 122672 122683 122636 122642 122696 122678 122735 122614 122593 122616
122720 122679 122682 122687 122676 122687 122736 122634 122630 122595 122674 122601 122675 122605 122708
122698 122684 122691 122685 122685 122700 122653 122633 122585 122590 122737 122700 122588 122627 122756
122678 122671 122683 122682 122640 122697 122685 122644 122566 122585 122739 122674 122597 122673 122645

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 122596 bytes 100%
1,000 122580 bytes -16 bytes 100%
10,000 122572 bytes -8 bytes 100%
100,000 122565 bytes -7 bytes 0.87%
1,000,000 122562 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
122675 bytes +113 bytes (+0.09%)
123224 bytes +662 bytes (+0.54%) +549 bytes
123248 bytes +686 bytes (+0.56%) +573 bytes
123045 bytes +483 bytes (+0.39%) +370 bytes
123047 bytes +485 bytes (+0.40%) +372 bytes
122912 bytes +350 bytes (+0.29%) +237 bytes
122761 bytes +199 bytes (+0.16%) +86 bytes
122782 bytes +220 bytes (+0.18%) +107 bytes
122750 bytes +188 bytes (+0.15%) +75 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 83309 bytes -39253 bytes (-32.03%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 95840 bytes -26722 bytes (-21.80%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 101847 bytes -20715 bytes (-16.90%)
Brotli (Wikipedia) brotli brotli -q 11 104950 bytes -17612 bytes (-14.37%)
LZMA2 (Wikipedia) xz xz -9 105736 bytes -16826 bytes (-13.73%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 110459 bytes -12103 bytes (-9.88%)
Zstandard (Wikipedia) zstd zstd -19 111813 bytes -10749 bytes (-8.77%)

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.