Choose a version:
45% The original file has 326163 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 146814 bytes (143.4k, 45%).

After GZIP compression these minified files vary in size:
Boot
  58556 bytes (57.2k)
CDN
Baidu
  51639 bytes (50.4k)
CDN
cdnjs
  51627 bytes (50.4k)
CDN
unpkg
  51315 bytes (50.1k)
CDN
gzip -6 (default)
  51238 bytes (50.0k)
local copy
gzip -9
  51065 bytes (49.9k)
local copy
libdeflate -12
  49419 bytes (48.3k)
local copy
7zip -mx=9 -tgzip
  49312 bytes (48.2k)
local copy
zultra
  49285 bytes (48.1k)
local copy
pigz -11 -n
  49120 bytes (48.0k)
local copy
kzip -s0 -rn -b8
  49081 bytes (47.9k)
local copy
Zopfli
  49016 bytes (47.9k)
local copy
Zopfli (defluff)
  49015 bytes (47.9k)
local copy

perma-link to the smallest file on my server:
http://minime.stephan-brumme.com/files/d3/d3-3.4.2.min.js (or via HTTPS)

You will automatically get the smallest D3 3.4.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 2299 bytes by using my D3 3.4.2 Zopfli version instead of the best available CDN (4.69% smaller than unpkg, 49016 vs. 51315 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 --bsr12 --lazy --ohh

(found December 22, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 128  --mls128
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 1 more byte (49015 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.2/d3.min.js --location | md5sum
33a4640a0fc7e2a0ab47ec00b506f4c7  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.4.2.min.zopfli.js.gz | md5sum
33a4640a0fc7e2a0ab47ec00b506f4c7  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.4.2/d3.min.js --location | sha1sum
4dab03cbe89534a45011f025e0e3cf2558e85271  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.4.2.min.zopfli.js.gz | sha1sum
4dab03cbe89534a45011f025e0e3cf2558e85271  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58556 bytes 33a4640a0fc7e2a0ab47ec00b506f4c7 (invalid)
cdnjs 51627 bytes 33a4640a0fc7e2a0ab47ec00b506f4c7 (invalid)
unpkg 51315 bytes 33a4640a0fc7e2a0ab47ec00b506f4c7 July 11, 2016 @ 16:31

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

6.7.0, 6.6.2, 6.6.1, 6.6.0, 6.5.0, 6.4.0, 6.3.1, 6.2.0, 6.1.1, 6.1.0, 6.0.0,
5.16.0, 5.15.1, 5.15.0, 5.14.2, 5.14.1, 5.14.0, 5.13.1, 5.13.0, 5.12.0, 5.11.0, 5.10.1, 5.10.0,
5.9.7, 5.9.6, 5.9.5, 5.9.4, 5.9.3, 5.9.2, 5.9.1, 5.9.0, 5.8.2, 5.8.1, 5.8.0, 5.7.0, 5.6.0, 5.5.0, 5.4.0, 5.3.0, 5.2.0, 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
49016 bytes -6 bytes zopfli --i100000 --mls128 --bsr12 --lazy --ohh December 22, 2015 @ 10:23
49022 bytes -9 bytes zopfli --i10000 --mls128 --bsr12 --lazy --ohh October 13, 2015 @ 18:58
49031 bytes -16 bytes zopfli --i1000 --mls128 --bsr12 --lazy --ohh September 19, 2015 @ 12:13
49047 bytes zopfli --i100 --mls128 --bsr12 --lazy --ohh September 18, 2015 @ 22:16

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

Most recent activity on July 20, 2020 @ 12:53.

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
49309 49237 49240 49237 49237 49182 49242 49217 49223 49222 49295 49282 49299 49178 49297
49063 49088 49123 49115 49099 49129 49050 49149 49155 49152 49146 49191 49299 49184 49056
49057 49110 49115 49121 49059 49073 49153 49161 49147 49143 49158 49200 49292 49152 49067
49111 49038 49108 49128 49087 49065 49128 49175 49142 49140 49142 49175 49293 49074 49056
49042 49048 49123 49148 49103 49060 49046 49164 49139 49141 49291 49154 49293 49149 49173
49089 49102 49200 49092 49086 49095 49113 49157 49141 49142 49148 49152 49297 49049 49061
49104 49108 49200 49139 49107 49070 49115 49159 49125 49138 49139 49144 49293 49156 49051
49099 49077 49113 49112 49080 49094 49066 49123 49123 49141 49148 49150 49291 49049 49056
49105 49109 49112 49110 49086 49097 49016 49134 49124 49139 49155 49153 49291 49073 49059
49074 49110 49114 49097 49082 49076 49109 49154 49134 49139 49152 49149 49291 49151 49056
49088 49116 49114 49133 49086 49070 49107 49153 49142 49144 49142 49150 49297 49073 49067
49035 49090 49120 49096 49090 49038 49050 49152 49140 49139 49141 49158 49291 49147 49080
49090 49119 49198 49205 49126 49092 49109 49155 49136 49139 49139 49144 49296 49077 49057
49193 49126 49131 49097 49101 49098 49035 49154 49139 49140 49139 49151 49296 49079 49056
49191 49055 49190 49127 49083 49088 49035 49153 49141 49143 49155 49152 49290 49072 49058
49185 49189 49185 49116 49071 49088 49027 49156 49141 49141 49136 49149 49297 49065 49056
49105 49104 49115 49080 49097 49094 49111 49153 49137 49141 49150 49145 49288 49173 49056
49194 49121 49116 49136 49074 49106 49111 49152 49142 49139 49148 49147 49293 49153 49055
49162 49093 49186 49141 49096 49042 49036 49152 49140 49143 49153 49149 49297 49140 49056
49188 49192 49192 49097 49081 49051 49048 49152 49139 49140 49153 49158 49296 49079 49059
49106 49119 49112 49100 49089 49128 49035 49160 49135 49141 49151 49151 49297 49075 49062
49063 49118 49113 49147 49092 49081 49114 49153 49134 49142 49139 49145 49291 49049 49057
49188 49045 49110 49139 49083 49081 49056 49165 49144 49142 49151 49152 49292 49070 49095

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 49047 bytes 100%
1,000 49031 bytes -16 bytes 100%
10,000 49022 bytes -9 bytes 100%
100,000 49016 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
49325 bytes +309 bytes (+0.63%) +244 bytes
49325 bytes +309 bytes (+0.63%) +244 bytes
49311 bytes +295 bytes (+0.60%) +230 bytes
49261 bytes +245 bytes (+0.50%) +180 bytes
49197 bytes +181 bytes (+0.37%) +116 bytes
49193 bytes +177 bytes (+0.36%) +112 bytes
49093 bytes +77 bytes (+0.16%) +12 bytes
49117 bytes +101 bytes (+0.21%) +36 bytes
49081 bytes +65 bytes (+0.13%)

Non-DEFLATE Algorithms

Archivers based on completely different compression algorithms often produce superior results.
Unfortunately, browsers only support gzip compression at the moment.
However, support for Brotli is constantly growing - but your browser doesn't support it.
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 39107 bytes -9909 bytes (-20.22%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41509 bytes -7507 bytes (-15.32%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42533 bytes -6483 bytes (-13.23%)
Brotli (Wikipedia) brotli brotli -q 11 44234 bytes -4782 bytes (-9.76%)
LZMA2 (Wikipedia) xz xz -9 44940 bytes -4076 bytes (-8.32%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46821 bytes -2195 bytes (-4.48%)
Zstandard (Wikipedia) zstd zstd -19 47363 bytes -1653 bytes (-3.37%)

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 2024.
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

All trademarks are property of their respective owners. You know, the boring legal stuff.