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

After GZIP compression these minified files vary in size:
unpkg
  89474 bytes (87.4k)
CDN
Boot
  78501 bytes (76.7k)
CDN
cdnjs
  78501 bytes (76.7k)
CDN
gzip -6 (default)
  77962 bytes (76.1k)
local copy
gzip -9
  77708 bytes (75.9k)
local copy
libdeflate -12
  74653 bytes (72.9k)
local copy
7zip -mx=9 -tgzip
  74199 bytes (72.5k)
local copy
zultra
  73892 bytes (72.2k)
local copy
pigz -11 -n
  73686 bytes (72.0k)
local copy
kzip -s0 -rn -b8
  73663 bytes (71.9k)
local copy
Zopfli
  73647 bytes (71.9k)
local copy
Zopfli (defluff)
  73643 bytes (71.9k)
local copy

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

You will automatically get the smallest D3 5.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 4854 bytes by using my D3 5.4.0 Zopfli version instead of the best available CDN (6.59% smaller than cdnjs, 73647 vs. 78501 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 --bsr4 --lazy --ohh

(found May 12, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 32768  --mls32768
block splitting recursion 4  --bsr4
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 (73643 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.4.0/d3.zip --location | md5sum
d5d23e89bdb1d80bdada5e7bc3f0f2e6  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.4.0.min.zopfli.js.gz | md5sum
d5d23e89bdb1d80bdada5e7bc3f0f2e6  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v5.4.0/d3.zip --location | sha1sum
7fb4d31fa87bef2cd95b4956ec6d4dd13bc16e89  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.4.0.min.zopfli.js.gz | sha1sum
7fb4d31fa87bef2cd95b4956ec6d4dd13bc16e89  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 89474 bytes d5d23e89bdb1d80bdada5e7bc3f0f2e6 May 11, 2018 @ 21:28
Boot 78501 bytes d5d23e89bdb1d80bdada5e7bc3f0f2e6 July 2, 2018 @ 18:58
cdnjs 78501 bytes d5d23e89bdb1d80bdada5e7bc3f0f2e6 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:

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
73647 bytes -6 bytes zopfli --i1000000 --mls32768 --bsr4 --lazy --ohh May 12, 2018 @ 19:52
73653 bytes -5 bytes zopfli --i100000 --mls32768 --bsr4 --lazy --ohh May 12, 2018 @ 10:30
73658 bytes -10 bytes zopfli --i10000 --mls32768 --bsr4 --lazy --ohh May 12, 2018 @ 09:12
73668 bytes -14 bytes zopfli --i1000 --mls32768 --bsr4 --lazy --ohh May 12, 2018 @ 09:03
73682 bytes zopfli --i100 --mls32768 --bsr4 --lazy --ohh May 12, 2018 @ 08:50

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

Most recent activity on July 20, 2020 @ 12:52.

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
74112 74110 74162 74151 74135 74139 74009 74178 74218 74198 74323 74273 73930 74029 73859
74334 74338 74263 74268 74268 74268 74326 74332 74335 74343 73943 73866 73889 73700 73647
73793 73813 73791 73819 73809 73795 73794 73828 73826 73814 73976 73782 73781 73742 73936
73820 73844 73947 73974 73922 73934 73894 73954 73839 73773 73750 74042 73965 73933 74203
73782 73788 73775 73792 73806 73808 73803 73780 73788 73798 73794 73785 73769 73942 73927
73825 73886 73830 73831 73838 73827 73915 73839 73844 73967 73941 73946 73967 73930 73931
73856 73860 73777 73806 73802 73806 73805 73782 73797 73807 73940 73899 73773 73757 74029
73790 73806 73744 73756 73751 73791 73931 73933 73830 73938 73942 73944 73768 73943 73924
73770 73780 73847 73842 73842 73853 73834 73829 73798 73793 73792 73782 73772 73935 73930
73788 73805 73778 73809 73830 73786 73796 73800 73785 73798 73936 73951 73877 73938 73925
73804 73806 73788 73781 73838 73789 73802 73798 73774 73808 73775 73782 73798 73865 73750
73846 73833 73848 73832 73921 73949 73932 73956 73847 73854 73863 73946 73739 74084 73933
73841 73844 73748 73757 73746 73789 73837 73795 73787 73823 73806 73826 73776 73741 73931
73830 73833 73776 73837 73832 73834 73807 73795 73779 73830 73939 73800 73775 73812 73930
73799 73788 73830 73823 73823 73820 73873 73821 73825 73842 73942 73788 73787 74069 73926
73799 73806 73772 73810 73797 73790 73808 73804 73782 73808 73830 73793 73771 73934 73936
73825 73818 73846 73834 73850 73848 73880 73837 73826 73942 73941 73781 73741 73790 73756
73786 73784 73775 73779 73829 73790 73810 73803 73798 73799 73938 73948 73769 73741 73930
73794 73793 73776 73830 73832 73790 73824 73787 73780 73783 73940 73935 73778 73776 73794
73830 73833 73824 73818 73805 73830 73839 73785 73826 73789 73938 73948 73773 73936 73930
73808 73793 73773 73821 73805 73803 73808 73797 73783 73788 73794 73774 73933 73808 73925
73799 73805 73779 73812 73800 73789 73797 73788 73782 73788 73939 73926 73774 73768 73924
73817 73802 73779 73840 73803 73798 73809 73799 73789 73784 73943 73947 73801 73802 73927

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 73682 bytes 100%
1,000 73668 bytes -14 bytes 100%
10,000 73658 bytes -10 bytes 100%
100,000 73653 bytes -5 bytes 0.58%
1,000,000 73647 bytes -6 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
73874 bytes +227 bytes (+0.31%) +211 bytes
75378 bytes +1731 bytes (+2.35%) +1715 bytes
75201 bytes +1554 bytes (+2.11%) +1538 bytes
74047 bytes +400 bytes (+0.54%) +384 bytes
74034 bytes +387 bytes (+0.53%) +371 bytes
73988 bytes +341 bytes (+0.46%) +325 bytes
73881 bytes +234 bytes (+0.32%) +218 bytes
73687 bytes +40 bytes (+0.05%) +24 bytes
73663 bytes +16 bytes (+0.02%)

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 57759 bytes -15888 bytes (-21.57%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 64107 bytes -9540 bytes (-12.95%)
LZMA2 (Wikipedia) xz xz -9 65048 bytes -8599 bytes (-11.68%)
Brotli (Wikipedia) brotli brotli -q 11 65272 bytes -8375 bytes (-11.37%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 67217 bytes -6430 bytes (-8.73%)
Zstandard (Wikipedia) zstd zstd -19 70871 bytes -2776 bytes (-3.77%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 72715 bytes -932 bytes (-1.27%)

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.