Choose a version:
46% The original file has 309038 bytes (301.8k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 143320 bytes (140.0k, 46%).

After GZIP compression these minified files vary in size:
Boot
  56212 bytes (54.9k)
CDN, direct link
Baidu
  49082 bytes (47.9k)
CDN, direct link
cdnjs
  49073 bytes (47.9k)
CDN, direct link
gzip -6 (default)
  48702 bytes (47.6k)
local copy
cdnhttps
  48658 bytes (47.5k)
CDN, direct link
unpkg
  48632 bytes (47.5k)
CDN, direct link
gzip -9
  48529 bytes (47.4k)
local copy
7zip -mx=9 -tgzip
  46984 bytes (45.9k)
local copy
libdeflate -12
  46964 bytes (45.9k)
local copy
pigz -11 -n
  46925 bytes (45.8k)
local copy
kzip -s0 -rn -b7
  46789 bytes (45.7k)
local copy
Zopfli
  46717 bytes (45.6k)
local copy
Zopfli (defluff)
  46715 bytes (45.6k)
local copy

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

You will automatically get the smallest D3 3.2.6 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 1915 bytes by using my D3 3.2.6 Zopfli version instead of the best available CDN (4.10% smaller than unpkg, 46717 vs. 48632 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 --mls32 --bsr30 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 32  --mls32
block splitting recursion 30  --bsr30
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 (46715 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.2.6/d3.min.js --location | md5sum
82e338d91c572f70f279812e8dfe672d  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.2.6.min.zopfli.js.gz | md5sum
82e338d91c572f70f279812e8dfe672d  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.2.6/d3.min.js --location | sha1sum
a1c6225ec2ee27737f06511a513550c8fed29da7  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.2.6.min.zopfli.js.gz | sha1sum
a1c6225ec2ee27737f06511a513550c8fed29da7  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 56212 bytes 82e338d91c572f70f279812e8dfe672d (invalid)
cdnjs 49073 bytes 82e338d91c572f70f279812e8dfe672d (invalid)
cdnhttps 48658 bytes 82e338d91c572f70f279812e8dfe672d December 24, 2015 @ 07:33
unpkg 48632 bytes 82e338d91c572f70f279812e8dfe672d July 11, 2016 @ 16:32

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 49082 bytes f92d66e2a2fad84baea5a157af6c19eb 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
46717 bytes -4 bytes zopfli --i100000 --mls32 --bsr30 --lazy --ohh December 21, 2015 @ 15:55
46721 bytes -3 bytes zopfli --i10000 --mls32 --bsr30 --lazy --ohh September 24, 2015 @ 17:34
46724 bytes -4 bytes zopfli --i1000 --mls32 --bsr30 --lazy --ohh September 24, 2015 @ 16:20
46728 bytes -2 bytes zopfli --i1000 --mls2048 --bsr12 --lazy --ohh September 20, 2015 @ 03:20
46730 bytes -7 bytes zopfli --i1000 --mls32 --bsr14 --lazy --ohh September 20, 2015 @ 02:57
46737 bytes -3 bytes zopfli --i1000 --mls8 --bsr10 --lazy --ohh September 20, 2015 @ 02:52
46740 bytes zopfli --i100 --mls4096 --bsr13 --lazy --ohh September 18, 2015 @ 20:33

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

Most recent activity on March 1, 2017 @ 03:23.

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
46871 46868 46874 46866 46767 46804 46766 46874 46891 46889 46900 46872 46865 46822 46895
46882 46826 46775 46827 46760 46890 46896 46886 46845 46745 46890 46873 46866 46774 46898
46758 46778 46792 46805 46747 46840 46771 46830 46842 46746 46895 46777 46886 46876 46897
46889 46835 46833 46817 46838 46846 46849 46849 46838 46763 46782 46753 46866 46876 46875
46824 46838 46763 46803 46783 46816 46864 46829 46843 46732 46893 46779 46887 46773 46866
46739 46800 46791 46790 46849 46843 46829 46829 46846 46745 46744 46777 46881 46782 46869
46836 46805 46733 46816 46819 46848 46863 46854 46851 46840 46891 46820 46874 46772 46893
46746 46751 46779 46753 46756 46831 46844 46835 46836 46740 46727 46750 46866 46795 46898
46819 46837 46785 46775 46735 46830 46830 46823 46838 46735 46725 46725 46870 46774 46888
46862 46766 46795 46786 46759 46885 46759 46868 46838 46733 46894 46724 46880 46771 46895
46887 46887 46800 46771 46727 46833 46837 46824 46844 46736 46890 46749 46866 46780 46865
46888 46887 46825 46825 46836 46826 46830 46822 46838 46743 46839 46842 46865 46774 46884
46772 46887 46761 46789 46756 46835 46825 46822 46837 46733 46729 46725 46895 46784 46867
46781 46775 46764 46752 46756 46887 46882 46887 46858 46892 46735 46887 46865 46774 46868
46857 46858 46789 46789 46750 46870 46866 46887 46877 46746 46895 46886 46888 46884 46891
46802 46810 46803 46783 46759 46824 46829 46822 46892 46731 46725 46751 46866 46776 46862
46811 46813 46746 46775 46749 46822 46840 46822 46851 46733 46727 46841 46866 46773 46897
46839 46820 46825 46783 46819 46828 46841 46842 46852 46730 46838 46846 46883 46780 46866
46826 46818 46785 46785 46778 46829 46825 46829 46853 46729 46738 46726 46888 46770 46865
46797 46799 46779 46786 46728 46847 46830 46827 46838 46816 46895 46730 46903 46769 46866
46820 46817 46796 46756 46732 46822 46832 46842 46833 46733 46894 46842 46866 46773 46864
46869 46809 46776 46771 46717 46828 46827 46836 46829 46887 46735 46842 46866 46770 46869
46798 46803 46812 46787 46759 46849 46828 46823 46845 46836 46866 46726 46888 46791 46866

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 46737 bytes 100%
1,000 46724 bytes -13 bytes 100%
10,000 46721 bytes -3 bytes 100%
100,000 46717 bytes -4 bytes 0.29%
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
46901 bytes +184 bytes (+0.39%) +112 bytes
46911 bytes +194 bytes (+0.42%) +122 bytes
46897 bytes +180 bytes (+0.39%) +108 bytes
46853 bytes +136 bytes (+0.29%) +64 bytes
46887 bytes +170 bytes (+0.36%) +98 bytes
46878 bytes +161 bytes (+0.34%) +89 bytes
46854 bytes +137 bytes (+0.29%) +65 bytes
46789 bytes +72 bytes (+0.15%)
46820 bytes +103 bytes (+0.22%) +31 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 37506 bytes -9211 bytes (-19.72%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 39743 bytes -6974 bytes (-14.93%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 40336 bytes -6381 bytes (-13.66%)
Brotli (Wikipedia) brotli brotli -q 11 42294 bytes -4423 bytes (-9.47%)
LZMA2 (Wikipedia) xz xz -9 43076 bytes -3641 bytes (-7.79%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 44904 bytes -1813 bytes (-3.88%)
ZSTD (Wikipedia) zstd zstd -19 45103 bytes -1614 bytes (-3.45%)

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