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

After GZIP compression these minified files vary in size:
Boot
  58541 bytes (57.2k)
CDN, direct link
Baidu
  51615 bytes (50.4k)
CDN, direct link
cdnjs
  51607 bytes (50.4k)
CDN, direct link
unpkg
  51305 bytes (50.1k)
CDN, direct link
gzip -6 (default)
  51225 bytes (50.0k)
local copy
cdnhttps
  51209 bytes (50.0k)
CDN, direct link
Yandex
  51097 bytes (49.9k)
CDN, direct link
gzip -9
  51056 bytes (49.9k)
local copy
libdeflate -12
  49407 bytes (48.2k)
local copy
7zip -mx=9 -tgzip
  49334 bytes (48.2k)
local copy
kzip -s0 -rn -b8
  49122 bytes (48.0k)
local copy
pigz -11 -n
  49100 bytes (47.9k)
local copy
Zopfli
  49005 bytes (47.9k)
local copy
Zopfli (defluff)
  49003 bytes (47.9k)
local copy

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

You will automatically get the smallest D3 3.4.5 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 2092 bytes by using my D3 3.4.5 Zopfli version instead of the best available CDN (4.27% smaller than Yandex, 49005 vs. 51097 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 --mls512 --bsr12 --lazy --ohh

(found December 22, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 512  --mls512
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 2 more bytes (49003 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.4.5/d3.min.js --location | md5sum
985e958f2fcb4a541a988617acbc905a  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.4.5.min.zopfli.js.gz | md5sum
985e958f2fcb4a541a988617acbc905a  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58541 bytes 985e958f2fcb4a541a988617acbc905a (invalid)
cdnjs 51607 bytes 985e958f2fcb4a541a988617acbc905a (invalid)
unpkg 51305 bytes 985e958f2fcb4a541a988617acbc905a July 11, 2016 @ 16:31
cdnhttps 51209 bytes 985e958f2fcb4a541a988617acbc905a December 24, 2015 @ 07:33
Yandex 51097 bytes 985e958f2fcb4a541a988617acbc905a (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 51615 bytes d27f0164edcd2eb1bcb220a9e7c58f7f 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
49005 bytes -5 bytes zopfli --i100000 --mls512 --bsr12 --lazy --ohh December 22, 2015 @ 12:31
49010 bytes -12 bytes zopfli --i10000 --mls512 --bsr12 --lazy --ohh October 21, 2015 @ 13:51
49022 bytes -17 bytes zopfli --i1000 --mls512 --bsr12 --lazy --ohh September 19, 2015 @ 09:59
49039 bytes -5 bytes zopfli --i1000 --mls256 --bsr11 --lazy --ohh September 19, 2015 @ 09:49
49044 bytes zopfli --i100 --mls512 --bsr12 --lazy --ohh September 18, 2015 @ 20:57

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

Most recent activity on February 24, 2017 @ 07:42.

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
49253 49297 49232 49192 49182 49181 49161 49203 49213 49204 49281 49272 49289 49296 49296
49134 49177 49076 49067 49074 49144 49073 49123 49035 49134 49144 49168 49289 49118 49287
49031 49041 49085 49093 49071 49153 49035 49034 49040 49042 49287 49292 49287 49052 49292
49097 49177 49068 49095 49099 49074 49135 49149 49054 49043 49143 49157 49284 49285 49051
49095 49103 49096 49094 49096 49066 49066 49122 49123 49053 49132 49155 49292 49284 49107
49198 49211 49098 49086 49080 49131 49068 49126 49041 49138 49137 49130 49290 49086 49068
49083 49181 49079 49083 49083 49098 49061 49124 49038 49045 49139 49124 49284 49135 49046
49195 49085 49101 49081 49092 49097 49044 49030 49036 49051 49132 49155 49290 49052 49055
49199 49185 49097 49072 49096 49103 49064 49045 49005 49055 49142 49159 49284 49088 49050
49093 49183 49079 49083 49089 49102 49059 49126 49034 49044 49140 49135 49290 49081 49042
49077 49105 49082 49098 49096 49142 49071 49132 49032 49046 49139 49151 49283 49083 49050
49178 49188 49061 49103 49105 49095 49059 49035 49040 49041 49139 49136 49284 49087 49070
49095 49098 49076 49082 49120 49123 49047 49029 49043 49133 49138 49122 49291 49285 49048
49197 49200 49087 49071 49089 49124 49063 49035 49040 49132 49131 49153 49285 49087 49047
49078 49173 49087 49058 49087 49051 49041 49124 49036 49051 49133 49159 49286 49288 49051
49183 49181 49081 49087 49083 49097 49059 49128 49037 49137 49133 49136 49286 49052 49045
49090 49176 49091 49086 49069 49100 49059 49127 49037 49047 49140 49128 49284 49048 49048
49076 49182 49096 49096 49097 49103 49045 49122 49032 49044 49137 49156 49291 49049 49058
49176 49175 49073 49097 49094 49112 49067 49125 49032 49139 49142 49126 49283 49052 49054
49188 49084 49073 49170 49087 49092 49064 49129 49038 49133 49135 49127 49284 49080 49054
49200 49176 49067 49085 49096 49107 49056 49125 49042 49136 49137 49127 49284 49060 49051
49197 49187 49070 49085 49091 49107 49067 49122 49036 49046 49137 49139 49284 49046 49049
49202 49178 49081 49072 49092 49121 49068 49130 49040 49045 49141 49144 49285 49049 49059

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 49044 bytes 100%
1,000 49022 bytes -22 bytes 100%
10,000 49010 bytes -12 bytes 100%
100,000 49005 bytes -5 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
49319 bytes +314 bytes (+0.64%) +197 bytes
49316 bytes +311 bytes (+0.63%) +194 bytes
49329 bytes +324 bytes (+0.66%) +207 bytes
49351 bytes +346 bytes (+0.71%) +229 bytes
49287 bytes +282 bytes (+0.58%) +165 bytes
49281 bytes +276 bytes (+0.56%) +159 bytes
49252 bytes +247 bytes (+0.50%) +130 bytes
49167 bytes +162 bytes (+0.33%) +45 bytes
49122 bytes +117 bytes (+0.24%)

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 39064 bytes -9941 bytes (-20.29%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41492 bytes -7513 bytes (-15.33%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42495 bytes -6510 bytes (-13.28%)
Brotli (Wikipedia) brotli brotli -q 11 44311 bytes -4694 bytes (-9.58%)
LZMA2 (Wikipedia) xz xz -9 44984 bytes -4021 bytes (-8.21%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46791 bytes -2214 bytes (-4.52%)
ZSTD (Wikipedia) zstd zstd -19 47370 bytes -1635 bytes (-3.34%)

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