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

After GZIP compression these minified files vary in size:
unpkg
  93536 bytes (91.3k)
CDN
Boot
  81926 bytes (80.0k)
CDN
cdnjs
  81926 bytes (80.0k)
CDN
gzip -6 (default)
  81247 bytes (79.3k)
local copy
gzip -9
  80949 bytes (79.1k)
local copy
libdeflate -12
  77742 bytes (75.9k)
local copy
7zip -mx=9 -tgzip
  77270 bytes (75.5k)
local copy
kzip -s0 -rn -b8
  76926 bytes (75.1k)
local copy
pigz -11 -n
  76797 bytes (75.0k)
local copy
Zopfli
  76764 bytes (75.0k)
local copy
Zopfli (defluff)
  76763 bytes (75.0k)
local copy

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

You will automatically get the smallest D3 5.15.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 5162 bytes by using my D3 5.15.0 Zopfli version instead of the best available CDN (6.72% smaller than cdnjs, 76764 vs. 81926 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 --bsr14 --lazy --ohh

(found December 31, 2019)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 4096  --mls4096
block splitting recursion 14  --bsr14
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 (76763 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.15.0/d3.zip --location | md5sum
ad33ee10a723a466bf0ba705f0faff69  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.15.0.min.zopfli.js.gz | md5sum
ad33ee10a723a466bf0ba705f0faff69  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v5.15.0/d3.zip --location | sha1sum
6a1bfa7e3ab42b8774fdb6bd8b13dca02efceba1  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.15.0.min.zopfli.js.gz | sha1sum
6a1bfa7e3ab42b8774fdb6bd8b13dca02efceba1  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 93536 bytes ad33ee10a723a466bf0ba705f0faff69 (invalid)
Boot 81926 bytes ad33ee10a723a466bf0ba705f0faff69 December 29, 2019 @ 18:16
cdnjs 81926 bytes ad33ee10a723a466bf0ba705f0faff69 December 29, 2019 @ 18:16

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

Other Versions

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

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
76764 bytes -5 bytes zopfli --i1000000 --mls4096 --bsr14 --lazy --ohh December 31, 2019 @ 09:54
76769 bytes -7 bytes zopfli --i100000 --mls4096 --bsr14 --lazy --ohh December 30, 2019 @ 14:41
76776 bytes -2 bytes zopfli --i10000 --mls4096 --bsr18 --lazy --ohh December 30, 2019 @ 13:07
76778 bytes -5 bytes zopfli --i10000 --mls4096 --bsr14 --lazy --ohh December 30, 2019 @ 12:37
76783 bytes -4 bytes zopfli --i1000 --mls4096 --bsr14 --lazy --ohh December 30, 2019 @ 10:30
76787 bytes -11 bytes zopfli --i1000 --mls4096 --bsr20 --lazy --ohh December 30, 2019 @ 10:29
76798 bytes zopfli --i100 --mls4096 --bsr20 --lazy --ohh December 30, 2019 @ 10:01

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

Most recent activity on January 1, 2020 @ 02:42.

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
77161 77154 77236 77227 77223 77228 77239 77215 77344 77360 77371 77365 77184 77178 76961
76839 76852 76881 77034 77055 76854 76863 76851 77240 76865 77014 76900 76970 77149 77025
76987 76786 77006 76784 76996 76787 76793 76999 77017 76802 76824 76801 76939 76951 76953
77122 77093 77011 77011 77049 76789 76990 76989 76989 77017 76801 76860 76949 76892 76995
77001 76989 77112 77106 76855 76862 77089 77084 77094 77135 76903 76786 76946 77019 76965
76971 77002 76996 76986 76988 76787 76796 76991 76988 77047 76772 76781 77031 76932 76954
76965 76784 76972 76992 76793 76795 76985 76990 76993 76803 76809 76789 76978 77130 76990
76977 77121 77005 76980 76795 76792 76794 76991 76982 76982 76899 76780 76931 76868 76960
76985 76796 77002 76788 77094 76789 76791 76989 76792 77012 77005 76779 76944 77147 76945
76979 77097 77004 76986 76784 76985 76991 76993 76993 77007 76804 76806 76944 77004 76956
77086 76974 77106 76984 76794 76787 76982 76988 76989 77007 76795 76764 76946 77001 76948
77091 76973 77099 76991 76986 76785 76989 76989 76984 77011 76803 76845 76950 76942 76951
76967 76975 76785 77001 76980 76792 76988 76987 76982 77016 76799 76796 76937 77002 76880
77002 77003 76984 76984 77118 76786 76988 76990 76985 77011 76812 76787 76940 77004 76945
76985 76984 77003 76989 76986 76793 76988 76797 76989 77007 76798 76764 76941 77071 76946
76984 76995 76990 77115 77116 77079 76986 77083 77097 77116 76789 76785 76947 76889 76932
76977 76986 76993 76978 77004 76794 76987 76987 76964 77006 76801 76779 76939 76944 76941
76970 76969 76996 76988 77102 76794 76986 76988 76984 77000 76801 76781 76951 77023 77025
77094 76985 77112 77095 76989 76988 76987 76986 76986 77005 76792 76785 76940 77006 76953
77106 77097 77111 76977 76796 76786 76984 76991 76988 77006 76797 76780 76944 77077 76934
76973 76978 76984 76977 76794 76785 76989 76990 76990 77010 76809 76800 76946 77025 76971
77087 77095 77000 77096 77002 76784 76987 76987 76988 77010 76800 76973 76946 77067 76884
76997 77094 76984 76997 76985 76779 76986 76985 76982 77020 76797 76798 76935 76930 76929

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 76798 bytes 100%
1,000 76783 bytes -15 bytes 100%
10,000 76776 bytes -7 bytes 100%
100,000 76769 bytes -7 bytes 0.87%
1,000,000 76764 bytes -5 bytes 0.58%
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
77193 bytes +429 bytes (+0.56%) +267 bytes
78571 bytes +1807 bytes (+2.35%) +1645 bytes
78438 bytes +1674 bytes (+2.18%) +1512 bytes
77195 bytes +431 bytes (+0.56%) +269 bytes
77185 bytes +421 bytes (+0.55%) +259 bytes
77113 bytes +349 bytes (+0.45%) +187 bytes
77019 bytes +255 bytes (+0.33%) +93 bytes
76949 bytes +185 bytes (+0.24%) +23 bytes
76926 bytes +162 bytes (+0.21%)

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 - for example, your browser actually supports it !
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 60358 bytes -16406 bytes (-21.37%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 67202 bytes -9562 bytes (-12.46%)
LZMA2 (Wikipedia) xz xz -9 68060 bytes -8704 bytes (-11.34%)
Brotli (Wikipedia) brotli brotli -q 11 68254 bytes -8510 bytes (-11.09%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 70274 bytes -6490 bytes (-8.45%)
Zstandard (Wikipedia) zstd zstd -19 73538 bytes -3226 bytes (-4.20%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 76224 bytes -540 bytes (-0.70%)

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