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

After GZIP compression these minified files vary in size:
cdnjs
  78848 bytes (77.0k)
CDN
gzip -6 (default)
  78143 bytes (76.3k)
local copy
gzip -9
  77847 bytes (76.0k)
local copy
libdeflate -12
  74565 bytes (72.8k)
local copy
7zip -mx=9 -tgzip
  74138 bytes (72.4k)
local copy
kzip -s0 -rn -b8
  73908 bytes (72.2k)
local copy
pigz -11 -n
  73779 bytes (72.0k)
local copy
Zopfli
  73716 bytes (72.0k)
local copy
Zopfli (defluff)
  73715 bytes (72.0k)
local copy

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

You will automatically get the smallest D3 5.7.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 5132 bytes by using my D3 5.7.0 Zopfli version instead of the best available CDN (6.96% smaller than cdnjs, 73716 vs. 78848 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 --mls32768 --bsr19 --lazy --ohh

(found August 26, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 32768  --mls32768
block splitting recursion 19  --bsr19
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 (73715 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.7.0/d3.zip --location | md5sum
0589331f8f4bf99216faa31d79cc6d09  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.7.0.min.zopfli.js.gz | md5sum
0589331f8f4bf99216faa31d79cc6d09  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v5.7.0/d3.zip --location | sha1sum
c9621d5935dd9214b55e14e9a38d0858ae1ffebe  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.7.0.min.zopfli.js.gz | sha1sum
c9621d5935dd9214b55e14e9a38d0858ae1ffebe  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
cdnjs 78848 bytes 0589331f8f4bf99216faa31d79cc6d09 August 25, 2018 @ 00:00

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

Available D3 versions at minime.stephan-brumme.com:

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
73716 bytes -4 bytes zopfli --i1000000 --mls32768 --bsr19 --lazy --ohh August 26, 2018 @ 19:22
73720 bytes -5 bytes zopfli --i100000 --mls32768 --bsr19 --lazy --ohh August 26, 2018 @ 00:51
73725 bytes -1 byte zopfli --i100000 --mls4096 --bsr12 --lazy --ohh August 26, 2018 @ 00:43
73726 bytes -11 bytes zopfli --i10000 --mls32768 --bsr19 --lazy --ohh August 25, 2018 @ 10:12
73737 bytes -7 bytes zopfli --i1000 --mls32768 --bsr19 --lazy --ohh August 25, 2018 @ 10:01
73744 bytes -1 byte zopfli --i1000 --mls4096 --bsr19 --lazy --ohh August 25, 2018 @ 10:01
73745 bytes -8 bytes zopfli --i1000 --mls4096 --bsr11 --lazy --ohh August 25, 2018 @ 10:00
73753 bytes zopfli --i100 --mls32768 --bsr19 --lazy --ohh August 25, 2018 @ 08:25

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

Most recent activity on August 27, 2018 @ 08:27.

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
73868 73877 74081 74213 74047 74135 74171 74056 74024 74043 74133 74140 74102 74159 73936
73777 73947 73858 73858 73857 73868 73851 73877 73886 73905 73830 73761 73919 73793 73992
74056 74049 73988 73971 74093 73958 73777 73796 73738 73769 73819 73773 73755 73748 73951
74067 74083 74062 73964 74060 73946 73742 73743 73740 73960 73825 73740 73768 73947 73755
73977 73782 73846 74042 73959 74078 73945 73945 74063 73907 73955 73768 73758 73889 73821
73961 73746 73744 73746 73767 73794 73784 73773 73756 73753 73747 73757 73930 73955 73765
74024 73782 73752 73751 73839 73753 73764 73755 73756 73765 73871 73741 73931 73934 73966
73764 73786 73991 74151 73771 73796 73778 73768 73744 73753 73758 73735 73736 73895 73966
73748 73749 73754 74055 74053 73754 73938 73941 73752 73935 73756 73725 73755 73897 73942
73937 73932 73809 74054 73956 73939 73948 73954 73941 73943 73746 73752 73877 73837 74015
73951 74075 74054 74055 74051 73935 73939 73948 73932 73942 73748 73751 73902 73874 73914
74093 74055 74078 74051 74053 73936 73935 73951 73936 73940 73748 73729 73893 73905 73914
73942 73935 73749 74056 74053 73938 73948 73952 73746 73759 73751 73739 73910 73892 73967
73789 73778 73764 74049 74051 73836 73755 73763 73749 73757 73748 73729 73907 73865 73962
73759 73746 73745 74055 74053 73837 73757 73761 73742 73748 73750 73729 73907 74040 74058
73946 74157 74056 73834 73833 74081 74015 74091 73752 73749 73826 73725 73912 73923 73716
74064 74066 74051 74049 73766 73964 73964 73937 73937 73938 73745 73760 73891 73924 73983
73943 74102 73752 74059 74194 73939 73946 73945 73937 73940 73757 73726 73925 73921 73973
74055 74048 74052 74052 74198 73942 73946 73948 73938 73943 73750 73749 73894 73908 73981
73942 74050 74047 74054 74053 74081 73953 73945 73933 73943 73753 73748 73909 73898 73984
73941 74054 73749 74055 74056 73752 73746 73757 73751 73760 73748 73760 73890 73922 73979
73933 74050 74057 74053 74053 73932 73940 73940 73933 73938 73821 73753 73930 73955 73924
73937 74050 73750 74055 74054 73943 73950 73939 73749 73937 73748 73751 73928 73923 74060

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 73753 bytes 100%
1,000 73737 bytes -16 bytes 100%
10,000 73726 bytes -11 bytes 100%
100,000 73720 bytes -6 bytes 2.03%
1,000,000 73716 bytes -4 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
74118 bytes +402 bytes (+0.55%) +210 bytes
75500 bytes +1784 bytes (+2.42%) +1592 bytes
75361 bytes +1645 bytes (+2.23%) +1453 bytes
74129 bytes +413 bytes (+0.56%) +221 bytes
74137 bytes +421 bytes (+0.57%) +229 bytes
74120 bytes +404 bytes (+0.55%) +212 bytes
74102 bytes +386 bytes (+0.52%) +194 bytes
73914 bytes +198 bytes (+0.27%) +6 bytes
73908 bytes +192 bytes (+0.26%)

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 58265 bytes -15451 bytes (-20.96%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 64810 bytes -8906 bytes (-12.08%)
LZMA2 (Wikipedia) xz xz -9 65560 bytes -8156 bytes (-11.06%)
Brotli (Wikipedia) brotli brotli -q 11 65822 bytes -7894 bytes (-10.71%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 67426 bytes -6290 bytes (-8.53%)
Zstandard (Wikipedia) zstd zstd -19 70943 bytes -2773 bytes (-3.76%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 73492 bytes -224 bytes (-0.30%)

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