Choose a version:
45% The original file has 469908 bytes (458.9k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 210846 bytes (205.9k, 45%).

After GZIP compression these minified files vary in size:
Boot
  80354 bytes (78.5k)
CDN
cdnjs
  70661 bytes (69.0k)
CDN
gzip -6 (default)
  70076 bytes (68.4k)
local copy
gzip -9
  69856 bytes (68.2k)
local copy
libdeflate -12
  67208 bytes (65.6k)
local copy
7zip -mx=9 -tgzip
  66819 bytes (65.3k)
local copy
zultra
  66668 bytes (65.1k)
local copy
kzip -s0 -rn -b0
  66480 bytes (64.9k)
local copy
pigz -11 -n
  66408 bytes (64.9k)
local copy
Zopfli
  66319 bytes (64.8k)
local copy
Zopfli (defluff)
  66318 bytes (64.8k)
local copy

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

You will automatically get the smallest D3 4.1.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 4342 bytes by using my D3 4.1.0 Zopfli version instead of the best available CDN (6.55% smaller than cdnjs, 66319 vs. 70661 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 --i100000 --mb8 --mls2048 --bsr12 --lazy --ohh

(found July 11, 2016)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 2048  --mls2048
block splitting recursion 12  --bsr12
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 (66318 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.1.0/d3.zip --location | md5sum
ed537d69dd321823d9ec9661f709ff2f  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-4.1.0.min.zopfli.js.gz | md5sum
ed537d69dd321823d9ec9661f709ff2f  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 80354 bytes ed537d69dd321823d9ec9661f709ff2f July 3, 2016 @ 05:46
cdnjs 70661 bytes ed537d69dd321823d9ec9661f709ff2f July 2, 2016 @ 07:46

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
66319 bytes -2 bytes zopfli --i100000 --mls2048 --bsr12 --lazy --ohh July 11, 2016 @ 21:06
66321 bytes -5 bytes zopfli --i100000 --mls2048 --bsr23 --lazy --ohh July 11, 2016 @ 19:42
66326 bytes -3 bytes zopfli --i10000 --mls2048 --bsr23 --lazy --ohh July 11, 2016 @ 18:20
66329 bytes -4 bytes zopfli --i10000 --mls2048 --bsr13 --lazy --ohh July 11, 2016 @ 18:12
66333 bytes -2 bytes zopfli --i10000 --mls512 --bsr23 --lazy --ohh July 11, 2016 @ 18:03
66335 bytes -5 bytes zopfli --i1000 --mls2048 --bsr13 --lazy --ohh July 11, 2016 @ 18:02
66340 bytes -23 bytes zopfli --i1000 --mls512 --bsr23 --lazy --ohh July 11, 2016 @ 17:56
66363 bytes zopfli --i100 --mls512 --bsr23 --lazy --ohh July 11, 2016 @ 17:49

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

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 or 100,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
66679 66666 66546 66555 66548 66548 66484 66487 66468 66412 66550 66539 66679 66608 66637
66442 66443 66466 66459 66460 66456 66454 66457 66335 66345 66367 66412 66517 66404 66477
66587 66374 66521 66447 66342 66513 66346 66442 66414 66346 66348 66373 66448 66468 66485
66529 66515 66533 66520 66514 66448 66446 66445 66437 66369 66336 66333 66376 66451 66502
67050 66512 66532 66525 67023 67027 66448 66450 66412 66328 66339 66342 66330 66354 66474
66532 67025 66522 67022 66447 66448 66447 66447 66435 66369 66346 66357 66358 66330 66488
67059 66433 66433 66462 66451 66446 66445 66439 66329 66332 66321 66347 66379 66450 66507
66519 66511 66531 66523 66445 66443 66447 66433 66439 66330 66334 66346 66378 66389 66496
66526 66513 66523 66343 66439 66503 66443 66451 66332 66334 66319 66340 66464 66463 66475
66520 66513 66518 66517 66517 66442 66353 66439 66361 66344 66329 66343 66446 66484 66501
66522 66526 66532 66523 66529 66529 66384 66388 66330 66401 66331 66356 66474 66413 66505
67367 67038 66516 67381 66440 66442 66433 66408 66329 66341 66326 66334 66335 66470 66471
66514 66513 66521 66507 66442 66527 66442 66449 66328 66366 66412 66361 66446 66463 66441
66512 66507 66523 66448 66443 66523 66442 66338 66335 66370 66334 66335 66471 66477 66469
67040 67034 67035 66520 66441 66444 66446 66346 66361 66334 66347 66348 66475 66471 66474
66524 67033 66527 66525 66445 66440 66442 66452 66328 66333 66328 66348 66472 66345 66514
66524 66512 66527 66526 66446 66427 66450 66350 66327 66347 66329 66338 66472 66462 66508
66523 66512 66525 66526 66441 66442 66445 66446 66331 66341 66328 66347 66452 66379 66461
67040 67019 66523 66518 66441 66503 66443 66349 66331 66331 66335 66346 66472 66427 66449
66523 66511 67028 66525 66442 66441 66439 66447 66333 66329 66321 66339 66452 66482 66478
66523 66512 66527 66510 66524 66514 66527 66443 66337 66327 66328 66339 66470 66473 66485
66536 66542 66546 66530 66383 66375 66380 66432 66328 66351 66329 66335 66448 66473 66472
66517 66518 66514 66528 67032 66431 66523 66454 66340 66368 66333 66374 66380 66450 66496

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 66363 bytes 100%
1,000 66333 bytes -30 bytes 100%
10,000 66322 bytes -11 bytes 100%
100,000 66319 bytes -3 bytes 0.87%
1,000,000
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
66480 bytes +161 bytes (+0.24%)
67999 bytes +1680 bytes (+2.53%) +1519 bytes
67487 bytes +1168 bytes (+1.76%) +1007 bytes
67094 bytes +775 bytes (+1.17%) +614 bytes
66608 bytes +289 bytes (+0.44%) +128 bytes
66583 bytes +264 bytes (+0.40%) +103 bytes
66481 bytes +162 bytes (+0.24%) +1 byte
66499 bytes +180 bytes (+0.27%) +19 bytes
66520 bytes +201 bytes (+0.30%) +40 bytes

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 52634 bytes -13685 bytes (-20.64%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 59033 bytes -7286 bytes (-10.99%)
LZMA2 (Wikipedia) xz xz -9 59516 bytes -6803 bytes (-10.26%)
Brotli (Wikipedia) brotli brotli -q 11 59808 bytes -6511 bytes (-9.82%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 60486 bytes -5833 bytes (-8.80%)
Zstandard (Wikipedia) zstd zstd -19 64782 bytes -1537 bytes (-2.32%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 66389 bytes +70 bytes (+0.11%)

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.