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

After GZIP compression these minified files vary in size:
Boot
  81900 bytes (80.0k)
CDN
cdnjs
  72380 bytes (70.7k)
CDN
gzip -6 (default)
  71838 bytes (70.2k)
local copy
gzip -9
  71597 bytes (69.9k)
local copy
libdeflate -12
  68937 bytes (67.3k)
local copy
zultra
  68843 bytes (67.2k)
local copy
7zip -mx=9 -tgzip
  68522 bytes (66.9k)
local copy
kzip -s0 -rn -b8
  68031 bytes (66.4k)
local copy
pigz -11 -n
  67974 bytes (66.4k)
local copy
Zopfli
  67932 bytes (66.3k)
local copy
Zopfli (defluff)
  67930 bytes (66.3k)
local copy

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

You will automatically get the smallest D3 4.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 4448 bytes by using my D3 4.3.0 Zopfli version instead of the best available CDN (6.55% smaller than cdnjs, 67932 vs. 72380 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 --bsr7 --lazy --ohh

(found October 29, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 4096  --mls4096
block splitting recursion 7  --bsr7
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 (67930 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/v4.3.0/d3.zip --location | md5sum
ee652a0006a7a14d640e31f80a760851  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-4.3.0.min.zopfli.js.gz | md5sum
ee652a0006a7a14d640e31f80a760851  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 81900 bytes ee652a0006a7a14d640e31f80a760851 October 28, 2016 @ 19:57
cdnjs 72380 bytes ee652a0006a7a14d640e31f80a760851 October 27, 2016 @ 21:17

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
67932 bytes -5 bytes zopfli --i1000000 --mls4096 --bsr7 --lazy --ohh October 29, 2016 @ 03:12
67937 bytes -5 bytes zopfli --i100000 --mls4096 --bsr7 --lazy --ohh October 28, 2016 @ 15:50
67942 bytes -6 bytes zopfli --i10000 --mls4096 --bsr7 --lazy --ohh October 28, 2016 @ 14:49
67948 bytes -28 bytes zopfli --i1000 --mls4096 --bsr7 --lazy --ohh October 28, 2016 @ 14:08
67976 bytes zopfli --i100 --mls4096 --bsr7 --lazy --ohh October 28, 2016 @ 13:41

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

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
68184 68174 68271 68241 68234 68233 68233 68247 68279 68259 68232 68322 68335 68325 68356
68079 68084 68196 68824 67949 68773 68115 68121 68068 68043 68163 68100 68009 68209 68199
68083 68074 68089 68800 67956 68092 68069 68073 68118 68136 67951 67945 68130 67990 68064
68100 68098 68061 68771 68791 68080 68104 68082 68069 68044 68069 67932 68092 68808 68074
68117 68155 68067 68776 68769 68766 68059 68060 68046 68043 68062 68081 68076 68109 68098
68068 68072 68066 68772 68780 68771 68067 68070 68063 68044 68052 68085 68111 68085 68091
68765 68087 68764 68773 68757 68771 68073 68050 68063 68043 68016 68076 68102 68118 68160
68758 68759 68043 68749 68752 68782 68070 68048 68047 68047 68057 68068 68057 68790 68806
68767 68766 68062 68749 68771 68756 68064 68765 68043 68761 68761 68754 68773 68259 68111
68767 68060 68761 68762 68773 68753 68044 68077 68051 68052 68045 68066 68076 68060 68102
68073 68765 68762 68750 68753 68760 68046 68045 68042 68041 68066 68058 68056 68053 68107
68759 68768 68767 68751 68753 68752 68048 68053 68760 68041 68056 68065 68051 68068 68139
68758 68763 68050 68749 68751 68755 68757 68048 68046 68048 68061 68067 68054 68081 68106
68762 68762 68762 68750 68753 68751 68047 68046 68046 68041 68055 68065 68777 68052 68767
68059 68053 68063 68769 68764 68752 68063 68065 68061 68056 68107 68184 68100 68156 68102
68068 68071 68057 68771 68770 68765 68067 68071 68060 68041 68059 68070 68076 68077 68080
68058 68062 68057 68772 68776 68764 68068 68065 68061 68045 68062 68059 68821 68153 68097
68073 68075 68096 68771 68769 68772 68064 68067 68060 68043 68118 68758 68045 68793 68102
68070 68767 68062 68772 68774 68770 68066 68065 68066 68050 68063 68062 68075 68789 68117
68766 68763 68052 68752 68753 68773 68051 68046 68046 68044 68050 68068 68054 68791 68125
68761 68760 68065 68749 68771 68749 68052 68048 68046 68045 68760 68754 68801 68778 68121
68049 68058 68771 68756 68754 68754 68050 68047 68047 68074 68055 68091 68081 68078 68096
68766 68766 68074 68754 68754 68752 68075 68071 68043 68045 68065 68102 68038 68122 68107

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 67976 bytes 100%
1,000 67948 bytes -28 bytes 100%
10,000 67942 bytes -6 bytes 100%
100,000 67937 bytes -5 bytes 1.74%
1,000,000 67932 bytes -5 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
68054 bytes +122 bytes (+0.18%) +23 bytes
69503 bytes +1571 bytes (+2.31%) +1472 bytes
69372 bytes +1440 bytes (+2.12%) +1341 bytes
68996 bytes +1064 bytes (+1.57%) +965 bytes
68300 bytes +368 bytes (+0.54%) +269 bytes
68194 bytes +262 bytes (+0.39%) +163 bytes
68187 bytes +255 bytes (+0.38%) +156 bytes
68056 bytes +124 bytes (+0.18%) +25 bytes
68031 bytes +99 bytes (+0.15%)

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 53701 bytes -14231 bytes (-20.95%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 59740 bytes -8192 bytes (-12.06%)
LZMA2 (Wikipedia) xz xz -9 60612 bytes -7320 bytes (-10.78%)
Brotli (Wikipedia) brotli brotli -q 11 60661 bytes -7271 bytes (-10.70%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 62181 bytes -5751 bytes (-8.47%)
Zstandard (Wikipedia) zstd zstd -19 65915 bytes -2017 bytes (-2.97%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 67085 bytes -847 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.