Choose a version:
48% The original file has 506925 bytes (495.0k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 242740 bytes (237.1k, 48%).

After GZIP compression these minified files vary in size:
unpkg
  91383 bytes (89.2k)
CDN
Boot
  80157 bytes (78.3k)
CDN
cdnjs
  80157 bytes (78.3k)
CDN
gzip -6 (default)
  79438 bytes (77.6k)
local copy
gzip -9
  79143 bytes (77.3k)
local copy
libdeflate -12
  75979 bytes (74.2k)
local copy
7zip -mx=9 -tgzip
  75483 bytes (73.7k)
local copy
kzip -s0 -rn -b8
  75243 bytes (73.5k)
local copy
zultra
  75214 bytes (73.5k)
local copy
pigz -11 -n
  75033 bytes (73.3k)
local copy
Zopfli
  74946 bytes (73.2k)
local copy
Zopfli (defluff)
  74945 bytes (73.2k)
local copy

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

You will automatically get the smallest D3 5.9.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 5211 bytes by using my D3 5.9.2 Zopfli version instead of the best available CDN (6.95% smaller than cdnjs, 74946 vs. 80157 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 --i1000000 --mb8 --mls16384 --bsr6 --lazy --ohh

(found March 16, 2019)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 6  --bsr6
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 (74945 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/v5.9.2/d3.zip --location | md5sum
c15ee63dadb279a180afaae6b580aec1  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.9.2.min.zopfli.js.gz | md5sum
c15ee63dadb279a180afaae6b580aec1  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v5.9.2/d3.zip --location | sha1sum
3c18d4b684c7278c1d894d5ed8512da0d1908a90  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.9.2.min.zopfli.js.gz | sha1sum
3c18d4b684c7278c1d894d5ed8512da0d1908a90  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 91383 bytes c15ee63dadb279a180afaae6b580aec1 (invalid)
Boot 80157 bytes c15ee63dadb279a180afaae6b580aec1 March 14, 2019 @ 17:45
cdnjs 80157 bytes c15ee63dadb279a180afaae6b580aec1 March 14, 2019 @ 17:45

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
74946 bytes -5 bytes zopfli --i1000000 --mls16384 --bsr6 --lazy --ohh March 16, 2019 @ 06:16
74951 bytes -8 bytes zopfli --i100000 --mls16384 --bsr6 --lazy --ohh March 15, 2019 @ 18:46
74959 bytes -14 bytes zopfli --i10000 --mls16384 --bsr6 --lazy --ohh March 15, 2019 @ 12:25
74973 bytes -12 bytes zopfli --i1000 --mls16384 --bsr6 --lazy --ohh March 15, 2019 @ 10:24
74985 bytes -10 bytes zopfli --i1000 --mls16384 --bsr23 --lazy --ohh March 15, 2019 @ 10:20
74995 bytes zopfli --i100 --mls16384 --bsr6 --lazy --ohh March 15, 2019 @ 10: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:55.

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, 100,000 or 1,000,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
75219 75238 75210 75210 75406 75417 75417 75175 75226 75418 75390 75280 75266 75243 75352
75329 75335 75261 75416 75094 75089 75405 75412 75629 75089 75103 75131 75307 75023 75190
75038 75003 75043 75053 75032 75026 75223 75044 75025 75054 75080 75025 75089 74946 74986
75033 75233 75027 75067 75232 75210 75053 75023 75212 75061 75042 75010 75028 75085 75063
75031 75023 75058 75069 75290 75304 75299 75290 75238 75271 75385 75149 75178 75146 75137
75021 75025 75038 75015 75215 75018 75060 75039 75225 75017 75019 75000 75057 74963 75045
75037 75015 75005 75194 75023 75011 75021 75028 75217 75019 75017 75014 75138 75010 75067
75021 75003 75239 75045 75239 75206 75062 75039 75233 75079 74975 75210 75053 74980 75067
75022 75330 75005 75005 75214 75009 75215 75025 75208 75022 75021 75209 75001 74979 75051
75027 75328 75027 75025 75011 75011 75218 75206 75210 75023 75205 75002 75188 75252 75084
75332 75226 75011 75021 75216 75016 75219 75209 75240 75266 75211 75008 75042 75185 75133
75350 75225 75020 75022 75218 75017 75036 75025 75207 75043 75036 75015 75007 75136 75050
75022 75019 75037 75146 75214 75203 75036 75020 75207 75018 75017 75013 75041 74983 75139
75026 75034 75075 75017 75217 75068 75303 75024 75238 75019 75032 75001 75042 74981 75046
75021 75225 75021 75018 75219 75203 75023 75044 75226 75020 75021 75008 75041 74981 75142
75018 75026 75020 75019 75021 75202 75021 75026 75216 75023 75019 75043 75043 75155 75142
75320 75327 75021 75022 75213 75007 75217 75207 75240 75210 75020 75019 75040 74979 75142
75219 75333 75322 75023 75217 75204 75212 75213 75210 75029 75214 75009 75042 75248 75049
75339 75340 75329 75022 75216 75205 75215 75212 75210 75205 75218 75038 75006 75151 75147
75323 75028 75023 75024 75219 75010 75021 75022 75235 75022 75017 75008 75028 74979 75047
75025 75024 75019 75016 75214 75215 75022 75025 75210 75023 75024 75009 75031 75134 75139
75330 75328 75330 75027 75022 75210 75215 75216 75211 75214 75231 75020 75215 75137 75080
75323 75334 75019 75027 75217 75239 75219 75024 75207 75016 75039 75012 75212 75192 75009

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 74995 bytes 100%
1,000 74973 bytes -22 bytes 100%
10,000 74959 bytes -14 bytes 100%
100,000 74951 bytes -8 bytes 0.58%
1,000,000 74946 bytes -5 bytes 0.29%
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
75401 bytes +455 bytes (+0.61%) +158 bytes
76772 bytes +1826 bytes (+2.44%) +1529 bytes
76645 bytes +1699 bytes (+2.27%) +1402 bytes
75404 bytes +458 bytes (+0.61%) +161 bytes
75419 bytes +473 bytes (+0.63%) +176 bytes
75402 bytes +456 bytes (+0.61%) +159 bytes
75429 bytes +483 bytes (+0.64%) +186 bytes
75431 bytes +485 bytes (+0.65%) +188 bytes
75243 bytes +297 bytes (+0.40%)

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 59105 bytes -15841 bytes (-21.14%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 65880 bytes -9066 bytes (-12.10%)
LZMA2 (Wikipedia) xz xz -9 66688 bytes -8258 bytes (-11.02%)
Brotli (Wikipedia) brotli brotli -q 11 66881 bytes -8065 bytes (-10.76%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 68586 bytes -6360 bytes (-8.49%)
Zstandard (Wikipedia) zstd zstd -19 72093 bytes -2853 bytes (-3.81%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 74715 bytes -231 bytes (-0.31%)

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.