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

After GZIP compression these minified files vary in size:
cdnjs
  78169 bytes (76.3k)
CDN
gzip -6 (default)
  77644 bytes (75.8k)
local copy
gzip -9
  77391 bytes (75.6k)
local copy
libdeflate -12
  74444 bytes (72.7k)
local copy
7zip -mx=9 -tgzip
  73921 bytes (72.2k)
local copy
pigz -11 -n
  73377 bytes (71.7k)
local copy
kzip -s0 -rn -b8
  73376 bytes (71.7k)
local copy
Zopfli
  73284 bytes (71.6k)
local copy
Zopfli (defluff)
  73281 bytes (71.6k)
local copy

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

You will automatically get the smallest D3 5.0.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 4885 bytes by using my D3 5.0.1 Zopfli version instead of the best available CDN (6.67% smaller than cdnjs, 73284 vs. 78169 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 --mls16384 --bsr12 --lazy --ohh

(found April 25, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
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 3 more bytes (73281 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.0.1/d3.zip --location | md5sum
18e22532e0eb3a64b6b07c1987955667  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.0.1.min.zopfli.js.gz | md5sum
18e22532e0eb3a64b6b07c1987955667  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v5.0.1/d3.zip --location | sha1sum
3a7db9acfc0b6687f0c61d8756530cf812ba2873  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-5.0.1.min.zopfli.js.gz | sha1sum
3a7db9acfc0b6687f0c61d8756530cf812ba2873  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
cdnjs 78169 bytes 18e22532e0eb3a64b6b07c1987955667 July 2, 2018 @ 19:00

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

Available D3 versions at minime.stephan-brumme.com:

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
73284 bytes -5 bytes zopfli --i1000000 --mls16384 --bsr12 --lazy --ohh April 25, 2018 @ 22:11
73289 bytes -8 bytes zopfli --i100000 --mls16384 --bsr12 --lazy --ohh April 25, 2018 @ 00:26
73297 bytes -11 bytes zopfli --i10000 --mls16384 --bsr12 --lazy --ohh April 23, 2018 @ 16:30
73308 bytes -18 bytes zopfli --i1000 --mls16384 --bsr12 --lazy --ohh April 23, 2018 @ 10:01
73326 bytes zopfli --i100 --mls16384 --bsr12 --lazy --ohh April 23, 2018 @ 09:34

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

Most recent activity on July 2, 2018 @ 19:00.

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
73686 73822 73852 73834 74038 73830 73932 73952 73916 73892 73899 73987 73607 73610 73737
74060 74055 74107 74104 74098 74098 74100 74058 74082 74086 73603 73373 73429 73735 73389
73503 73510 73496 73501 73633 73501 73543 73509 73361 73591 73389 73537 73470 73529 73651
73540 73519 73527 73542 73644 73608 73762 73614 73608 73688 73564 73795 73570 73540 73949
73500 73502 73643 73649 73637 73641 73504 73502 73499 73644 73342 73523 73478 73491 73656
73533 73537 73537 73575 73661 73608 73594 73536 73517 73665 73642 73664 73513 73645 73695
73562 73565 73487 73488 73490 73501 73517 73506 73502 73666 73618 73753 73600 73470 73661
73554 73530 73449 73790 73454 73461 73616 73651 73656 73666 73650 73656 73509 73481 73698
73490 73492 73563 73551 73559 73553 73554 73548 73501 73637 73519 73521 73504 73284 73642
73517 73503 73495 73503 73493 73505 73638 73502 73501 73519 73554 73661 73585 73684 73644
73516 73493 73492 73496 73632 73502 73641 73504 73491 73638 73333 73517 73505 73479 73490
73540 73543 73488 73491 73541 73610 73707 73588 73583 73674 73575 73648 73315 73456 73642
73557 73515 73454 73457 73462 73503 73641 73519 73497 73549 73342 73540 73507 73487 73539
73502 73541 73500 73498 73636 73504 73500 73504 73497 73522 73340 73502 73502 73487 73641
73511 73496 73504 73514 73539 73495 73611 73587 73552 73693 73575 73502 73502 73591 73646
73495 73501 73489 73496 73499 73495 73499 73525 73506 73520 73504 73519 73475 73478 73660
73542 73539 73538 73501 73668 73600 73588 73588 73515 73672 73644 73521 73506 73511 73459
73513 73501 73496 73493 73630 73633 73499 73519 73495 73519 73655 73660 73509 73461 73650
73502 73501 73494 73493 73532 73632 73642 73499 73504 73517 73529 73656 73512 73486 73489
73538 73530 73529 73533 73638 73636 73541 73501 73498 73639 73648 73565 73502 73481 73609
73499 73503 73499 73488 73497 73505 73518 73502 73493 73641 73514 73524 73509 73490 73541
73512 73497 73492 73495 73519 73501 73636 73499 73493 73642 73344 73519 73511 73532 73651
73523 73498 73495 73492 73517 73503 73520 73525 73517 73528 73647 73521 73750 73510 73652

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 73326 bytes 100%
1,000 73308 bytes -18 bytes 100%
10,000 73297 bytes -11 bytes 100%
100,000 73289 bytes -8 bytes 0.58%
1,000,000 73284 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
73598 bytes +314 bytes (+0.43%) +222 bytes
75097 bytes +1813 bytes (+2.47%) +1721 bytes
74937 bytes +1653 bytes (+2.26%) +1561 bytes
73755 bytes +471 bytes (+0.64%) +379 bytes
73737 bytes +453 bytes (+0.62%) +361 bytes
73707 bytes +423 bytes (+0.58%) +331 bytes
73593 bytes +309 bytes (+0.42%) +217 bytes
73404 bytes +120 bytes (+0.16%) +28 bytes
73376 bytes +92 bytes (+0.13%)

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 57588 bytes -15696 bytes (-21.42%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 63902 bytes -9382 bytes (-12.80%)
LZMA2 (Wikipedia) xz xz -9 64840 bytes -8444 bytes (-11.52%)
Brotli (Wikipedia) brotli brotli -q 11 65050 bytes -8234 bytes (-11.24%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 66944 bytes -6340 bytes (-8.65%)
Zstandard (Wikipedia) zstd zstd -19 70618 bytes -2666 bytes (-3.64%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 72404 bytes -880 bytes (-1.20%)

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 2018.
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