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

After GZIP compression these minified files vary in size:
cdnjs
  78406 bytes (76.6k)
CDN
gzip -6 (default)
  77877 bytes (76.1k)
local copy
gzip -9
  77621 bytes (75.8k)
local copy
libdeflate -12
  74584 bytes (72.8k)
local copy
7zip -mx=9 -tgzip
  74122 bytes (72.4k)
local copy
pigz -11 -n
  73638 bytes (71.9k)
local copy
kzip -s0 -rn -b8
  73584 bytes (71.9k)
local copy
Zopfli
  73543 bytes (71.8k)
local copy
Zopfli (defluff)
  73539 bytes (71.8k)
local copy

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

You will automatically get the smallest D3 5.2.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 4863 bytes by using my D3 5.2.0 Zopfli version instead of the best available CDN (6.61% smaller than cdnjs, 73543 vs. 78406 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 --mls1024 --bsr16 --lazy --ohh

(found May 9, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 1024  --mls1024
block splitting recursion 16  --bsr16
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 4 more bytes (73539 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.2.0/d3.zip --location | md5sum
36d26e0162f5109326dc952797f382cc  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.2.0.min.zopfli.js.gz | md5sum
36d26e0162f5109326dc952797f382cc  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v5.2.0/d3.zip --location | sha1sum
92d83adb0dbf0471eccf587978067894efb728c9  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.2.0.min.zopfli.js.gz | sha1sum
92d83adb0dbf0471eccf587978067894efb728c9  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
cdnjs 78406 bytes 36d26e0162f5109326dc952797f382cc July 2, 2018 @ 18:58

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

Other Versions

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

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
73543 bytes -4 bytes zopfli --i1000000 --mls1024 --bsr16 --lazy --ohh May 9, 2018 @ 05:55
73547 bytes -9 bytes zopfli --i100000 --mls1024 --bsr16 --lazy --ohh May 8, 2018 @ 19:20
73556 bytes -15 bytes zopfli --i10000 --mls1024 --bsr16 --lazy --ohh May 8, 2018 @ 13:11
73571 bytes -12 bytes zopfli --i1000 --mls1024 --bsr16 --lazy --ohh May 8, 2018 @ 12:49
73583 bytes zopfli --i100 --mls1024 --bsr16 --lazy --ohh May 8, 2018 @ 12:48

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

Most recent activity on July 2, 2018 @ 18:58.

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
74018 74013 74092 74082 73963 74071 73967 73930 74127 74116 74105 74167 74176 73937 73965
74265 73927 74259 74247 74190 74002 74254 74251 74258 74283 73874 73774 73893 73628 73627
73752 73728 73696 73708 73723 73720 73734 73722 73721 73728 73898 73687 73742 73666 73849
73763 73714 73870 73747 73833 73849 73904 73842 73884 73806 73691 74128 73926 73819 73842
73727 73708 73688 73704 73721 73727 73728 73716 73703 73710 73692 73692 73735 73706 73849
73790 73753 73761 73739 73764 73739 73801 73800 73745 73865 73866 73852 73890 73864 73839
73761 73765 73702 73702 73709 73720 73719 73724 73708 73700 73831 73810 73724 73682 73858
73707 73731 73673 73660 73755 73682 73868 73854 73858 73862 73864 73891 73724 73807 73880
73703 73710 73768 73757 73748 73753 73747 73742 73760 73707 73709 73695 73717 73703 73844
73721 73708 73706 73705 73703 73717 73703 73717 73706 73710 73866 73836 73871 73864 73845
73726 73735 73699 73701 73719 73728 73708 73706 73702 73709 73706 73692 73693 73791 73692
73745 73762 73774 73694 73837 73731 73758 73841 73718 73808 73869 73838 73660 73671 73846
73748 73768 73671 73669 73666 73663 73745 73753 73719 73543 73715 73725 73717 73699 73843
73754 73740 73748 73736 73749 73723 73707 73704 73702 73747 73865 73690 73716 73702 73845
73697 73703 73739 73735 73755 73710 73756 73791 73709 73764 73793 73714 73695 73985 73845
73708 73711 73696 73700 73697 73723 73721 73719 73702 73702 73712 73692 73717 73691 73851
73731 73775 73773 73706 73777 73811 73782 73747 73737 73867 73847 73694 73714 73697 73844
73724 73705 73698 73706 73699 73744 73719 73716 73729 73712 73845 73841 73721 73668 73855
73750 73706 73701 73704 73707 73753 73747 73746 73705 73709 73869 73840 73722 73698 73848
73750 73732 73749 73739 73745 73755 73752 73748 73708 73710 73865 73841 73714 73702 73860
73723 73705 73697 73705 73723 73729 73710 73716 73715 73700 73713 73686 73852 73702 73838
73703 73695 73692 73718 73705 73721 73715 73717 73702 73713 73723 73843 73717 73731 73837
73725 73709 73704 73697 73725 73736 73720 73725 73722 73763 73865 73834 73952 73717 73853

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 73583 bytes 100%
1,000 73571 bytes -12 bytes 100%
10,000 73556 bytes -15 bytes 100%
100,000 73547 bytes -9 bytes 0.87%
1,000,000 73543 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
73799 bytes +256 bytes (+0.35%) +215 bytes
75311 bytes +1768 bytes (+2.40%) +1727 bytes
75132 bytes +1589 bytes (+2.16%) +1548 bytes
73963 bytes +420 bytes (+0.57%) +379 bytes
73941 bytes +398 bytes (+0.54%) +357 bytes
73914 bytes +371 bytes (+0.50%) +330 bytes
73799 bytes +256 bytes (+0.35%) +215 bytes
73610 bytes +67 bytes (+0.09%) +26 bytes
73584 bytes +41 bytes (+0.06%)

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 57691 bytes -15852 bytes (-21.55%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 64041 bytes -9502 bytes (-12.92%)
LZMA2 (Wikipedia) xz xz -9 64984 bytes -8559 bytes (-11.64%)
Brotli (Wikipedia) brotli brotli -q 11 65185 bytes -8358 bytes (-11.36%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 67121 bytes -6422 bytes (-8.73%)
Zstandard (Wikipedia) zstd zstd -19 70803 bytes -2740 bytes (-3.73%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 72650 bytes -893 bytes (-1.21%)

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