Choose a version:
47% The original file has 268323 bytes (262.0k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 126718 bytes (123.7k, 47%).

After GZIP compression these minified files vary in size:
Boot
  48747 bytes (47.6k)
CDN, direct link
Baidu
  42653 bytes (41.7k)
CDN, direct link
cdnjs
  42643 bytes (41.6k)
CDN, direct link
gzip -6 (default)
  42308 bytes (41.3k)
local copy
cdnhttps
  42292 bytes (41.3k)
CDN, direct link
unpkg
  42268 bytes (41.3k)
CDN, direct link
gzip -9
  42186 bytes (41.2k)
local copy
7zip -mx=9 -tgzip
  40817 bytes (39.9k)
local copy
libdeflate -12
  40775 bytes (39.8k)
local copy
pigz -11 -n
  40763 bytes (39.8k)
local copy
kzip -s0 -rn -b8
  40683 bytes (39.7k)
local copy
Zopfli
  40557 bytes (39.6k)
local copy
Zopfli (defluff)
  40556 bytes (39.6k)
local copy

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

You will automatically get the smallest D3 3.0.7 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 1711 bytes by using my D3 3.0.7 Zopfli version instead of the best available CDN (4.22% smaller than unpkg, 40557 vs. 42268 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 --bsr13 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 16  --mls16
block splitting recursion 13  --bsr13
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 (40556 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.0.7/d3.min.js --location | md5sum
6963117481486a82039dbcc010708729  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.0.7.min.zopfli.js.gz | md5sum
6963117481486a82039dbcc010708729  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.0.7/d3.min.js --location | sha1sum
8c1331d57687b27b1a2f5d148d813d79b2753c4d  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.0.7.min.zopfli.js.gz | sha1sum
8c1331d57687b27b1a2f5d148d813d79b2753c4d  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 48747 bytes 6963117481486a82039dbcc010708729 (invalid)
cdnjs 42643 bytes 6963117481486a82039dbcc010708729 (invalid)
cdnhttps 42292 bytes 6963117481486a82039dbcc010708729 December 24, 2015 @ 07:33
unpkg 42268 bytes 6963117481486a82039dbcc010708729 July 11, 2016 @ 16:32

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 42653 bytes b1c7c6de336e09138e7c7e520cefc5e0 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.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
40557 bytes -7 bytes zopfli --i100000 --mls16 --bsr13 --lazy --ohh December 21, 2015 @ 12:16
40564 bytes -5 bytes zopfli --i10000 --mls16 --bsr13 --lazy --ohh November 23, 2015 @ 17:14
40569 bytes -3 bytes zopfli --i1000 --mls16 --bsr13 --lazy --ohh September 20, 2015 @ 16:57
40572 bytes -11 bytes zopfli --i1000 --mls16 --bsr11 --lazy --ohh September 20, 2015 @ 16:56
40583 bytes zopfli --i100 --mls16 --bsr13 --lazy --ohh September 18, 2015 @ 20:19

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

Most recent activity on March 5, 2017 @ 04:21.

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
40730 40676 40723 40729 40731 40694 40694 40728 40728 40755 40755 40671 40756 40761 40758
40632 40673 40581 40729 40727 40723 40709 40717 40725 40757 40757 40723 40760 40734 40755
40722 40615 40732 40722 40728 40613 40594 40733 40735 40749 40760 40606 40755 40661 40763
40721 40726 40640 40678 40736 40728 40716 40719 40724 40747 40748 40614 40761 40722 40627
40638 40707 40579 40670 40651 40736 40632 40577 40729 40756 40757 40624 40754 40743 40742
40721 40724 40733 40731 40730 40638 40601 40605 40631 40746 40628 40747 40757 40660 40624
40609 40675 40587 40592 40643 40638 40607 40618 40657 40748 40748 40632 40755 40641 40751
40566 40610 40605 40569 40620 40612 40612 40642 40670 40748 40746 40619 40765 40663 40632
40736 40569 40601 40606 40615 40632 40578 40630 40677 40759 40746 40620 40753 40760 40742
40586 40594 40619 40557 40593 40598 40593 40625 40599 40748 40745 40745 40754 40756 40757
40638 40614 40574 40586 40596 40603 40604 40595 40650 40624 40756 40620 40755 40615 40759
40734 40600 40602 40573 40594 40713 40606 40606 40737 40748 40625 40610 40755 40628 40631
40598 40580 40601 40598 40595 40598 40604 40601 40659 40747 40759 40746 40757 40731 40751
40632 40623 40569 40596 40595 40630 40597 40592 40653 40747 40747 40619 40755 40650 40626
40602 40627 40610 40735 40577 40634 40620 40631 40726 40755 40748 40621 40756 40753 40626
40630 40599 40595 40735 40594 40734 40592 40602 40648 40612 40624 40622 40755 40639 40747
40591 40602 40603 40735 40603 40598 40600 40627 40653 40749 40744 40746 40757 40643 40744
40561 40605 40602 40602 40636 40634 40605 40614 40650 40747 40622 40743 40757 40636 40743
40601 40599 40602 40730 40599 40723 40616 40606 40726 40748 40756 40637 40757 40750 40747
40736 40627 40732 40664 40601 40597 40598 40614 40656 40756 40746 40746 40756 40630 40751
40732 40596 40579 40570 40594 40609 40599 40595 40668 40747 40756 40747 40754 40751 40752
40733 40598 40595 40733 40642 40635 40591 40728 40665 40747 40628 40620 40757 40654 40743
40585 40607 40731 40734 40728 40635 40608 40619 40632 40747 40758 40619 40755 40653 40742

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 40578 bytes 100%
1,000 40569 bytes -9 bytes 100%
10,000 40564 bytes -5 bytes 100%
100,000 40557 bytes -7 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
40769 bytes +212 bytes (+0.52%) +86 bytes
40777 bytes +220 bytes (+0.54%) +94 bytes
40764 bytes +207 bytes (+0.51%) +81 bytes
40776 bytes +219 bytes (+0.54%) +93 bytes
40779 bytes +222 bytes (+0.55%) +96 bytes
40801 bytes +244 bytes (+0.60%) +118 bytes
40792 bytes +235 bytes (+0.58%) +109 bytes
40774 bytes +217 bytes (+0.54%) +91 bytes
40683 bytes +126 bytes (+0.31%)

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 32861 bytes -7696 bytes (-18.98%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 34680 bytes -5877 bytes (-14.49%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 36129 bytes -4428 bytes (-10.92%)
Brotli (Wikipedia) brotli brotli -q 11 36883 bytes -3674 bytes (-9.06%)
LZMA2 (Wikipedia) xz xz -9 37664 bytes -2893 bytes (-7.13%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 39235 bytes -1322 bytes (-3.26%)
ZSTD (Wikipedia) zstd zstd -19 39320 bytes -1237 bytes (-3.05%)

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