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

After GZIP compression these minified files vary in size:
Boot
  79787 bytes (77.9k)
CDN
cdnjs
  79787 bytes (77.9k)
CDN
gzip -6 (default)
  79073 bytes (77.2k)
local copy
gzip -9
  78776 bytes (76.9k)
local copy
libdeflate -12
  75550 bytes (73.8k)
local copy
7zip -mx=9 -tgzip
  75120 bytes (73.4k)
local copy
kzip -s0 -rn -b8
  74878 bytes (73.1k)
local copy
pigz -11 -n
  74680 bytes (72.9k)
local copy
Zopfli
  74595 bytes (72.8k)
local copy
Zopfli (defluff)
  74593 bytes (72.8k)
local copy

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

You will automatically get the smallest D3 5.8.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 5192 bytes by using my D3 5.8.2 Zopfli version instead of the best available CDN (6.96% smaller than cdnjs, 74595 vs. 79787 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 --bsr11 --lazy --ohh

(found February 9, 2019)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 8192  --mls8192
block splitting recursion 11  --bsr11
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 (74593 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.8.2/d3.zip --location | md5sum
c77a2f5ed727b27db7b017d4cc57ce90  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.8.2.min.zopfli.js.gz | md5sum
c77a2f5ed727b27db7b017d4cc57ce90  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 79787 bytes c77a2f5ed727b27db7b017d4cc57ce90 February 5, 2019 @ 01:45
cdnjs 79787 bytes c77a2f5ed727b27db7b017d4cc57ce90 February 5, 2019 @ 01:45

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

Other Versions

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

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
74595 bytes -4 bytes zopfli --i1000000 --mls8192 --bsr11 --lazy --ohh February 9, 2019 @ 08:21
74599 bytes -5 bytes zopfli --i100000 --mls8192 --bsr11 --lazy --ohh February 8, 2019 @ 14:45
74604 bytes -7 bytes zopfli --i10000 --mls8192 --bsr11 --lazy --ohh February 7, 2019 @ 17:59
74611 bytes -6 bytes zopfli --i1000 --mls8192 --bsr11 --lazy --ohh February 7, 2019 @ 11:16
74617 bytes -13 bytes zopfli --i1000 --mls8192 --bsr10 --lazy --ohh February 7, 2019 @ 11:12
74630 bytes -15 bytes zopfli --i1000 --mls32768 --bsr13 --lazy --ohh February 7, 2019 @ 11:10
74645 bytes zopfli --i100 --mls8192 --bsr11 --lazy --ohh February 7, 2019 @ 11:00

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

Most recent activity on February 9, 2019 @ 11:01.

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
75025 75028 74851 75049 75045 75058 75056 75043 75040 74886 75042 74882 74890 74803 75053
74885 74948 74903 75050 74916 74735 74846 75052 75260 74741 74711 74773 74794 74782 74833
74871 74669 74673 74682 74646 74661 74664 74673 74655 74663 74697 74684 74718 74866 74774
75004 74857 74657 74889 74882 74853 74858 74664 74657 75109 74658 74665 74668 74787 74778
74982 74865 75046 74710 74703 74711 74935 74934 74857 74715 74764 74795 74735 74760 74783
74876 74657 74668 74678 74674 74642 74692 74660 74853 74659 74662 74660 74655 74659 74657
74899 74687 74662 74662 74653 74647 74668 74671 74668 74666 74662 74663 74612 74781 74811
74978 74857 74718 74711 74658 74649 74666 74861 74670 74659 74665 74669 74595 74649 74780
74979 74854 74849 74659 74852 74842 74849 74665 74670 74684 74690 74663 74638 74679 74715
74964 74855 74957 74858 74849 74842 74857 74862 74848 74662 74682 74678 74612 75000 74625
74974 74849 74845 74856 74842 74842 74859 74856 74859 74713 74670 74662 74654 74834 74816
74977 74854 74852 74849 74851 74853 74857 74679 74859 74779 74691 74679 74666 74786 74776
74975 74657 74659 74657 74662 74871 74677 74669 74846 74663 74663 74666 74654 74605 74782
74877 74660 74711 74652 74662 74711 74662 74711 74853 74660 74681 74662 74842 74675 74707
74970 74848 74657 74657 74851 74853 74854 74649 74659 74666 74663 74662 74662 74826 74804
74975 74851 74849 74850 74862 74855 74668 74669 74665 74664 74663 74659 74663 74826 74810
74978 74852 74849 74851 74848 74844 74860 74859 74865 74717 74663 74666 74655 74824 74809
74966 74858 74844 74852 74856 74659 74859 74859 74861 74668 74662 74665 74656 74729 74626
74976 74858 74959 74853 74850 74852 74863 74863 74943 74659 74664 74693 74657 74851 74812
74976 74855 74962 74850 74851 74658 74667 74671 74855 74666 74661 74664 74655 74853 74787
74967 74855 74966 74657 74652 74655 74860 74666 74663 74660 74665 74666 74664 74795 74831
74962 74853 74851 74855 74849 74655 74855 74860 74856 74671 74663 74665 74843 74959 74705
74980 74856 74848 74850 74850 74848 74854 74664 74669 74662 74666 74663 74847 74853 74652

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 74645 bytes 100%
1,000 74611 bytes -34 bytes 100%
10,000 74604 bytes -7 bytes 100%
100,000 74599 bytes -5 bytes 0.58%
1,000,000 74595 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
75040 bytes +445 bytes (+0.60%) +162 bytes
76402 bytes +1807 bytes (+2.42%) +1524 bytes
76279 bytes +1684 bytes (+2.26%) +1401 bytes
75048 bytes +453 bytes (+0.61%) +170 bytes
75063 bytes +468 bytes (+0.63%) +185 bytes
75046 bytes +451 bytes (+0.60%) +168 bytes
75062 bytes +467 bytes (+0.63%) +184 bytes
75066 bytes +471 bytes (+0.63%) +188 bytes
74878 bytes +283 bytes (+0.38%)

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 58808 bytes -15787 bytes (-21.16%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 65604 bytes -8991 bytes (-12.05%)
LZMA2 (Wikipedia) xz xz -9 66432 bytes -8163 bytes (-10.94%)
Brotli (Wikipedia) brotli brotli -q 11 66667 bytes -7928 bytes (-10.63%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 68282 bytes -6313 bytes (-8.46%)
Zstandard (Wikipedia) zstd zstd -19 71789 bytes -2806 bytes (-3.76%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 74430 bytes -165 bytes (-0.22%)

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