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

After GZIP compression these minified files vary in size:
Boot
  58540 bytes (57.2k)
CDN
jsdelivr
  58540 bytes (57.2k)
CDN
Baidu
  51633 bytes (50.4k)
CDN
cdnjs
  51621 bytes (50.4k)
CDN
unpkg
  51313 bytes (50.1k)
CDN
gzip -6 (default)
  51237 bytes (50.0k)
local copy
cdnhttps
  51226 bytes (50.0k)
CDN
gzip -9
  51063 bytes (49.9k)
local copy
libdeflate -12
  49415 bytes (48.3k)
local copy
7zip -mx=9 -tgzip
  49307 bytes (48.2k)
local copy
pigz -11 -n
  49111 bytes (48.0k)
local copy
kzip -s0 -rn -b8
  49081 bytes (47.9k)
local copy
Zopfli
  49030 bytes (47.9k)
local copy
Zopfli (defluff)
  49029 bytes (47.9k)
local copy

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

You will automatically get the smallest D3 3.4.1 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.1 Zopfli version instead of the best available CDN (4.48% smaller than cdnhttps, 49030 vs. 51226 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 --mls32 --bsr13 --lazy --ohh

(found December 22, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 32  --mls32
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 (49029 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.1/d3.min.js --location | md5sum
188719cfb5454a576f10856b854adf71  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.4.1.min.zopfli.js.gz | md5sum
188719cfb5454a576f10856b854adf71  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.4.1/d3.min.js --location | sha1sum
4ca81aefe90d6e234acd22883f486590708d7a11  -
curl --silent --compressed http://minime.stephan-brumme.com/files/d3/d3-3.4.1.min.zopfli.js.gz | sha1sum
4ca81aefe90d6e234acd22883f486590708d7a11  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58540 bytes 188719cfb5454a576f10856b854adf71 (invalid)
jsdelivr 58540 bytes 188719cfb5454a576f10856b854adf71 (invalid)
cdnjs 51621 bytes 188719cfb5454a576f10856b854adf71 (invalid)
unpkg 51313 bytes 188719cfb5454a576f10856b854adf71 July 11, 2016 @ 16:31
cdnhttps 51226 bytes 188719cfb5454a576f10856b854adf71 December 24, 2015 @ 07:33

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 51633 bytes bd3dcfbb4a3b3e59a9e42a07aa2400b9 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
49030 bytes -6 bytes zopfli --i100000 --mls32 --bsr13 --lazy --ohh December 22, 2015 @ 10:28
49036 bytes -1 byte zopfli --i10000 --mls32 --bsr13 --lazy --ohh November 23, 2015 @ 17:54
49037 bytes -3 bytes zopfli --i10000 --mls32 --bsr10 --lazy --ohh October 14, 2015 @ 06:32
49040 bytes -5 bytes zopfli --i10000 --mls32 --bsr8 --lazy --ohh October 14, 2015 @ 01:29
49045 bytes -15 bytes zopfli --i1000 --mls32 --bsr13 --lazy --ohh September 19, 2015 @ 12:54
49060 bytes zopfli --i100 --mls32 --bsr10 --lazy --ohh September 18, 2015 @ 20:29

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:15.

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
49240 49308 49237 49194 49235 49235 49239 49214 49220 49217 49289 49278 49292 49183 49294
49077 49078 49108 49092 49074 49101 49049 49130 49159 49150 49156 49181 49295 49148 49053
49086 49112 49076 49147 49145 49148 49160 49158 49136 49178 49286 49143 49291 49083 49190
49087 49108 49132 49084 49126 49123 49164 49165 49141 49145 49137 49148 49290 49145 49057
49124 49098 49111 49145 49040 49112 49108 49149 49137 49144 49151 49160 49288 49068 49169
49160 49097 49125 49137 49075 49120 49105 49153 49137 49144 49150 49157 49291 49139 49052
49102 49098 49195 49134 49032 49076 49110 49148 49135 49135 49138 49140 49288 49078 49059
49102 49079 49107 49111 49096 49102 49065 49122 49133 49136 49146 49149 49287 49050 49053
49101 49097 49105 49107 49071 49101 49097 49118 49121 49134 49148 49156 49287 49070 49056
49078 49108 49111 49112 49030 49097 49108 49140 49136 49143 49148 49149 49287 49146 49052
49090 49099 49109 49135 49120 49073 49104 49155 49150 49163 49137 49141 49290 49082 49060
49089 49091 49115 49134 49062 49081 49044 49149 49140 49151 49148 49149 49135 49143 49087
49088 49086 49114 49126 49122 49079 49111 49149 49137 49136 49145 49142 49288 49074 49053
49185 49184 49124 49132 49073 49085 49108 49148 49147 49151 49137 49146 49288 49148 49052
49190 49193 49106 49123 49097 49101 49039 49152 49137 49139 49147 49146 49291 49138 49065
49184 49190 49188 49097 49045 49094 49126 49152 49123 49137 49146 49149 49289 49078 49052
49127 49100 49103 49200 49071 49101 49106 49150 49134 49139 49147 49143 49287 49147 49054
49190 49104 49116 49133 49125 49099 49114 49148 49137 49155 49149 49149 49288 49048 49050
49071 49085 49109 49124 49074 49108 49113 49152 49135 49142 49151 49137 49286 49064 49052
49188 49057 49112 49143 49073 49083 49114 49149 49135 49140 49149 49148 49286 49142 49054
49108 49116 49107 49137 49069 49107 49108 49149 49137 49140 49153 49149 49287 49069 49055
49084 49086 49113 49139 49068 49104 49120 49151 49152 49139 49148 49149 49288 49045 49055
49076 49090 49107 49142 49090 49115 49109 49150 49143 49140 49147 49143 49289 49060 49056

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 49059 bytes 100%
1,000 49045 bytes -14 bytes 100%
10,000 49036 bytes -9 bytes 100%
100,000 49030 bytes -6 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
49323 bytes +293 bytes (+0.60%) +242 bytes
49323 bytes +293 bytes (+0.60%) +242 bytes
49307 bytes +277 bytes (+0.56%) +226 bytes
49256 bytes +226 bytes (+0.46%) +175 bytes
49190 bytes +160 bytes (+0.33%) +109 bytes
49188 bytes +158 bytes (+0.32%) +107 bytes
49093 bytes +63 bytes (+0.13%) +12 bytes
49110 bytes +80 bytes (+0.16%) +29 bytes
49081 bytes +51 bytes (+0.10%)

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 39101 bytes -9929 bytes (-20.25%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41508 bytes -7522 bytes (-15.34%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42525 bytes -6505 bytes (-13.27%)
Brotli (Wikipedia) brotli brotli -q 11 44252 bytes -4778 bytes (-9.75%)
LZMA2 (Wikipedia) xz xz -9 44932 bytes -4098 bytes (-8.36%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46840 bytes -2190 bytes (-4.47%)
ZSTD (Wikipedia) zstd zstd -19 47357 bytes -1673 bytes (-3.41%)

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