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

After GZIP compression these minified files vary in size:
Boot
  58077 bytes (56.7k)
CDN, direct link
Baidu
  51118 bytes (49.9k)
CDN, direct link
cdnjs
  51109 bytes (49.9k)
CDN, direct link
unpkg
  50772 bytes (49.6k)
CDN, direct link
gzip -6 (default)
  50701 bytes (49.5k)
local copy
cdnhttps
  50664 bytes (49.5k)
CDN, direct link
gzip -9
  50533 bytes (49.3k)
local copy
libdeflate -12
  48932 bytes (47.8k)
local copy
7zip -mx=9 -tgzip
  48859 bytes (47.7k)
local copy
kzip -s0 -rn -b6
  48646 bytes (47.5k)
local copy
pigz -11 -n
  48625 bytes (47.5k)
local copy
Zopfli
  48537 bytes (47.4k)
local copy
Zopfli (defluff)
  48535 bytes (47.4k)
local copy

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

You will automatically get the smallest D3 3.3.7 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 2127 bytes by using my D3 3.3.7 Zopfli version instead of the best available CDN (4.38% smaller than cdnhttps, 48537 vs. 50664 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 --mls4096 --bsr6 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 4096  --mls4096
block splitting recursion 6  --bsr6
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 (48535 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.7/d3.min.js --location | md5sum
fa4300e8689b514bf99d56043259a1ee  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.3.7.min.zopfli.js.gz | md5sum
fa4300e8689b514bf99d56043259a1ee  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.3.7/d3.min.js --location | sha1sum
41f28f0c0e724b663c930d1c43e3496936a9c958  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.3.7.min.zopfli.js.gz | sha1sum
41f28f0c0e724b663c930d1c43e3496936a9c958  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58077 bytes fa4300e8689b514bf99d56043259a1ee (invalid)
cdnjs 51109 bytes fa4300e8689b514bf99d56043259a1ee (invalid)
unpkg 50772 bytes fa4300e8689b514bf99d56043259a1ee July 11, 2016 @ 16:31
cdnhttps 50664 bytes fa4300e8689b514bf99d56043259a1ee December 24, 2015 @ 07:33

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 51118 bytes f011fbdf1b72d0bd6ddf5b2d695ad7c0 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.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
48537 bytes -2 bytes zopfli --i100000 --mls4096 --bsr6 --lazy --ohh December 21, 2015 @ 18:45
48539 bytes -11 bytes zopfli --i10000 --mls4096 --bsr6 --lazy --ohh October 21, 2015 @ 13:50
48550 bytes -15 bytes zopfli --i1000 --mls4096 --bsr6 --lazy --ohh September 19, 2015 @ 19:35
48565 bytes -3 bytes zopfli --i1000 --mls8 --bsr11 --lazy --ohh September 19, 2015 @ 19:02
48568 bytes zopfli --i100 --mls4096 --bsr6 --lazy --ohh September 18, 2015 @ 20:31

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 @ 10:32.

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
48712 48641 48717 48732 48728 48628 48810 48738 48592 48708 48680 48806 48815 48830 48832
48618 48619 48605 48616 48620 48614 48641 48634 48678 48604 48592 48641 48789 48825 48809
48685 48621 48690 48681 48646 48602 48613 48592 48644 48569 48660 48537 48668 48790 48806
48612 48587 48566 48604 48609 48602 48597 48626 48660 48641 48660 48569 48570 48667 48693
48618 48620 48574 48581 48585 48615 48610 48619 48602 48660 48568 48579 48664 48669 48662
48648 48690 48654 48670 48678 48603 48710 48652 48652 48661 48673 48658 48639 48661 48667
48592 48626 48585 48581 48605 48595 48599 48644 48654 48664 48663 48555 48807 48747 48691
48614 48612 48555 48606 48607 48586 48630 48603 48600 48567 48573 48577 48719 48665 48622
48614 48601 48596 48613 48599 48594 48622 48644 48654 48659 48574 48608 48666 48680 48620
48607 48599 48600 48588 48601 48597 48620 48646 48664 48632 48629 48616 48581 48804 48634
48617 48614 48562 48606 48604 48603 48599 48617 48649 48568 48623 48608 48802 48668 48629
48613 48585 48557 48606 48612 48598 48623 48627 48656 48570 48661 48621 48799 48669 48632
48614 48616 48604 48607 48599 48607 48626 48596 48659 48569 48662 48552 48718 48738 48633
48592 48599 48563 48601 48606 48594 48615 48615 48657 48568 48648 48608 48734 48806 48617
48614 48603 48579 48575 48577 48604 48631 48642 48659 48646 48628 48619 48803 48804 48806
48612 48636 48557 48579 48602 48607 48628 48646 48629 48659 48633 48622 48802 48799 48807
48618 48597 48597 48601 48605 48596 48599 48647 48632 48575 48649 48618 48797 48804 48801
48613 48597 48581 48614 48598 48596 48631 48624 48659 48669 48635 48623 48797 48808 48630
48572 48613 48600 48609 48604 48603 48665 48646 48627 48660 48658 48623 48795 48805 48798
48623 48609 48569 48582 48604 48595 48643 48642 48603 48651 48633 48632 48802 48804 48636
48611 48615 48570 48580 48615 48582 48627 48626 48625 48652 48649 48623 48805 48663 48634
48569 48606 48564 48579 48599 48596 48651 48643 48628 48650 48639 48609 48603 48664 48792
48614 48597 48560 48579 48601 48596 48653 48661 48618 48658 48631 48632 48803 48804 48807

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 48568 bytes 100%
1,000 48550 bytes -18 bytes 100%
10,000 48539 bytes -11 bytes 100%
100,000 48537 bytes -2 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
48784 bytes +247 bytes (+0.51%) +138 bytes
48864 bytes +327 bytes (+0.67%) +218 bytes
48872 bytes +335 bytes (+0.69%) +226 bytes
48787 bytes +250 bytes (+0.52%) +141 bytes
48797 bytes +260 bytes (+0.54%) +151 bytes
48704 bytes +167 bytes (+0.34%) +58 bytes
48646 bytes +109 bytes (+0.22%)
48659 bytes +122 bytes (+0.25%) +13 bytes
48670 bytes +133 bytes (+0.27%) +24 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 38796 bytes -9741 bytes (-20.07%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41246 bytes -7291 bytes (-15.02%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 41952 bytes -6585 bytes (-13.57%)
Brotli (Wikipedia) brotli brotli -q 11 43942 bytes -4595 bytes (-9.47%)
LZMA2 (Wikipedia) xz xz -9 44636 bytes -3901 bytes (-8.04%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46598 bytes -1939 bytes (-3.99%)
ZSTD (Wikipedia) zstd zstd -19 47037 bytes -1500 bytes (-3.09%)

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