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

After GZIP compression these minified files vary in size:
Boot
  80513 bytes (78.6k)
CDN
cdnjs
  70756 bytes (69.1k)
CDN
gzip -6 (default)
  70192 bytes (68.5k)
local copy
gzip -9
  69973 bytes (68.3k)
local copy
libdeflate -12
  67287 bytes (65.7k)
local copy
7zip -mx=9 -tgzip
  66946 bytes (65.4k)
local copy
zultra
  66795 bytes (65.2k)
local copy
kzip -s0 -rn -b8
  66531 bytes (65.0k)
local copy
pigz -11 -n
  66500 bytes (64.9k)
local copy
Zopfli
  66407 bytes (64.9k)
local copy
Zopfli (defluff)
  66405 bytes (64.8k)
local copy

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

You will automatically get the smallest D3 4.2.1 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 4349 bytes by using my D3 4.2.1 Zopfli version instead of the best available CDN (6.55% smaller than cdnjs, 66407 vs. 70756 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 --mls512 --bsr13 --lazy --ohh

(found August 4, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 512  --mls512
block splitting recursion 13  --bsr13
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 (66405 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.2.1/d3.zip --location | md5sum
f332c3bb6d8a840f320b33fbb3d53a5b  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-4.2.1.min.zopfli.js.gz | md5sum
f332c3bb6d8a840f320b33fbb3d53a5b  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v4.2.1/d3.zip --location | sha1sum
2e66379413de0d870ff11c1fcd146c2d4dc720cc  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-4.2.1.min.zopfli.js.gz | sha1sum
2e66379413de0d870ff11c1fcd146c2d4dc720cc  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 80513 bytes f332c3bb6d8a840f320b33fbb3d53a5b August 3, 2016 @ 03:41
cdnjs 70756 bytes f332c3bb6d8a840f320b33fbb3d53a5b August 3, 2016 @ 03:01

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
66407 bytes -2 bytes zopfli --i1000000 --mls512 --bsr13 --lazy --ohh August 4, 2016 @ 03:48
66409 bytes -3 bytes zopfli --i100000 --mls512 --bsr13 --lazy --ohh August 3, 2016 @ 13:12
66412 bytes -3 bytes zopfli --i100000 --mls512 --bsr21 --lazy --ohh August 3, 2016 @ 11:14
66415 bytes -6 bytes zopfli --i10000 --mls512 --bsr21 --lazy --ohh August 3, 2016 @ 10:16
66421 bytes -5 bytes zopfli --i10000 --mls512 --bsr19 --lazy --ohh August 3, 2016 @ 10:10
66426 bytes -4 bytes zopfli --i1000 --mls512 --bsr21 --lazy --ohh August 3, 2016 @ 10:05
66430 bytes -20 bytes zopfli --i1000 --mls512 --bsr19 --lazy --ohh August 3, 2016 @ 10:04
66450 bytes zopfli --i100 --mls512 --bsr19 --lazy --ohh August 3, 2016 @ 09:58

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

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
66802 66765 66634 66648 66645 66648 66585 66637 66579 66565 66652 66646 66776 66722 66712
66560 66551 66555 66558 66671 66552 66552 66485 66477 66457 66452 66518 66622 66522 66610
66657 66530 66623 66616 66535 66611 66541 66543 66484 66422 66449 66433 66578 66447 66566
66631 66530 66659 66616 66529 66531 66527 66532 66544 66485 66436 66453 66595 66448 66558
66612 66612 66624 67135 67134 67118 66524 66541 66414 66425 66437 66426 66581 66550 66562
66617 66610 66633 66612 66537 66533 66530 66524 66547 66472 66450 66423 66573 66434 66582
67146 66521 66543 66468 66624 67113 66536 66544 66425 66422 66443 66439 66581 66547 66551
66622 66613 67110 66621 66538 67113 66529 66520 66537 66425 66445 66453 66576 66491 66600
66546 66613 66622 66625 66621 66613 66527 66524 66424 66424 66426 66429 66580 66481 66580
66612 66613 66609 66530 66536 66518 66445 66539 66407 66442 66441 66415 66568 66422 66592
66616 66626 67137 66632 67137 66612 66477 66521 66412 66425 66452 66449 66589 66484 66577
66635 67136 66628 66641 66532 66532 66563 66515 66450 66427 66433 66422 66568 66574 66576
66629 66611 66619 66625 66613 66621 66527 66524 66412 66505 66516 66432 66569 66467 66556
67126 66607 66619 66619 66634 66533 66527 66523 66528 66425 66442 66432 66571 66468 66557
66636 66621 67124 66622 66540 66611 66529 66525 66477 66421 66441 66434 66569 66480 66576
66628 66614 67123 66629 66523 67126 66533 66527 66421 66424 66441 66448 66583 66494 66561
66622 66612 66635 66619 66526 66619 66528 66523 66422 66421 66440 66436 66571 66469 66578
67122 66613 66620 66613 66547 66522 66532 66523 66412 66422 66440 66442 66571 66444 66548
67133 66613 66624 66523 66539 67116 66527 66525 66424 66421 66441 66473 66597 66462 66553
66628 67120 66621 67125 66537 67119 66524 66531 66408 66424 66443 66451 66577 66494 66549
66616 66613 66631 66621 66621 66612 66526 66525 66422 66434 66445 66432 66575 66568 66559
66631 66631 66648 66640 66482 66618 66475 66480 66475 66432 66447 66438 66573 66480 66560
66625 66614 66634 66621 66629 66620 66531 66529 66458 66424 66442 66435 66591 66469 66595

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 66450 bytes 100%
1,000 66426 bytes -24 bytes 100%
10,000 66415 bytes -11 bytes 100%
100,000 66409 bytes -6 bytes 2.61%
1,000,000 66407 bytes -2 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
66604 bytes +197 bytes (+0.30%) +73 bytes
68102 bytes +1695 bytes (+2.55%) +1571 bytes
67593 bytes +1186 bytes (+1.79%) +1062 bytes
67201 bytes +794 bytes (+1.20%) +670 bytes
66706 bytes +299 bytes (+0.45%) +175 bytes
66698 bytes +291 bytes (+0.44%) +167 bytes
66585 bytes +178 bytes (+0.27%) +54 bytes
66606 bytes +199 bytes (+0.30%) +75 bytes
66531 bytes +124 bytes (+0.19%)

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 52758 bytes -13649 bytes (-20.55%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 59091 bytes -7316 bytes (-11.02%)
LZMA2 (Wikipedia) xz xz -9 59608 bytes -6799 bytes (-10.24%)
Brotli (Wikipedia) brotli brotli -q 11 59898 bytes -6509 bytes (-9.80%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 60589 bytes -5818 bytes (-8.76%)
Zstandard (Wikipedia) zstd zstd -19 64895 bytes -1512 bytes (-2.28%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 66433 bytes +26 bytes (+0.04%)

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.