Choose a version:
48% The original file has 493922 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 236077 bytes (230.5k, 48%).

After GZIP compression these minified files vary in size:
unpkg
  89392 bytes (87.3k)
CDN
Boot
  78423 bytes (76.6k)
CDN
cdnjs
  78423 bytes (76.6k)
CDN
gzip -6 (default)
  77891 bytes (76.1k)
local copy
gzip -9
  77632 bytes (75.8k)
local copy
libdeflate -12
  74508 bytes (72.8k)
local copy
7zip -mx=9 -tgzip
  74126 bytes (72.4k)
local copy
zultra
  73805 bytes (72.1k)
local copy
pigz -11 -n
  73644 bytes (71.9k)
local copy
kzip -s0 -rn -b8
  73586 bytes (71.9k)
local copy
Zopfli
  73557 bytes (71.8k)
local copy
Zopfli (defluff)
  73555 bytes (71.8k)
local copy

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

You will automatically get the smallest D3 5.3.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 4866 bytes by using my D3 5.3.0 Zopfli version instead of the best available CDN (6.62% smaller than cdnjs, 73557 vs. 78423 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 --mls2048 --bsr16 --lazy --ohh

(found May 12, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 2048  --mls2048
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 2 more bytes (73555 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.3.0/d3.zip --location | md5sum
922b20b3500bccf101ee8663618a4cb4  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.3.0.min.zopfli.js.gz | md5sum
922b20b3500bccf101ee8663618a4cb4  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 89392 bytes 922b20b3500bccf101ee8663618a4cb4 May 9, 2018 @ 16:40
Boot 78423 bytes 922b20b3500bccf101ee8663618a4cb4 July 2, 2018 @ 19:00
cdnjs 78423 bytes 922b20b3500bccf101ee8663618a4cb4 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
73557 bytes -1 byte zopfli --i1000000 --mls2048 --bsr16 --lazy --ohh May 12, 2018 @ 05:26
73558 bytes -8 bytes zopfli --i100000 --mls2048 --bsr16 --lazy --ohh May 11, 2018 @ 17:25
73566 bytes -16 bytes zopfli --i10000 --mls2048 --bsr16 --lazy --ohh May 11, 2018 @ 15:51
73582 bytes -22 bytes zopfli --i1000 --mls2048 --bsr16 --lazy --ohh May 11, 2018 @ 14:35
73604 bytes zopfli --i100 --mls2048 --bsr16 --lazy --ohh May 11, 2018 @ 14:26

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:48.

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
74044 74042 74094 74087 74073 74076 74137 74148 74200 74122 74251 74188 74257 73938 73972
74269 74269 74266 74190 74199 74013 74201 74256 73868 73920 73874 73619 73902 73968 73739
73739 73727 73753 73724 73742 73726 73739 73729 73741 73739 73908 73693 73748 73671 73857
73753 73753 73765 73761 73855 73856 73959 73771 73937 73781 73808 73874 74007 73738 73887
73716 73714 73723 73713 73850 73729 73725 73724 73712 73714 73719 73697 73728 73741 73855
73755 73750 73767 73751 73795 73743 73840 73810 73772 73881 73883 73884 73867 73877 73853
73775 73783 73722 73727 73726 73705 73705 73724 73727 73874 73837 73829 73728 73691 73859
73736 73725 73680 73671 73749 73677 73871 73864 73869 73864 73883 73864 73820 73867 73892
73702 73710 73785 73756 73766 73764 73770 73763 73717 73712 73708 73700 73720 73738 73855
73717 73713 73721 73706 73717 73712 73722 73712 73714 73726 73873 73854 73828 73890 73846
73738 73714 73701 73727 73723 73726 73713 73723 73708 73735 73707 73693 73698 73796 73679
73780 73762 73774 73745 73747 73881 73873 73882 73774 73779 73879 73850 73668 74020 73894
73758 73767 73672 73659 73673 73757 73749 73744 73710 73730 73557 73689 73721 73687 73852
73752 73750 73761 73725 73715 73728 73728 73724 73709 73712 73873 73698 73694 73866 73857
73713 73710 73727 73753 73739 73743 73810 73772 73730 73792 73797 73700 73718 73796 73849
73725 73709 73717 73724 73703 73722 73730 73732 73711 73713 73750 73701 73698 73693 73862
73743 73771 73775 73731 73766 73793 73815 73802 73756 73865 73871 73701 73720 73720 73679
73707 73713 73722 73709 73756 73707 73722 73723 73709 73865 73875 73869 73697 73670 73868
73723 73726 73757 73756 73713 73715 73712 73710 73713 73708 73877 73699 73703 73732 73858
73725 73753 73723 73705 73730 73754 73760 73707 73752 73711 73877 73865 73719 73735 73870
73710 73709 73724 73712 73729 73711 73733 73724 73708 73724 73854 73703 73859 73731 73850
73724 73702 73717 73725 73725 73726 73727 73724 73710 73707 73710 73855 73723 73692 73846
73735 73712 73726 73730 73726 73708 73739 73734 73712 73757 73874 73859 74071 73728 73860

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 73604 bytes 100%
1,000 73582 bytes -22 bytes 100%
10,000 73566 bytes -16 bytes 100%
100,000 73558 bytes -8 bytes 0.58%
1,000,000 73557 bytes -1 byte 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
73802 bytes +245 bytes (+0.33%) +216 bytes
75311 bytes +1754 bytes (+2.38%) +1725 bytes
75140 bytes +1583 bytes (+2.15%) +1554 bytes
73969 bytes +412 bytes (+0.56%) +383 bytes
73950 bytes +393 bytes (+0.53%) +364 bytes
73910 bytes +353 bytes (+0.48%) +324 bytes
73805 bytes +248 bytes (+0.34%) +219 bytes
73615 bytes +58 bytes (+0.08%) +29 bytes
73586 bytes +29 bytes (+0.04%)

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 57706 bytes -15851 bytes (-21.55%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 64065 bytes -9492 bytes (-12.90%)
LZMA2 (Wikipedia) xz xz -9 64960 bytes -8597 bytes (-11.69%)
Brotli (Wikipedia) brotli brotli -q 11 65189 bytes -8368 bytes (-11.38%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 67142 bytes -6415 bytes (-8.72%)
Zstandard (Wikipedia) zstd zstd -19 70799 bytes -2758 bytes (-3.75%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 72637 bytes -920 bytes (-1.25%)

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.