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

After GZIP compression these minified files vary in size:
Boot
  58372 bytes (57.0k)
CDN, direct link
Baidu
  51380 bytes (50.2k)
CDN, direct link
cdnjs
  51373 bytes (50.2k)
CDN, direct link
unpkg
  51029 bytes (49.8k)
CDN, direct link
gzip -6 (default)
  50971 bytes (49.8k)
local copy
cdnhttps
  50931 bytes (49.7k)
CDN, direct link
gzip -9
  50796 bytes (49.6k)
local copy
libdeflate -12
  49151 bytes (48.0k)
local copy
7zip -mx=9 -tgzip
  49105 bytes (48.0k)
local copy
pigz -11 -n
  48894 bytes (47.7k)
local copy
kzip -s0 -rn -b7
  48880 bytes (47.7k)
local copy
Zopfli
  48765 bytes (47.6k)
local copy
Zopfli (defluff)
  48764 bytes (47.6k)
local copy

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

You will automatically get the smallest D3 3.3.13 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 2166 bytes by using my D3 3.3.13 Zopfli version instead of the best available CDN (4.44% smaller than cdnhttps, 48765 vs. 50931 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 --mls8 --bsr30 --lazy --ohh

(found December 22, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 8  --mls8
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 1 more byte (48764 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.13/d3.min.js --location | md5sum
a31dbcb3b065a68e1c947657978430e9  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.3.13.min.zopfli.js.gz | md5sum
a31dbcb3b065a68e1c947657978430e9  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.3.13/d3.min.js --location | sha1sum
2e0e087bfdd5d8e3ea49f3c8d4e4fd534c52375f  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.3.13.min.zopfli.js.gz | sha1sum
2e0e087bfdd5d8e3ea49f3c8d4e4fd534c52375f  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58372 bytes a31dbcb3b065a68e1c947657978430e9 (invalid)
cdnjs 51373 bytes a31dbcb3b065a68e1c947657978430e9 (invalid)
unpkg 51029 bytes a31dbcb3b065a68e1c947657978430e9 July 11, 2016 @ 16:31
cdnhttps 50931 bytes a31dbcb3b065a68e1c947657978430e9 December 24, 2015 @ 07:33

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 51380 bytes 07153242cb350c3fbd062ff94edeafcc 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
48765 bytes -1 byte zopfli --i100000 --mls8 --bsr30 --lazy --ohh December 22, 2015 @ 11:53
48766 bytes -5 bytes zopfli --i100000 --mls4 --bsr14 --lazy --ohh December 22, 2015 @ 10:59
48771 bytes -9 bytes zopfli --i10000 --mls4 --bsr14 --lazy --ohh October 14, 2015 @ 07:24
48780 bytes -15 bytes zopfli --i1000 --mls4 --bsr14 --lazy --ohh September 21, 2015 @ 20:24
48795 bytes zopfli --i100 --mls4 --bsr12 --lazy --ohh September 21, 2015 @ 13:21

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

Most recent activity on February 25, 2017 @ 23:03.

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
49053 49050 48906 48942 48924 48894 48941 48934 48896 48934 49058 49037 49058 49060 49064
48864 48870 48944 48949 48845 48948 48931 48895 48866 48803 48810 48920 49060 49055 49062
48883 48822 48874 48826 48823 48867 48896 48893 48853 48843 48932 48798 49050 49052 49039
48834 48838 48852 48815 48820 48862 48858 48870 48873 48805 48886 48808 49053 49053 48895
48856 48795 48871 48903 48829 48822 48889 48873 48861 48808 48915 48908 49054 49057 48899
48810 48875 48866 48842 48839 48950 48901 48897 48887 48811 48906 48817 49040 49063 48895
48860 48803 48822 48832 48872 48897 48883 48869 48850 48805 48875 48979 49050 49036 49039
48864 48773 48873 48924 48977 48907 48883 48894 48892 48916 48906 48904 49029 49049 48868
48795 48774 48785 48827 48821 48886 48889 48897 48895 48804 48805 48799 49050 49063 49042
48855 48800 48869 48870 48868 48886 48901 48869 48871 48875 48801 48805 49028 49050 49040
48885 48766 48864 48828 48827 48871 48888 48856 48834 48897 48810 49055 49039 49054 49042
48837 48804 48813 48828 48826 48880 48916 48868 48867 48810 48802 48815 49049 49053 48858
48773 48803 48814 48903 48876 48903 48882 48873 48826 48807 48806 48972 49049 49049 48870
48851 48807 48792 48830 48868 48884 48893 48873 48829 48899 48877 48819 49045 49050 48852
48814 48774 48866 48830 48847 48880 48851 48866 48845 48873 48800 49056 49055 49057 49049
48799 48780 48812 48824 48871 48864 48886 48864 48860 48873 48819 49052 49048 49048 49051
48805 48785 48823 48827 48821 48885 48895 48875 48867 48812 48804 49055 49032 49052 49039
48805 48807 48820 48820 48826 48880 48899 48857 48865 48895 48908 49056 49039 49031 49039
48845 48767 48862 48825 48819 48881 48889 48875 48852 48874 48877 48966 49044 49050 49050
48803 48800 48784 48824 48827 48912 48894 48874 48855 48912 48803 49053 49058 49051 48818
48857 48774 48790 48818 48819 48886 48887 48877 48865 48903 48878 48821 49050 49065 48854
48850 48807 48765 48811 48779 48909 48878 48878 48848 48811 48801 48814 49049 49051 48868
48809 48810 48829 48825 48787 48862 48889 48873 48840 48806 48804 49057 49030 49060 49036

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 48792 bytes 100%
1,000 48780 bytes -12 bytes 100%
10,000 48771 bytes -9 bytes 100%
100,000 48765 bytes -6 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
49017 bytes +252 bytes (+0.52%) +137 bytes
49096 bytes +331 bytes (+0.68%) +216 bytes
49099 bytes +334 bytes (+0.68%) +219 bytes
49015 bytes +250 bytes (+0.51%) +135 bytes
49029 bytes +264 bytes (+0.54%) +149 bytes
49037 bytes +272 bytes (+0.56%) +157 bytes
48944 bytes +179 bytes (+0.37%) +64 bytes
48880 bytes +115 bytes (+0.24%)
48888 bytes +123 bytes (+0.25%) +8 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 39020 bytes -9745 bytes (-19.98%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41452 bytes -7313 bytes (-15.00%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42181 bytes -6584 bytes (-13.50%)
Brotli (Wikipedia) brotli brotli -q 11 44183 bytes -4582 bytes (-9.40%)
LZMA2 (Wikipedia) xz xz -9 44840 bytes -3925 bytes (-8.05%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46816 bytes -1949 bytes (-4.00%)
ZSTD (Wikipedia) zstd zstd -19 47268 bytes -1497 bytes (-3.07%)

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