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

After GZIP compression these minified files vary in size:
Boot
  48680 bytes (47.5k)
CDN
Baidu
  42572 bytes (41.6k)
CDN
cdnjs
  42561 bytes (41.6k)
CDN
gzip -6 (default)
  42242 bytes (41.3k)
local copy
unpkg
  42205 bytes (41.2k)
CDN
jsdelivr
  42126 bytes (41.1k)
CDN
gzip -9
  42113 bytes (41.1k)
local copy
7zip -mx=9 -tgzip
  40747 bytes (39.8k)
local copy
libdeflate -12
  40734 bytes (39.8k)
local copy
zultra
  40699 bytes (39.7k)
local copy
pigz -11 -n
  40690 bytes (39.7k)
local copy
kzip -s0 -rn -b8
  40575 bytes (39.6k)
local copy
Zopfli
  40482 bytes (39.5k)
local copy
Zopfli (defluff)
  40480 bytes (39.5k)
local copy

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

You will automatically get the smallest D3 3.0.6 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 1644 bytes by using my D3 3.0.6 Zopfli version instead of the best available CDN (4.06% smaller than jsdelivr, 40482 vs. 42126 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 --mls128 --bsr30 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 128  --mls128
block splitting recursion 30  --bsr30
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 (40480 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.6/d3.min.js --location | md5sum
27eebdc7b36e8a23ea119dae9fe11bab  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.0.6.min.zopfli.js.gz | md5sum
27eebdc7b36e8a23ea119dae9fe11bab  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.0.6/d3.min.js --location | sha1sum
f63ab652e2ce8301fef6122b422f5e76e43e4de4  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.0.6.min.zopfli.js.gz | sha1sum
f63ab652e2ce8301fef6122b422f5e76e43e4de4  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 48680 bytes 27eebdc7b36e8a23ea119dae9fe11bab (invalid)
cdnjs 42561 bytes 27eebdc7b36e8a23ea119dae9fe11bab (invalid)
unpkg 42205 bytes 27eebdc7b36e8a23ea119dae9fe11bab July 11, 2016 @ 16:32
jsdelivr 42126 bytes 27eebdc7b36e8a23ea119dae9fe11bab (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 42572 bytes 6f5bcbebb1bdd0edb4b34aa2ed742357 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
40482 bytes -2 bytes zopfli --i100000 --mls128 --bsr30 --lazy --ohh December 21, 2015 @ 11:37
40484 bytes -3 bytes zopfli --i100000 --mls512 --bsr8 --lazy --ohh November 23, 2015 @ 17:31
40487 bytes -1 byte zopfli --i10000 --mls128 --bsr30 --lazy --ohh November 23, 2015 @ 16:34
40488 bytes -4 bytes zopfli --i10000 --mls512 --bsr8 --lazy --ohh November 23, 2015 @ 16:21
40492 bytes -1 byte zopfli --i1000 --mls512 --bsr8 --lazy --ohh September 20, 2015 @ 17:56
40493 bytes -9 bytes zopfli --i1000 --mls8 --bsr16 --lazy --ohh September 20, 2015 @ 17:37
40502 bytes zopfli --i100 --mls512 --bsr8 --lazy --ohh September 18, 2015 @ 21:01

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

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
40655 40654 40650 40660 40654 40606 40655 40654 40656 40599 40588 40563 40678 40672 40683
40654 40654 40652 40649 40651 40647 40653 40595 40576 40540 40538 40640 40682 40578 40678
40504 40503 40507 40656 40648 40512 40650 40661 40648 40671 40644 40659 40680 40592 40562
40652 40505 40649 40528 40650 40654 40644 40649 40502 40547 40517 40670 40681 40666 40665
40582 40572 40550 40655 40502 40524 40643 40644 40484 40556 40549 40569 40678 40586 40667
40551 40575 40536 40648 40655 40556 40528 40533 40560 40672 40669 40669 40676 40677 40547
40649 40659 40504 40573 40527 40523 40539 40542 40517 40558 40546 40547 40677 40587 40552
40517 40491 40661 40519 40503 40516 40542 40582 40510 40564 40551 40564 40677 40675 40552
40539 40494 40656 40659 40541 40521 40529 40494 40510 40540 40543 40544 40677 40592 40555
40506 40507 40500 40518 40522 40525 40523 40527 40515 40672 40549 40671 40678 40677 40677
40655 40519 40507 40514 40515 40505 40537 40533 40495 40538 40546 40549 40678 40555 40557
40539 40519 40556 40516 40541 40518 40598 40509 40516 40550 40550 40549 40676 40575 40683
40648 40506 40488 40513 40549 40507 40545 40515 40509 40673 40671 40548 40677 40546 40684
40512 40519 40501 40510 40648 40524 40538 40541 40506 40549 40547 40545 40677 40545 40560
40503 40509 40510 40525 40526 40645 40644 40528 40497 40522 40548 40546 40678 40546 40547
40520 40521 40509 40514 40523 40532 40541 40527 40515 40549 40671 40671 40677 40590 40670
40648 40525 40510 40588 40525 40533 40645 40535 40488 40556 40551 40671 40681 40561 40666
40507 40521 40657 40523 40526 40522 40520 40539 40504 40682 40549 40560 40682 40545 40677
40536 40523 40509 40518 40541 40525 40517 40549 40514 40670 40669 40671 40678 40676 40548
40524 40519 40507 40520 40652 40509 40542 40528 40517 40670 40504 40556 40678 40555 40551
40533 40538 40657 40514 40652 40523 40540 40500 40499 40549 40548 40546 40677 40545 40663
40540 40518 40506 40537 40490 40512 40482 40585 40513 40528 40537 40548 40682 40508 40668
40518 40525 40507 40525 40521 40535 40505 40505 40547 40553 40548 40557 40678 40546 40607

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 40501 bytes 100%
1,000 40492 bytes -9 bytes 100%
10,000 40487 bytes -5 bytes 100%
100,000 40482 bytes -5 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
40692 bytes +210 bytes (+0.52%) +117 bytes
40698 bytes +216 bytes (+0.53%) +123 bytes
40689 bytes +207 bytes (+0.51%) +114 bytes
40699 bytes +217 bytes (+0.54%) +124 bytes
40703 bytes +221 bytes (+0.55%) +128 bytes
40709 bytes +227 bytes (+0.56%) +134 bytes
40622 bytes +140 bytes (+0.35%) +47 bytes
40627 bytes +145 bytes (+0.36%) +52 bytes
40575 bytes +93 bytes (+0.23%)

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 32764 bytes -7718 bytes (-19.07%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 34618 bytes -5864 bytes (-14.49%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 36051 bytes -4431 bytes (-10.95%)
Brotli (Wikipedia) brotli brotli -q 11 36826 bytes -3656 bytes (-9.03%)
LZMA2 (Wikipedia) xz xz -9 37632 bytes -2850 bytes (-7.04%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 39167 bytes -1315 bytes (-3.25%)
Zstandard (Wikipedia) zstd zstd -19 39253 bytes -1229 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.