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

After GZIP compression these minified files vary in size:
Boot
  57342 bytes (56.0k)
CDN, direct link
Baidu
  50253 bytes (49.1k)
CDN, direct link
cdnjs
  50243 bytes (49.1k)
CDN, direct link
unpkg
  49847 bytes (48.7k)
CDN, direct link
gzip -6 (default)
  49837 bytes (48.7k)
local copy
cdnhttps
  49823 bytes (48.7k)
CDN, direct link
gzip -9
  49662 bytes (48.5k)
local copy
libdeflate -12
  48107 bytes (47.0k)
local copy
7zip -mx=9 -tgzip
  48005 bytes (46.9k)
local copy
pigz -11 -n
  47813 bytes (46.7k)
local copy
kzip -s0 -rn -b5
  47812 bytes (46.7k)
local copy
Zopfli
  47707 bytes (46.6k)
local copy
Zopfli (defluff)
  47706 bytes (46.6k)
local copy

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

You will automatically get the smallest D3 3.3.4 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 2116 bytes by using my D3 3.3.4 Zopfli version instead of the best available CDN (4.44% smaller than cdnhttps, 47707 vs. 49823 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 --bsr12 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 32  --mls32
block splitting recursion 12  --bsr12
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 1 more byte (47706 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.4/d3.min.js --location | md5sum
7c4ce29c5f961cb4fdfbfc44127d9f2b  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.3.4.min.zopfli.js.gz | md5sum
7c4ce29c5f961cb4fdfbfc44127d9f2b  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 57342 bytes 7c4ce29c5f961cb4fdfbfc44127d9f2b (invalid)
cdnjs 50243 bytes 7c4ce29c5f961cb4fdfbfc44127d9f2b (invalid)
unpkg 49847 bytes 7c4ce29c5f961cb4fdfbfc44127d9f2b July 11, 2016 @ 16:31
cdnhttps 49823 bytes 7c4ce29c5f961cb4fdfbfc44127d9f2b December 24, 2015 @ 07:33

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 50253 bytes f7c870e16126558050c9b15cb647be0c 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.2, 4.10.1, 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
47707 bytes -4 bytes zopfli --i100000 --mls32 --bsr12 --lazy --ohh December 21, 2015 @ 17:56
47711 bytes -2 bytes zopfli --i10000 --mls32 --bsr12 --lazy --ohh October 14, 2015 @ 06:54
47713 bytes -5 bytes zopfli --i10000 --mls32 --bsr11 --lazy --ohh October 14, 2015 @ 03:42
47718 bytes -6 bytes zopfli --i1000 --mls32 --bsr12 --lazy --ohh September 19, 2015 @ 21:34
47724 bytes -4 bytes zopfli --i1000 --mls16 --bsr8 --lazy --ohh September 19, 2015 @ 21:32
47728 bytes zopfli --i100 --mls32 --bsr11 --lazy --ohh September 18, 2015 @ 20:27

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

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
47883 47798 47821 47828 47882 47881 47882 47839 47830 47889 47884 47975 47996 47848 47991
47794 47780 47754 47775 47763 47754 47722 47762 47741 47748 47749 47739 47995 47800 47859
47818 47771 47775 47732 47775 47778 47784 47791 47747 47765 47757 47749 47965 47755 47857
47777 47811 47800 47733 47742 47736 47762 47736 47812 47987 47759 47742 47988 47822 47852
47728 47791 47810 47716 47769 47783 47805 47821 47745 47840 47848 47857 47994 47840 47852
47728 47746 47788 47740 47746 47784 47788 47784 47709 47745 47747 47734 47984 47846 47855
47720 47746 47776 47740 47817 47737 47817 47801 47796 47740 47752 47744 47988 47736 47847
47781 47739 47763 47736 47709 47779 47784 47771 47830 47843 47753 47748 47970 47727 47837
47731 47798 47793 47739 47707 47757 47777 47787 47792 47738 47757 47753 47988 47743 47997
47784 47763 47775 47782 47743 47753 47780 47782 47757 47745 47748 47737 47988 47745 47858
47753 47748 47773 47736 47735 47741 47781 47736 47809 47748 47750 47747 47988 47744 47850
47737 47768 47756 47745 47743 47783 47778 47768 47741 47742 47759 47733 47988 47736 47829
47785 47750 47756 47733 47733 47751 47781 47787 47784 47744 47732 47909 47988 47732 47842
47740 47816 47732 47733 47742 47739 47736 47737 47744 47743 47754 47741 47988 47758 47849
47766 47818 47855 47733 47741 47773 47790 47736 47733 47743 47754 47741 47988 47757 47856
47755 47803 47754 47735 47745 47781 47793 47812 47815 47741 47758 47740 47988 47738 47854
47728 47815 47735 47734 47733 47786 47780 47790 47747 47740 47756 47721 47970 47998 47848
47783 47759 47760 47735 47789 47821 47780 47786 47754 47748 47756 47746 47988 47743 47848
47793 47815 47736 47738 47747 47780 47790 47786 47746 47741 47754 47910 47990 47740 47848
47821 47750 47800 47737 47749 47781 47779 47787 47766 47740 47748 47742 47973 47731 47833
47782 47725 47754 47781 47745 47822 47767 47799 47808 47743 47753 47753 47988 47744 47840
47728 47786 47762 47780 47718 47795 47783 47787 47766 47742 47751 47742 47988 47760 47857
47723 47818 47802 47790 47788 47791 47781 47791 47800 47747 47755 47909 47988 47763 47851

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 47728 bytes 100%
1,000 47718 bytes -10 bytes 100%
10,000 47711 bytes -7 bytes 100%
100,000 47707 bytes -4 bytes 0.87%
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
48017 bytes +310 bytes (+0.65%) +205 bytes
48015 bytes +308 bytes (+0.65%) +203 bytes
48021 bytes +314 bytes (+0.66%) +209 bytes
47936 bytes +229 bytes (+0.48%) +124 bytes
47947 bytes +240 bytes (+0.50%) +135 bytes
47812 bytes +105 bytes (+0.22%)
47832 bytes +125 bytes (+0.26%) +20 bytes
47821 bytes +114 bytes (+0.24%) +9 bytes
47830 bytes +123 bytes (+0.26%) +18 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 38252 bytes -9455 bytes (-19.82%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 40480 bytes -7227 bytes (-15.15%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 41193 bytes -6514 bytes (-13.65%)
Brotli (Wikipedia) brotli brotli -q 11 43198 bytes -4509 bytes (-9.45%)
LZMA2 (Wikipedia) xz xz -9 43888 bytes -3819 bytes (-8.01%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 45657 bytes -2050 bytes (-4.30%)
ZSTD (Wikipedia) zstd zstd -19 46195 bytes -1512 bytes (-3.17%)

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