Choose a version:
45% The original file has 325164 bytes (317.5k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 146371 bytes (142.9k, 45%).

After GZIP compression these minified files vary in size:
Boot
  58294 bytes (56.9k)
CDN, direct link
jsdelivr
  58294 bytes (56.9k)
CDN, direct link
Baidu
  51302 bytes (50.1k)
CDN, direct link
cdnjs
  51291 bytes (50.1k)
CDN, direct link
unpkg
  50944 bytes (49.8k)
CDN, direct link
gzip -6 (default)
  50890 bytes (49.7k)
local copy
cdnhttps
  50855 bytes (49.7k)
CDN, direct link
gzip -9
  50705 bytes (49.5k)
local copy
libdeflate -12
  49088 bytes (47.9k)
local copy
7zip -mx=9 -tgzip
  49033 bytes (47.9k)
local copy
pigz -11 -n
  48816 bytes (47.7k)
local copy
kzip -s0 -rn -b7
  48811 bytes (47.7k)
local copy
Zopfli
  48700 bytes (47.6k)
local copy
Zopfli (defluff)
  48697 bytes (47.6k)
local copy

perma-link to the smallest file on my server:
http://minime.stephan-brumme.com/files/d3/d3-3.3.9.min.js

You will automatically get the smallest D3 3.3.9 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 2155 bytes by using my D3 3.3.9 Zopfli version instead of the best available CDN (4.43% smaller than cdnhttps, 48700 vs. 50855 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 --i100000 --mb8 --mls4 --bsr22 --lazy --ohh

(found December 22, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 4  --mls4
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 3 more bytes (48697 bytes).

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.3.9/d3.min.js --location | md5sum
d7af50079ecbbb5e4c56b2f09dfcfc8e  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.3.9.min.zopfli.js.gz | md5sum
d7af50079ecbbb5e4c56b2f09dfcfc8e  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.3.9/d3.min.js --location | sha1sum
83fc51e58bca737218c4e114a0849ff04ca29705  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.3.9.min.zopfli.js.gz | sha1sum
83fc51e58bca737218c4e114a0849ff04ca29705  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58294 bytes d7af50079ecbbb5e4c56b2f09dfcfc8e (invalid)
cdnjs 51291 bytes d7af50079ecbbb5e4c56b2f09dfcfc8e (invalid)
unpkg 50944 bytes d7af50079ecbbb5e4c56b2f09dfcfc8e July 11, 2016 @ 16:31
cdnhttps 50855 bytes d7af50079ecbbb5e4c56b2f09dfcfc8e December 24, 2015 @ 07:33

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
jsdelivr 58294 bytes 5daebfd26d7d12b0aa87222e15077674 only whitespaces differ (invalid)
Baidu 51302 bytes ef80e2cf4efdd44bdc5c33c43b66c243 only whitespaces differ (invalid)

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

Available D3 versions at minime.stephan-brumme.com:

4.10.0,
4.9.1, 4.9.0, 4.8.0, 4.7.4, 4.7.3, 4.7.2, 4.7.1, 4.7.0, 4.6.0, 4.5.0, 4.4.4, 4.4.3, 4.4.2, 4.4.1, 4.4.0, 4.3.0, 4.2.8, 4.2.7, 4.2.6, 4.2.5, 4.2.4, 4.2.3, 4.2.2, 4.2.1, 4.2.0, 4.1.1, 4.1.0, 4.0.0,
3.5.17, 3.5.16, 3.5.15, 3.5.14, 3.5.13, 3.5.12, 3.5.11, 3.5.10, 3.5.9, 3.5.8, 3.5.7, 3.5.6, 3.5.5, 3.5.4, 3.5.3, 3.5.2, 3.5.1, 3.5.0, 3.4.13, 3.4.12, 3.4.11, 3.4.10, 3.4.9, 3.4.8, 3.4.6, 3.4.5, 3.4.4, 3.4.3, 3.4.2, 3.4.1, 3.4.0, 3.3.13, 3.3.12, 3.3.11, 3.3.10, 3.3.9, 3.3.8, 3.3.7, 3.3.6, 3.3.5, 3.3.4, 3.3.3, 3.3.2, 3.3.1, 3.3.0, 3.2.8, 3.2.7, 3.2.6, 3.2.5, 3.2.4, 3.2.3, 3.2.2, 3.2.1, 3.2.0, 3.1.10, 3.1.9, 3.1.8, 3.1.7, 3.1.6, 3.1.5, 3.1.4, 3.1.3, 3.1.2, 3.1.1, 3.1.0, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0

The project site contains an overview how well these versions were compressed.
Other interesting projects are AngularJS, BackboneJS, Bootstrap, Dojo, Ember, jQuery, Knockout, lodash, React, Socket.IO, ThreeJS, UnderscoreJS and Vue.

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
48700 bytes -5 bytes zopfli --i100000 --mls4 --bsr22 --lazy --ohh December 22, 2015 @ 10:15
48705 bytes -5 bytes zopfli --i10000 --mls4 --bsr22 --lazy --ohh October 14, 2015 @ 01:28
48710 bytes -2 bytes zopfli --i10000 --mls8 --bsr20 --lazy --ohh October 14, 2015 @ 00:46
48712 bytes -4 bytes zopfli --i1000 --mls4 --bsr22 --lazy --ohh September 21, 2015 @ 21:39
48716 bytes -18 bytes zopfli --i1000 --mls8 --bsr20 --lazy --ohh September 19, 2015 @ 17:27
48734 bytes zopfli --i100 --mls8 --bsr20 --lazy --ohh September 18, 2015 @ 20:46

If there are multiple parameter sets yielding the same compressed size, only the first one found is shown.

Most recent activity on February 27, 2017 @ 05:39.

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 or 100,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
48964 48967 48984 48858 48965 48826 48860 48876 48833 48843 48992 48865 48984 48987 48992
48826 48835 48812 48802 48817 48844 48871 48872 48805 48823 48742 48835 48990 48988 48984
48767 48833 48831 48754 48744 48847 48816 48780 48779 48743 48730 48734 48984 48905 48801
48848 48764 48750 48750 48770 48825 48971 48791 48802 48735 48735 48730 48988 48984 48813
48858 48765 48796 48760 48766 48714 48826 48786 48819 48734 48846 48840 48985 48983 48816
48857 48780 48779 48755 48769 48736 48773 48814 48794 48732 48730 48731 48985 48883 48829
48765 48734 48722 48734 48745 48856 48823 48807 48824 48825 48735 48906 48870 48903 48821
48854 48840 48775 48732 48839 48841 48812 48811 48812 48838 48837 48777 48972 48982 48833
48774 48725 48746 48767 48737 48765 48843 48736 48796 48738 48739 48732 48981 48982 48833
48799 48728 48796 48753 48727 48824 48812 48791 48794 48733 48732 48729 48971 48983 48820
48778 48774 48750 48747 48717 48815 48822 48787 48799 48731 48729 48733 48968 48978 48814
48770 48748 48774 48753 48767 48776 48826 48791 48789 48733 48735 48731 48974 48892 48818
48766 48745 48735 48741 48740 48823 48829 48825 48794 48739 48735 48739 48982 48979 48786
48775 48721 48719 48737 48730 48815 48823 48794 48792 48733 48731 48730 48969 48977 48819
48732 48724 48716 48753 48725 48854 48824 48808 48806 48733 48742 48987 48967 48977 48825
48772 48750 48750 48758 48728 48818 48829 48793 48786 48732 48732 48986 48980 48977 48966
48774 48748 48704 48753 48739 48861 48831 48797 48788 48738 48838 48988 48970 48978 48971
48776 48722 48716 48751 48743 48817 48824 48777 48789 48825 48987 48988 48968 48964 48838
48773 48700 48715 48760 48743 48854 48823 48811 48804 48741 48733 48891 48980 48975 48982
48757 48729 48746 48752 48723 48787 48825 48814 48792 48744 48733 48987 48982 48978 48819
48768 48727 48741 48745 48726 48738 48825 48786 48803 48741 48731 48736 48982 48896 48794
48767 48722 48746 48746 48721 48814 48798 48793 48784 48737 48731 48733 48974 48980 48810
48770 48724 48719 48745 48731 48765 48835 48812 48802 48747 48738 48988 48969 48976 48980

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 48729 bytes 100%
1,000 48712 bytes -17 bytes 100%
10,000 48705 bytes -7 bytes 100%
100,000 48700 bytes -5 bytes 0.58%
1,000,000
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
48942 bytes +242 bytes (+0.50%) +131 bytes
49024 bytes +324 bytes (+0.67%) +213 bytes
49024 bytes +324 bytes (+0.67%) +213 bytes
48944 bytes +244 bytes (+0.50%) +133 bytes
48957 bytes +257 bytes (+0.53%) +146 bytes
48963 bytes +263 bytes (+0.54%) +152 bytes
48871 bytes +171 bytes (+0.35%) +60 bytes
48811 bytes +111 bytes (+0.23%)
48814 bytes +114 bytes (+0.23%) +3 bytes

Non-DEFLATE Algorithms

Archivers based on completely different compression algorithms often produce superior results.
Unfortunately, browsers only support gzip compression at the moment.
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 39002 bytes -9698 bytes (-19.91%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41386 bytes -7314 bytes (-15.02%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42095 bytes -6605 bytes (-13.56%)
Brotli (Wikipedia) brotli brotli -q 11 44136 bytes -4564 bytes (-9.37%)
LZMA2 (Wikipedia) xz xz -9 44768 bytes -3932 bytes (-8.07%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46706 bytes -1994 bytes (-4.09%)
ZSTD (Wikipedia) zstd zstd -19 47183 bytes -1517 bytes (-3.11%)

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 2017.
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