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

After GZIP compression these minified files vary in size:
Boot
  58620 bytes (57.2k)
CDN
Baidu
  51695 bytes (50.5k)
CDN
cdnjs
  51683 bytes (50.5k)
CDN
unpkg
  51380 bytes (50.2k)
CDN
gzip -6 (default)
  51292 bytes (50.1k)
local copy
cdnhttps
  51275 bytes (50.1k)
CDN
gzip -9
  51128 bytes (49.9k)
local copy
libdeflate -12
  49476 bytes (48.3k)
local copy
7zip -mx=9 -tgzip
  49412 bytes (48.3k)
local copy
kzip -s0 -rn -b8
  49189 bytes (48.0k)
local copy
pigz -11 -n
  49182 bytes (48.0k)
local copy
Zopfli
  49079 bytes (47.9k)
local copy
Zopfli (defluff)
  49077 bytes (47.9k)
local copy

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

You will automatically get the smallest D3 3.4.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 2196 bytes by using my D3 3.4.4 Zopfli version instead of the best available CDN (4.47% smaller than cdnhttps, 49079 vs. 51275 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 (49077 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.4/d3.min.js --location | md5sum
e799ff567ab837ff3898eb5ac9da60ef  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.4.4.min.zopfli.js.gz | md5sum
e799ff567ab837ff3898eb5ac9da60ef  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58620 bytes e799ff567ab837ff3898eb5ac9da60ef (invalid)
cdnjs 51683 bytes e799ff567ab837ff3898eb5ac9da60ef (invalid)
unpkg 51380 bytes e799ff567ab837ff3898eb5ac9da60ef July 11, 2016 @ 16:31
cdnhttps 51275 bytes e799ff567ab837ff3898eb5ac9da60ef December 24, 2015 @ 07:33

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 51695 bytes 10c08de9d4423bee3c59945d8bead8aa 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:

5.1.0, 5.0.1, 5.0.0,
4.13.0, 4.12.2, 4.12.1, 4.12.0, 4.11.0, 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
49079 bytes -7 bytes zopfli --i100000 --mls512 --bsr12 --lazy --ohh December 22, 2015 @ 12:30
49086 bytes -8 bytes zopfli --i10000 --mls512 --bsr12 --lazy --ohh October 13, 2015 @ 21:45
49094 bytes -18 bytes zopfli --i1000 --mls512 --bsr12 --lazy --ohh September 19, 2015 @ 10:41
49112 bytes -6 bytes zopfli --i1000 --mls128 --bsr6 --lazy --ohh September 19, 2015 @ 10:34
49118 bytes -3 bytes zopfli --i1000 --mls32 --bsr20 --lazy --ohh September 19, 2015 @ 10:29
49121 bytes zopfli --i100 --mls512 --bsr12 --lazy --ohh September 18, 2015 @ 20:02

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 @ 01:07.

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
49329 49311 49263 49305 49306 49256 49281 49281 49250 49272 49353 49345 49359 49366 49234
49277 49261 49133 49187 49150 49154 49122 49205 49114 49208 49369 49230 49360 49211 49359
49165 49261 49166 49159 49144 49177 49104 49224 49142 49358 49248 49362 49356 49357 49361
49215 49140 49165 49161 49177 49201 49143 49125 49103 49203 49225 49203 49356 49355 49127
49273 49273 49192 49179 49188 49119 49144 49206 49144 49205 49230 49223 49365 49200 49162
49272 49284 49178 49151 49170 49139 49126 49199 49109 49206 49208 49219 49357 49200 49125
49269 49158 49186 49144 49158 49123 49156 49110 49107 49204 49210 49238 49356 49190 49120
49270 49268 49184 49160 49170 49123 49122 49116 49103 49206 49205 49227 49360 49214 49135
49270 49262 49168 49162 49172 49169 49146 49205 49079 49206 49210 49236 49360 49218 49135
49280 49259 49189 49163 49171 49157 49132 49113 49108 49205 49208 49215 49360 49202 49136
49273 49139 49167 49160 49174 49171 49135 49115 49106 49210 49208 49219 49360 49200 49119
49271 49264 49170 49160 49170 49169 49133 49116 49117 49206 49206 49200 49360 49200 49182
49184 49150 49169 49191 49170 49134 49142 49119 49106 49205 49211 49228 49361 49202 49119
49287 49276 49169 49142 49172 49169 49133 49114 49126 49205 49210 49236 49356 49195 49120
49273 49140 49158 49144 49174 49161 49142 49119 49109 49205 49211 49226 49360 49356 49127
49280 49257 49169 49157 49162 49135 49141 49100 49120 49206 49203 49222 49356 49205 49119
49256 49259 49170 49142 49107 49121 49139 49108 49111 49210 49209 49221 49357 49199 49132
49273 49157 49186 49164 49170 49154 49127 49203 49106 49210 49228 49244 49360 49209 49131
49170 49252 49170 49158 49169 49195 49147 49110 49112 49213 49209 49222 49360 49204 49128
49257 49263 49244 49144 49159 49156 49142 49103 49105 49206 49206 49223 49355 49366 49137
49276 49260 49184 49160 49161 49103 49140 49110 49108 49214 49207 49234 49356 49210 49137
49195 49258 49167 49174 49171 49117 49148 49108 49108 49210 49203 49223 49360 49201 49119
49279 49161 49158 49143 49171 49129 49139 49100 49109 49209 49212 49205 49360 49207 49124

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 49121 bytes 100%
1,000 49094 bytes -27 bytes 100%
10,000 49086 bytes -8 bytes 100%
100,000 49079 bytes -7 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
49388 bytes +309 bytes (+0.63%) +199 bytes
49386 bytes +307 bytes (+0.63%) +197 bytes
49403 bytes +324 bytes (+0.66%) +214 bytes
49423 bytes +344 bytes (+0.70%) +234 bytes
49354 bytes +275 bytes (+0.56%) +165 bytes
49349 bytes +270 bytes (+0.55%) +160 bytes
49319 bytes +240 bytes (+0.49%) +130 bytes
49232 bytes +153 bytes (+0.31%) +43 bytes
49189 bytes +110 bytes (+0.22%)

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 39127 bytes -9952 bytes (-20.28%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41543 bytes -7536 bytes (-15.35%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42569 bytes -6510 bytes (-13.26%)
Brotli (Wikipedia) brotli brotli -q 11 44362 bytes -4717 bytes (-9.61%)
LZMA2 (Wikipedia) xz xz -9 45056 bytes -4023 bytes (-8.20%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46919 bytes -2160 bytes (-4.40%)
ZSTD (Wikipedia) zstd zstd -19 47439 bytes -1640 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 2018.
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