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

After GZIP compression these minified files vary in size:
Boot
  55936 bytes (54.6k)
CDN, direct link
Baidu
  48851 bytes (47.7k)
CDN, direct link
cdnjs
  48840 bytes (47.7k)
CDN, direct link
gzip -6 (default)
  48468 bytes (47.3k)
local copy
cdnhttps
  48420 bytes (47.3k)
CDN, direct link
unpkg
  48397 bytes (47.3k)
CDN, direct link
gzip -9
  48291 bytes (47.2k)
local copy
7zip -mx=9 -tgzip
  46722 bytes (45.6k)
local copy
libdeflate -12
  46721 bytes (45.6k)
local copy
pigz -11 -n
  46689 bytes (45.6k)
local copy
kzip -s0 -rn -b7
  46553 bytes (45.5k)
local copy
Zopfli
  46434 bytes (45.3k)
local copy
Zopfli (defluff)
  46431 bytes (45.3k)
local copy

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

You will automatically get the smallest D3 3.2.3 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 1963 bytes by using my D3 3.2.3 Zopfli version instead of the best available CDN (4.23% smaller than unpkg, 46434 vs. 48397 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 --mls16 --bsr7 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 16  --mls16
block splitting recursion 7  --bsr7
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 3 more bytes (46431 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.3/d3.min.js --location | md5sum
3f0a63cb63642cb17462b51623313171  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.2.3.min.zopfli.js.gz | md5sum
3f0a63cb63642cb17462b51623313171  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.2.3/d3.min.js --location | sha1sum
94fc5a73676eb18c5372922668f3a944ca52b0e1  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.2.3.min.zopfli.js.gz | sha1sum
94fc5a73676eb18c5372922668f3a944ca52b0e1  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 55936 bytes 3f0a63cb63642cb17462b51623313171 (invalid)
cdnjs 48840 bytes 3f0a63cb63642cb17462b51623313171 (invalid)
cdnhttps 48420 bytes 3f0a63cb63642cb17462b51623313171 December 24, 2015 @ 07:33
unpkg 48397 bytes 3f0a63cb63642cb17462b51623313171 July 11, 2016 @ 16:32

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 48851 bytes 2523e6982a308ce815a1cbcbd517ec56 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
46434 bytes -3 bytes zopfli --i100000 --mls16 --bsr7 --lazy --ohh December 21, 2015 @ 15:48
46437 bytes -5 bytes zopfli --i10000 --mls16 --bsr7 --lazy --ohh October 21, 2015 @ 13:50
46442 bytes -17 bytes zopfli --i1000 --mls16 --bsr7 --lazy --ohh September 20, 2015 @ 04:59
46459 bytes zopfli --i100 --mls16 --bsr7 --lazy --ohh September 18, 2015 @ 21:42

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 @ 02:51.

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
46620 46622 46636 46631 46637 46587 46629 46630 46640 46639 46654 46618 46644 46571 46650
46643 46637 46545 46564 46561 46597 46559 46610 46644 46645 46540 46619 46629 46538 46655
46487 46632 46530 46469 46494 46515 46572 46589 46577 46471 46643 46614 46611 46526 46648
46551 46633 46649 46434 46483 46593 46581 46514 46505 46525 46644 46639 46612 46527 46629
46635 46522 46638 46581 46493 46480 46511 46508 46499 46640 46643 46616 46614 46527 46645
46562 46631 46532 46463 46554 46598 46556 46592 46598 46546 46544 46598 46615 46623 46630
46583 46574 46577 46573 46561 46578 46582 46592 46572 46644 46585 46591 46614 46539 46628
46566 46570 46637 46476 46500 46601 46582 46571 46495 46488 46481 46617 46641 46629 46629
46532 46634 46639 46526 46493 46584 46560 46544 46601 46454 46490 46612 46615 46517 46631
46578 46575 46600 46455 46531 46471 46515 46539 46489 46651 46470 46631 46612 46526 46629
46624 46541 46566 46446 46516 46559 46518 46498 46561 46484 46535 46579 46613 46527 46628
46515 46592 46517 46467 46502 46597 46566 46591 46587 46472 46603 46612 46640 46526 46630
46520 46535 46510 46515 46603 46582 46577 46588 46558 46457 46469 46610 46613 46527 46630
46628 46524 46529 46510 46469 46479 46618 46567 46568 46644 46535 46606 46614 46532 46649
46626 46638 46510 46516 46484 46603 46488 46486 46485 46473 46469 46606 46615 46533 46645
46559 46581 46576 46518 46485 46479 46488 46452 46594 46471 46490 46601 46641 46517 46645
46636 46580 46493 46573 46477 46585 46579 46569 46575 46476 46484 46579 46614 46530 46611
46558 46579 46477 46584 46469 46581 46584 46567 46568 46472 46591 46573 46614 46518 46632
46637 46570 46533 46464 46475 46593 46606 46583 46585 46453 46494 46618 46613 46529 46631
46497 46638 46523 46463 46491 46580 46583 46581 46569 46651 46644 46619 46615 46526 46628
46563 46577 46556 46464 46482 46579 46510 46564 46581 46455 46481 46577 46612 46519 46611
46516 46576 46487 46466 46492 46493 46574 46589 46559 46469 46597 46573 46612 46528 46629
46568 46465 46474 46521 46469 46585 46586 46588 46558 46583 46583 46576 46615 46534 46635

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 46459 bytes 100%
1,000 46442 bytes -17 bytes 100%
10,000 46437 bytes -5 bytes 100%
100,000 46434 bytes -3 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
46656 bytes +222 bytes (+0.48%) +103 bytes
46669 bytes +235 bytes (+0.51%) +116 bytes
46654 bytes +220 bytes (+0.47%) +101 bytes
46620 bytes +186 bytes (+0.40%) +67 bytes
46649 bytes +215 bytes (+0.46%) +96 bytes
46643 bytes +209 bytes (+0.45%) +90 bytes
46613 bytes +179 bytes (+0.39%) +60 bytes
46553 bytes +119 bytes (+0.26%)
46578 bytes +144 bytes (+0.31%) +25 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 37339 bytes -9095 bytes (-19.59%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 39505 bytes -6929 bytes (-14.92%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 40097 bytes -6337 bytes (-13.65%)
Brotli (Wikipedia) brotli brotli -q 11 42055 bytes -4379 bytes (-9.43%)
LZMA2 (Wikipedia) xz xz -9 42816 bytes -3618 bytes (-7.79%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 44656 bytes -1778 bytes (-3.83%)
ZSTD (Wikipedia) zstd zstd -19 44840 bytes -1594 bytes (-3.43%)

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