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

After GZIP compression these minified files vary in size:
Boot
  55923 bytes (54.6k)
CDN, direct link
Baidu
  48793 bytes (47.6k)
CDN, direct link
cdnjs
  48783 bytes (47.6k)
CDN, direct link
gzip -6 (default)
  48420 bytes (47.3k)
local copy
cdnhttps
  48373 bytes (47.2k)
CDN, direct link
unpkg
  48359 bytes (47.2k)
CDN, direct link
jsdelivr
  48257 bytes (47.1k)
CDN, direct link
gzip -9
  48254 bytes (47.1k)
local copy
7zip -mx=9 -tgzip
  46708 bytes (45.6k)
local copy
libdeflate -12
  46682 bytes (45.6k)
local copy
pigz -11 -n
  46522 bytes (45.4k)
local copy
kzip -s0 -rn -b7
  46500 bytes (45.4k)
local copy
Zopfli
  46390 bytes (45.3k)
local copy
Zopfli (defluff)
  46389 bytes (45.3k)
local copy

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

You will automatically get the smallest D3 3.2.2 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 1867 bytes by using my D3 3.2.2 Zopfli version instead of the best available CDN (4.02% smaller than jsdelivr, 46390 vs. 48257 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 --mls128 --bsr8 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 128  --mls128
block splitting recursion 8  --bsr8
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 (46389 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.2.2/d3.min.js --location | md5sum
06b9201dc7fd311bfcdb9a2bfff6013b  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.2.2.min.zopfli.js.gz | md5sum
06b9201dc7fd311bfcdb9a2bfff6013b  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 48359 bytes 06b9201dc7fd311bfcdb9a2bfff6013b July 11, 2016 @ 16:32
jsdelivr 48257 bytes 06b9201dc7fd311bfcdb9a2bfff6013b (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Boot 55923 bytes 33f65cb54deb15e5dc1c060f66fe5b5a only whitespaces differ (invalid)
Baidu 48793 bytes 1a43c97cdfadcfe48dfde288c4055ed2 only whitespaces differ (invalid)
cdnjs 48783 bytes 33f65cb54deb15e5dc1c060f66fe5b5a only whitespaces differ (invalid)
cdnhttps 48373 bytes 33f65cb54deb15e5dc1c060f66fe5b5a only whitespaces differ December 24, 2015 @ 07:33

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
46390 bytes -5 bytes zopfli --i100000 --mls128 --bsr8 --lazy --ohh December 21, 2015 @ 15:46
46395 bytes -7 bytes zopfli --i10000 --mls128 --bsr8 --lazy --ohh November 23, 2015 @ 17:36
46402 bytes -2 bytes zopfli --i1000 --mls128 --bsr8 --lazy --ohh September 20, 2015 @ 05:53
46404 bytes -8 bytes zopfli --i1000 --mls64 --bsr8 --lazy --ohh September 20, 2015 @ 05:44
46412 bytes zopfli --i100 --mls128 --bsr8 --lazy --ohh September 18, 2015 @ 21:47

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

Most recent activity on March 1, 2017 @ 01:26.

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
46595 46582 46588 46590 46593 46423 46590 46581 46584 46588 46588 46596 46608 46544 46597
46499 46510 46512 46543 46460 46502 46544 46605 46440 46426 46482 46440 46595 46497 46507
46599 46581 46539 46476 46440 46413 46428 46414 46533 46607 46480 46435 46605 46486 46514
46592 46586 46454 46523 46438 46444 46414 46555 46472 46436 46606 46451 46619 46577 46572
46598 46600 46504 46488 46397 46401 46390 46445 46409 46421 46525 46489 46606 46491 46578
46580 46590 46525 46505 46452 46465 46426 46486 46484 46491 46493 46489 46606 46580 46468
46419 46419 46412 46416 46437 46466 46443 46532 46537 46606 46542 46529 46592 46491 46473
46506 46594 46445 46479 46448 46439 46407 46417 46430 46425 46496 46404 46585 46466 46597
46488 46512 46597 46491 46437 46466 46404 46556 46559 46430 46475 46424 46576 46482 46486
46505 46509 46515 46465 46423 46431 46475 46423 46421 46429 46482 46427 46582 46480 46475
46596 46578 46583 46479 46431 46444 46421 46433 46411 46427 46483 46413 46580 46483 46573
46583 46444 46485 46522 46422 46441 46406 46555 46557 46428 46476 46553 46575 46474 46583
46511 46594 46431 46494 46438 46475 46412 46554 46560 46430 46483 46404 46601 46473 46509
46584 46586 46505 46506 46438 46433 46412 46419 46415 46438 46582 46597 46576 46592 46574
46502 46441 46501 46462 46427 46455 46424 46419 46416 46432 46486 46602 46579 46483 46574
46501 46489 46507 46498 46426 46431 46469 46419 46420 46440 46580 46412 46606 46480 46569
46595 46517 46601 46491 46444 46466 46470 46420 46529 46425 46486 46552 46582 46581 46604
46541 46447 46417 46497 46441 46431 46403 46544 46546 46430 46582 46552 46580 46493 46466
46600 46487 46516 46500 46445 46464 46420 46424 46420 46423 46576 46413 46587 46484 46576
46594 46470 46597 46442 46454 46413 46472 46422 46518 46428 46485 46401 46606 46486 46597
46582 46507 46502 46497 46457 46441 46399 46418 46555 46435 46475 46391 46604 46485 46583
46581 46544 46524 46498 46463 46410 46422 46461 46545 46607 46476 46410 46606 46483 46484
46583 46592 46597 46490 46426 46464 46420 46446 46418 46605 46476 46414 46606 46482 46572

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 46412 bytes 100%
1,000 46402 bytes -10 bytes 100%
10,000 46395 bytes -7 bytes 100%
100,000 46390 bytes -5 bytes 0.58%
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
46613 bytes +223 bytes (+0.48%) +113 bytes
46626 bytes +236 bytes (+0.51%) +126 bytes
46615 bytes +225 bytes (+0.49%) +115 bytes
46567 bytes +177 bytes (+0.38%) +67 bytes
46595 bytes +205 bytes (+0.44%) +95 bytes
46597 bytes +207 bytes (+0.45%) +97 bytes
46563 bytes +173 bytes (+0.37%) +63 bytes
46500 bytes +110 bytes (+0.24%)
46523 bytes +133 bytes (+0.29%) +23 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 37247 bytes -9143 bytes (-19.71%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 39468 bytes -6922 bytes (-14.92%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 40095 bytes -6295 bytes (-13.57%)
Brotli (Wikipedia) brotli brotli -q 11 41971 bytes -4419 bytes (-9.53%)
LZMA2 (Wikipedia) xz xz -9 42712 bytes -3678 bytes (-7.93%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 44656 bytes -1734 bytes (-3.74%)
ZSTD (Wikipedia) zstd zstd -19 44770 bytes -1620 bytes (-3.49%)

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