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

After GZIP compression these minified files vary in size:
Boot
  83907 bytes (81.9k)
CDN
cdnjs
  73994 bytes (72.3k)
CDN
gzip -6 (default)
  73413 bytes (71.7k)
local copy
gzip -9
  73134 bytes (71.4k)
local copy
libdeflate -12
  70136 bytes (68.5k)
local copy
7zip -mx=9 -tgzip
  69955 bytes (68.3k)
local copy
zultra
  69768 bytes (68.1k)
local copy
kzip -s0 -rn -b7
  69552 bytes (67.9k)
local copy
pigz -11 -n
  69489 bytes (67.9k)
local copy
Zopfli
  69419 bytes (67.8k)
local copy
Zopfli (defluff)
  69417 bytes (67.8k)
local copy

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

You will automatically get the smallest D3 4.10.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 4575 bytes by using my D3 4.10.2 Zopfli version instead of the best available CDN (6.59% smaller than cdnjs, 69419 vs. 73994 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 --mls4096 --bsr40 --lazy --ohh

(found September 7, 2017)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 4096  --mls4096
block splitting recursion 40  --bsr40
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 2 more bytes (69417 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/v4.10.2/d3.zip --location | md5sum
c786f4bd96f4467d50bd746ba2e20535  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-4.10.2.min.zopfli.js.gz | md5sum
c786f4bd96f4467d50bd746ba2e20535  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v4.10.2/d3.zip --location | sha1sum
6d838cf968a824f645c15863023f3e0e820909ef  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-4.10.2.min.zopfli.js.gz | sha1sum
6d838cf968a824f645c15863023f3e0e820909ef  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 83907 bytes c786f4bd96f4467d50bd746ba2e20535 September 4, 2017 @ 06:33
cdnjs 73994 bytes c786f4bd96f4467d50bd746ba2e20535 September 3, 2017 @ 20:49

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
69419 bytes -1 byte zopfli --i1000000 --mls4096 --bsr40 --lazy --ohh September 7, 2017 @ 02:08
69420 bytes -8 bytes zopfli --i100000 --mls4096 --bsr40 --lazy --ohh September 6, 2017 @ 11:08
69428 bytes -7 bytes zopfli --i10000 --mls4096 --bsr40 --lazy --ohh September 6, 2017 @ 10:00
69435 bytes -3 bytes zopfli --i10000 --mls32768 --bsr14 --lazy --ohh September 6, 2017 @ 09:58
69438 bytes -2 bytes zopfli --i1000 --mls4096 --bsr40 --lazy --ohh September 6, 2017 @ 08:37
69440 bytes -14 bytes zopfli --i1000 --mls128 --bsr10 --lazy --ohh September 6, 2017 @ 08:37
69454 bytes zopfli --i100 --mls32768 --bsr14 --lazy --ohh September 6, 2017 @ 07:32

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

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
69777 69784 69604 69619 69590 69616 69543 69583 69600 69692 69686 69534 69699 69716 69666
69556 69565 69876 69874 69859 69855 69858 69868 69566 69548 69560 69662 69631 69591 69535
69460 69514 69458 69568 69527 69521 69507 69513 69459 69474 69475 69441 69475 69473 69586
69597 69593 69545 69467 69466 69455 69567 69545 69456 69485 69471 69487 69486 69625 69505
69460 69458 69458 69468 69448 69475 69471 69478 69474 69536 69468 69477 69610 69539 69537
69532 69507 69542 69539 69504 69541 69462 69459 69532 69438 69498 69466 69513 69438 69522
69471 69496 69493 69471 69479 69456 69427 69446 69460 69495 69452 69464 69605 69623 69528
69486 69460 69482 69489 69464 69459 69471 69499 69455 69468 69483 69620 69582 69512 69487
69457 69486 69465 69460 69472 69459 69454 69463 69462 69462 69486 69488 69543 69483 69529
69464 69459 69471 69461 69463 69461 69473 69468 69458 69491 69458 69463 69458 69480 69518
69511 69491 69463 69462 69465 69485 69470 69457 69483 69461 69482 69525 69583 69538 69435
69465 69479 69452 69464 69471 69482 69469 69466 69461 69498 69486 69467 69488 69456 69464
69477 69471 69469 69471 69467 69491 69446 69463 69466 69496 69461 69446 69618 69623 69522
69495 69459 69466 69465 69470 69503 69463 69461 69456 69512 69457 69478 69602 69488 69474
69458 69461 69448 69464 69486 69495 69454 69464 69460 69469 69481 69444 69464 69456 69474
69528 69514 69462 69464 69460 69457 69440 69468 69463 69463 69485 69478 69622 69623 69527
69452 69458 69460 69448 69465 69467 69473 69464 69458 69460 69469 69524 69484 69474 69455
69468 69458 69469 69469 69460 69452 69460 69464 69463 69466 69460 69478 69597 69501 69508
69575 69481 69459 69463 69473 69452 69462 69465 69455 69471 69459 69489 69466 69456 69518
69463 69461 69460 69465 69460 69477 69455 69464 69457 69460 69456 69463 69579 69459 69444
69454 69469 69462 69463 69473 69463 69466 69464 69462 69464 69463 69461 69460 69468 69480
69464 69463 69462 69466 69465 69458 69466 69458 69461 69465 69461 69489 69600 69623 69459
69464 69459 69464 69463 69460 69457 69476 69460 69458 69462 69469 69419 69566 69464 69521

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 69454 bytes 100%
1,000 69438 bytes -16 bytes 100%
10,000 69428 bytes -10 bytes 100%
100,000 69420 bytes -8 bytes 0.58%
1,000,000 69419 bytes -1 byte 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
69680 bytes +261 bytes (+0.38%) +128 bytes
70896 bytes +1477 bytes (+2.13%) +1344 bytes
70751 bytes +1332 bytes (+1.92%) +1199 bytes
69688 bytes +269 bytes (+0.39%) +136 bytes
69672 bytes +253 bytes (+0.36%) +120 bytes
69700 bytes +281 bytes (+0.40%) +148 bytes
69689 bytes +270 bytes (+0.39%) +137 bytes
69552 bytes +133 bytes (+0.19%)
69561 bytes +142 bytes (+0.20%) +9 bytes

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 54544 bytes -14875 bytes (-21.43%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 60166 bytes -9253 bytes (-13.33%)
LZMA2 (Wikipedia) xz xz -9 61484 bytes -7935 bytes (-11.43%)
Brotli (Wikipedia) brotli brotli -q 11 61510 bytes -7909 bytes (-11.39%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 62292 bytes -7127 bytes (-10.27%)
Zstandard (Wikipedia) zstd zstd -19 66808 bytes -2611 bytes (-3.76%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 67643 bytes -1776 bytes (-2.56%)

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.