Choose a version:
47% The original file has 267929 bytes (261.6k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 126833 bytes (123.9k, 47%).

After GZIP compression these minified files vary in size:
Boot
  48726 bytes (47.6k)
CDN
Baidu
  42635 bytes (41.6k)
CDN
cdnjs
  42625 bytes (41.6k)
CDN
gzip -6 (default)
  42293 bytes (41.3k)
local copy
unpkg
  42261 bytes (41.3k)
CDN
gzip -9
  42176 bytes (41.2k)
local copy
7zip -mx=9 -tgzip
  40784 bytes (39.8k)
local copy
zultra
  40755 bytes (39.8k)
local copy
libdeflate -12
  40744 bytes (39.8k)
local copy
pigz -11 -n
  40717 bytes (39.8k)
local copy
kzip -s0 -rn -b8
  40642 bytes (39.7k)
local copy
Zopfli
  40504 bytes (39.6k)
local copy
Zopfli (defluff)
  40500 bytes (39.6k)
local copy

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

You will automatically get the smallest D3 3.0.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 1757 bytes by using my D3 3.0.0 Zopfli version instead of the best available CDN (4.34% smaller than unpkg, 40504 vs. 42261 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 --mls1024 --bsr16 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 1024  --mls1024
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 4 more bytes (40500 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/v3.0.0/d3.min.js --location | md5sum
3635aa4ae99d9c5ac5de1da65a723f15  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.0.0.min.zopfli.js.gz | md5sum
3635aa4ae99d9c5ac5de1da65a723f15  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.0.0/d3.min.js --location | sha1sum
46a318d2020b67facd1dd4a3e393433aac8be3ea  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.0.0.min.zopfli.js.gz | sha1sum
46a318d2020b67facd1dd4a3e393433aac8be3ea  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 48726 bytes 3635aa4ae99d9c5ac5de1da65a723f15 (invalid)
cdnjs 42625 bytes 3635aa4ae99d9c5ac5de1da65a723f15 (invalid)
unpkg 42261 bytes 3635aa4ae99d9c5ac5de1da65a723f15 July 11, 2016 @ 16:32

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 42635 bytes c016d7e30d275a11c11267184d0642dd only whitespaces differ (invalid)

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
40504 bytes -1 byte zopfli --i100000 --mls1024 --bsr16 --lazy --ohh December 21, 2015 @ 12:37
40505 bytes -3 bytes zopfli --i100000 --mls2048 --bsr14 --lazy --ohh December 21, 2015 @ 11:43
40508 bytes -2 bytes zopfli --i10000 --mls1024 --bsr16 --lazy --ohh October 21, 2015 @ 16:57
40510 bytes -3 bytes zopfli --i1000 --mls1024 --bsr16 --lazy --ohh September 21, 2015 @ 01:52
40513 bytes -13 bytes zopfli --i1000 --mls64 --bsr6 --lazy --ohh September 21, 2015 @ 01:39
40526 bytes -2 bytes zopfli --i1000 --mls16 --bsr14 --lazy --ohh September 21, 2015 @ 01:34
40528 bytes zopfli --i100 --mls1024 --bsr16 --lazy --ohh September 18, 2015 @ 20: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 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
40635 40630 40703 40635 40632 40635 40630 40616 40633 40709 40709 40596 40708 40706 40720
40694 40696 40695 40570 40691 40690 40698 40694 40688 40710 40709 40537 40713 40613 40711
40529 40530 40685 40680 40690 40511 40682 40559 40680 40709 40539 40704 40710 40625 40724
40688 40601 40533 40561 40687 40538 40541 40574 40553 40709 40709 40588 40707 40592 40709
40679 40570 40608 40531 40681 40554 40595 40563 40568 40543 40561 40580 40708 40566 40717
40679 40520 40567 40554 40559 40527 40541 40573 40594 40704 40578 40703 40708 40705 40706
40556 40676 40592 40564 40521 40558 40621 40562 40560 40568 40569 40558 40706 40708 40709
40686 40557 40684 40557 40597 40529 40687 40586 40690 40709 40525 40530 40706 40615 40709
40577 40518 40563 40521 40690 40554 40619 40577 40574 40709 40517 40571 40705 40705 40581
40544 40559 40629 40522 40690 40559 40569 40525 40582 40709 40709 40704 40709 40616 40709
40565 40516 40544 40519 40690 40509 40590 40683 40680 40514 40505 40620 40705 40616 40709
40572 40621 40575 40554 40554 40548 40573 40570 40588 40709 40709 40702 40705 40609 40722
40523 40578 40583 40538 40547 40552 40673 40563 40523 40504 40510 40566 40710 40614 40707
40688 40525 40560 40553 40573 40581 40583 40572 40678 40696 40568 40569 40697 40616 40722
40578 40594 40691 40551 40588 40565 40595 40683 40575 40572 40572 40570 40690 40619 40707
40571 40547 40690 40548 40551 40572 40590 40571 40551 40695 40527 40569 40712 40705 40707
40561 40624 40685 40549 40564 40568 40589 40569 40705 40709 40709 40705 40706 40618 40563
40570 40578 40578 40519 40512 40556 40578 40572 40563 40522 40576 40580 40711 40706 40708
40560 40629 40695 40547 40687 40634 40577 40567 40526 40709 40709 40537 40708 40706 40707
40561 40523 40565 40551 40688 40569 40579 40556 40569 40709 40576 40706 40706 40601 40707
40561 40553 40560 40525 40549 40556 40621 40570 40545 40709 40525 40594 40707 40707 40577
40575 40577 40595 40548 40555 40573 40556 40574 40565 40574 40510 40576 40713 40615 40707
40560 40547 40687 40530 40562 40565 40582 40578 40551 40708 40709 40693 40709 40611 40587

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 40528 bytes 100%
1,000 40510 bytes -18 bytes 100%
10,000 40508 bytes -2 bytes 100%
100,000 40504 bytes -4 bytes 0.58%
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
40729 bytes +225 bytes (+0.56%) +87 bytes
40729 bytes +225 bytes (+0.56%) +87 bytes
40728 bytes +224 bytes (+0.55%) +86 bytes
40741 bytes +237 bytes (+0.59%) +99 bytes
40741 bytes +237 bytes (+0.59%) +99 bytes
40758 bytes +254 bytes (+0.63%) +116 bytes
40751 bytes +247 bytes (+0.61%) +109 bytes
40740 bytes +236 bytes (+0.58%) +98 bytes
40642 bytes +138 bytes (+0.34%)

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 32808 bytes -7696 bytes (-19.00%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 34619 bytes -5885 bytes (-14.53%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 36085 bytes -4419 bytes (-10.91%)
Brotli (Wikipedia) brotli brotli -q 11 36821 bytes -3683 bytes (-9.09%)
LZMA2 (Wikipedia) xz xz -9 37612 bytes -2892 bytes (-7.14%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 39203 bytes -1301 bytes (-3.21%)
Zstandard (Wikipedia) zstd zstd -19 39271 bytes -1233 bytes (-3.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.