Choose a version:
46% The original file has 307350 bytes (300.1k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 142877 bytes (139.5k, 46%).

After GZIP compression these minified files vary in size:
Boot
  55894 bytes (54.6k)
CDN
Baidu
  48782 bytes (47.6k)
CDN
cdnjs
  48774 bytes (47.6k)
CDN
gzip -6 (default)
  48419 bytes (47.3k)
local copy
unpkg
  48330 bytes (47.2k)
CDN
gzip -9
  48239 bytes (47.1k)
local copy
zultra
  46701 bytes (45.6k)
local copy
libdeflate -12
  46672 bytes (45.6k)
local copy
7zip -mx=9 -tgzip
  46671 bytes (45.6k)
local copy
pigz -11 -n
  46515 bytes (45.4k)
local copy
kzip -s0 -rn -b7
  46488 bytes (45.4k)
local copy
Zopfli
  46366 bytes (45.3k)
local copy
Zopfli (defluff)
  46365 bytes (45.3k)
local copy

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

You will automatically get the smallest D3 3.2.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 1964 bytes by using my D3 3.2.0 Zopfli version instead of the best available CDN (4.24% smaller than unpkg, 46366 vs. 48330 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 --mls256 --bsr18 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 256  --mls256
block splitting recursion 18  --bsr18
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 (46365 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.2.0/d3.min.js --location | md5sum
427567022289177fe822261a587f5147  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.2.0.min.zopfli.js.gz | md5sum
427567022289177fe822261a587f5147  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.2.0/d3.min.js --location | sha1sum
6418789a5ec20c0a977788c7ca719edfef0e5b45  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.2.0.min.zopfli.js.gz | sha1sum
6418789a5ec20c0a977788c7ca719edfef0e5b45  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 55894 bytes 427567022289177fe822261a587f5147 (invalid)
cdnjs 48774 bytes 427567022289177fe822261a587f5147 (invalid)
unpkg 48330 bytes 427567022289177fe822261a587f5147 July 11, 2016 @ 16:32

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 48782 bytes 4b1f13ff070b4ce993200c5b464ea8fb 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
46366 bytes -5 bytes zopfli --i100000 --mls256 --bsr18 --lazy --ohh December 21, 2015 @ 14:20
46371 bytes -7 bytes zopfli --i10000 --mls256 --bsr18 --lazy --ohh November 23, 2015 @ 17:29
46378 bytes -7 bytes zopfli --i1000 --mls256 --bsr18 --lazy --ohh September 20, 2015 @ 07:18
46385 bytes zopfli --i100 --mls2048 --bsr11 --lazy --ohh September 18, 2015 @ 20: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:52.

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
46583 46584 46580 46486 46538 46578 46566 46566 46578 46578 46572 46604 46615 46523 46600
46524 46477 46437 46509 46502 46515 46528 46585 46606 46411 46427 46420 46590 46466 46474
46466 46439 46433 46429 46433 46477 46397 46398 46393 46390 46388 46409 46605 46476 46490
46411 46417 46471 46431 46410 46445 46489 46520 46398 46438 46605 46480 46604 46462 46567
46483 46482 46474 46419 46410 46407 46420 46515 46391 46495 46474 46482 46603 46461 46469
46463 46592 46430 46477 46421 46448 46467 46537 46539 46482 46470 46528 46585 46464 46479
46433 46421 46440 46430 46452 46409 46421 46557 46555 46544 46537 46523 46584 46482 46461
46411 46496 46445 46450 46443 46430 46440 46545 46395 46398 46375 46424 46585 46467 46485
46478 46445 46445 46476 46440 46429 46409 46564 46532 46390 46418 46406 46606 46463 46454
46468 46460 46459 46412 46468 46468 46410 46502 46390 46391 46381 46424 46604 46474 46495
46472 46467 46477 46481 46419 46427 46385 46533 46478 46393 46381 46423 46586 46460 46459
46468 46437 46445 46469 46415 46444 46414 46527 46529 46392 46531 46553 46604 46593 46458
46441 46419 46440 46391 46406 46432 46469 46515 46541 46402 46402 46596 46604 46467 46483
46474 46476 46445 46413 46446 46418 46439 46420 46479 46386 46469 46596 46605 46594 46457
46471 46478 46446 46416 46471 46473 46504 46366 46443 46405 46424 46596 46586 46464 46458
46442 46460 46450 46415 46431 46469 46491 46515 46397 46390 46383 46424 46591 46590 46454
46447 46439 46462 46476 46442 46385 46410 46537 46399 46394 46381 46533 46592 46462 46493
46391 46428 46435 46454 46427 46438 46442 46524 46535 46550 46381 46531 46585 46472 46469
46434 46416 46446 46441 46402 46413 46415 46529 46530 46395 46394 46429 46592 46466 46458
46460 46439 46453 46477 46397 46410 46385 46418 46537 46388 46382 46427 46604 46459 46457
46408 46463 46417 46477 46405 46394 46412 46560 46393 46396 46393 46528 46606 46473 46465
46459 46475 46467 46439 46394 46395 46417 46408 46520 46379 46388 46534 46586 46460 46493
46415 46461 46449 46469 46455 46414 46407 46529 46393 46391 46392 46390 46605 46473 46455

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 46385 bytes 100%
1,000 46378 bytes -7 bytes 100%
10,000 46371 bytes -7 bytes 100%
100,000 46366 bytes -5 bytes 0.29%
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
46606 bytes +240 bytes (+0.52%) +118 bytes
46625 bytes +259 bytes (+0.56%) +137 bytes
46607 bytes +241 bytes (+0.52%) +119 bytes
46565 bytes +199 bytes (+0.43%) +77 bytes
46585 bytes +219 bytes (+0.47%) +97 bytes
46586 bytes +220 bytes (+0.47%) +98 bytes
46548 bytes +182 bytes (+0.39%) +60 bytes
46488 bytes +122 bytes (+0.26%)
46508 bytes +142 bytes (+0.31%) +20 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 37259 bytes -9107 bytes (-19.64%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 39456 bytes -6910 bytes (-14.90%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 40093 bytes -6273 bytes (-13.53%)
Brotli (Wikipedia) brotli brotli -q 11 41946 bytes -4420 bytes (-9.53%)
LZMA2 (Wikipedia) xz xz -9 42728 bytes -3638 bytes (-7.85%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 44631 bytes -1735 bytes (-3.74%)
Zstandard (Wikipedia) zstd zstd -19 44770 bytes -1596 bytes (-3.44%)

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.