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

After GZIP compression these minified files vary in size:
unpkg
  101790 bytes (99.4k)
CDN
Boot
  88827 bytes (86.7k)
CDN
cdnjs
  88827 bytes (86.7k)
CDN
gzip -6 (default)
  88256 bytes (86.2k)
local copy
gzip -9
  87975 bytes (85.9k)
local copy
libdeflate -12
  84437 bytes (82.5k)
local copy
7zip -mx=9 -tgzip
  84082 bytes (82.1k)
local copy
kzip -s0 -rn -b7
  83984 bytes (82.0k)
local copy
zultra
  83830 bytes (81.9k)
local copy
pigz -11 -n
  83659 bytes (81.7k)
local copy
Zopfli
  83512 bytes (81.6k)
local copy
Zopfli (defluff)
  83509 bytes (81.6k)
local copy

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

You will automatically get the smallest D3 6.4.0 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 5315 bytes by using my D3 6.4.0 Zopfli version instead of the best available CDN (6.36% smaller than cdnjs, 83512 vs. 88827 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 --mls8192 --bsr15 --lazy --ohh

(found February 11, 2021)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 8192  --mls8192
block splitting recursion 15  --bsr15
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 3 more bytes (83509 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/v6.4.0/d3.zip --location | md5sum
9b9aeb01b169377d481d9f843a784b25  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-6.4.0.min.zopfli.js.gz | md5sum
9b9aeb01b169377d481d9f843a784b25  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v6.4.0/d3.zip --location | sha1sum
a4124837d126ed25c398f58610ada13e2d6e6fbc  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-6.4.0.min.zopfli.js.gz | sha1sum
a4124837d126ed25c398f58610ada13e2d6e6fbc  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 101790 bytes 9b9aeb01b169377d481d9f843a784b25 (invalid)
Boot 88827 bytes 9b9aeb01b169377d481d9f843a784b25 January 22, 2021 @ 21:28
cdnjs 88827 bytes 9b9aeb01b169377d481d9f843a784b25 January 22, 2021 @ 21:28

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
83512 bytes -5 bytes zopfli --i1000000 --mls8192 --bsr15 --lazy --ohh February 11, 2021 @ 23:00
83517 bytes -7 bytes zopfli --i100000 --mls8192 --bsr15 --lazy --ohh February 10, 2021 @ 15:23
83524 bytes -10 bytes zopfli --i10000 --mls8192 --bsr15 --lazy --ohh February 10, 2021 @ 07:57
83534 bytes -8 bytes zopfli --i1000 --mls8192 --bsr15 --lazy --ohh February 8, 2021 @ 21:41
83542 bytes -29 bytes zopfli --i1000 --mls16384 --bsr12 --lazy --ohh February 8, 2021 @ 20:12
83571 bytes zopfli --i100 --mls8192 --bsr15 --lazy --ohh February 8, 2021 @ 19:45

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

Most recent activity on February 12, 2021 @ 11:22.

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
84049 83845 83886 84280 84276 83875 83891 83899 83936 83962 83825 83836 83830 83843 83896
84140 84139 83826 83816 83831 83828 83866 83653 83649 83658 83657 83625 83600 83633 83711
83671 83657 83791 83812 83609 83608 83604 83621 83594 83597 83605 83609 83802 83564 83787
83846 83822 83942 83823 83803 83708 83602 83590 83782 83595 83588 83698 83680 83596 83811
83964 83808 83891 83721 83793 83772 83786 83592 83583 83617 83801 83626 83746 83555 83964
83940 83809 83965 83945 83583 83593 83596 83584 83587 83624 83632 83745 83551 83741 83791
83820 83787 83931 83801 83581 83603 83576 83585 83587 83593 83577 83587 83708 83745 83790
83812 83792 83822 83904 83779 83772 83778 83591 83778 83620 83671 83585 83710 83675 83784
83784 83873 83919 83785 83588 83578 83778 83587 83587 83691 83715 83736 83712 83524 83721
83804 83802 83946 83905 83733 83783 83598 83584 83585 83605 83612 83589 83711 83674 83837
83808 83887 83925 83826 83775 83815 83774 83592 83784 83609 83590 83726 83715 83679 84080
83937 83783 83944 83969 83909 83747 83603 83592 83587 83611 83582 83926 83512 83739 84078
83925 83799 83940 84010 83788 83590 83598 83598 83955 83607 83587 83957 83537 83736 84058
83818 83847 83949 83788 83790 83808 83582 83588 83585 83593 83694 83732 83685 83738 84064
83980 83956 83950 83786 83808 83808 83747 83601 83779 83606 83582 83783 83681 83734 83948
83920 83781 83786 83773 83779 83780 83778 83589 83775 83605 83576 83745 83718 83680 83772
83923 83893 83907 83897 83794 83786 83600 83591 83590 83594 83775 83735 83680 83679 83871
83800 83802 83811 83786 83901 83786 83582 83595 83592 83580 83582 83578 83713 83680 83869
83890 83903 83900 83774 83775 83779 83777 83592 83863 83592 83588 83590 83710 83741 83706
83941 83785 83821 83788 83791 83791 83589 83588 83585 83605 83611 83778 83564 83745 83930
83923 83886 83921 83776 83791 83775 83781 83591 83587 83594 83610 83736 83678 83746 84059
83920 83795 83931 83931 83788 83791 83587 83591 83582 83595 83614 83740 83706 83751 83788
83919 83898 83930 83774 83793 83797 83777 83587 83780 83624 83584 83767 83772 83675 84061

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 83571 bytes 100%
1,000 83534 bytes -37 bytes 100%
10,000 83524 bytes -10 bytes 100%
100,000 83517 bytes -7 bytes 0.58%
1,000,000 83512 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
84009 bytes +497 bytes (+0.60%) +25 bytes
85380 bytes +1868 bytes (+2.24%) +1396 bytes
85221 bytes +1709 bytes (+2.05%) +1237 bytes
84005 bytes +493 bytes (+0.59%) +21 bytes
84009 bytes +497 bytes (+0.60%) +25 bytes
83999 bytes +487 bytes (+0.58%) +15 bytes
84007 bytes +495 bytes (+0.59%) +23 bytes
83984 bytes +472 bytes (+0.57%)
84001 bytes +489 bytes (+0.59%) +17 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 65372 bytes -18140 bytes (-21.72%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 72791 bytes -10721 bytes (-12.84%)
LZMA2 (Wikipedia) xz xz -9 73856 bytes -9656 bytes (-11.56%)
Brotli (Wikipedia) brotli brotli -q 11 73935 bytes -9577 bytes (-11.47%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 74523 bytes -8989 bytes (-10.76%)
Zstandard (Wikipedia) zstd zstd -19 79764 bytes -3748 bytes (-4.49%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 82522 bytes -990 bytes (-1.19%)

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.