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

After GZIP compression these minified files vary in size:
Boot
  58843 bytes (57.5k)
CDN
jsdelivr
  58843 bytes (57.5k)
CDN
cdnjs
  52004 bytes (50.8k)
CDN
unpkg
  51711 bytes (50.5k)
CDN
gzip -6 (default)
  51616 bytes (50.4k)
local copy
gzip -9
  51454 bytes (50.2k)
local copy
libdeflate -12
  49813 bytes (48.6k)
local copy
zultra
  49752 bytes (48.6k)
local copy
7zip -mx=9 -tgzip
  49709 bytes (48.5k)
local copy
pigz -11 -n
  49534 bytes (48.4k)
local copy
kzip -s0 -rn -b8
  49477 bytes (48.3k)
local copy
Zopfli
  49409 bytes (48.3k)
local copy
Zopfli (defluff)
  49407 bytes (48.2k)
local copy

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

You will automatically get the smallest D3 3.4.13 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 2302 bytes by using my D3 3.4.13 Zopfli version instead of the best available CDN (4.66% smaller than unpkg, 49409 vs. 51711 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 --bsr17 --lazy --ohh

(found December 22, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 128  --mls128
block splitting recursion 17  --bsr17
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 (49407 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.4.13/d3.min.js --location | md5sum
1be4e36dafd7dddbf7b674b6caa034ba  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.4.13.min.zopfli.js.gz | md5sum
1be4e36dafd7dddbf7b674b6caa034ba  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58843 bytes 1be4e36dafd7dddbf7b674b6caa034ba (invalid)
jsdelivr 58843 bytes 1be4e36dafd7dddbf7b674b6caa034ba (invalid)
cdnjs 52004 bytes 1be4e36dafd7dddbf7b674b6caa034ba (invalid)
unpkg 51711 bytes 1be4e36dafd7dddbf7b674b6caa034ba July 11, 2016 @ 16:31

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
49409 bytes -5 bytes zopfli --i100000 --mls128 --bsr17 --lazy --ohh December 22, 2015 @ 16:22
49414 bytes -2 bytes zopfli --i10000 --mls128 --bsr17 --lazy --ohh November 23, 2015 @ 17:56
49416 bytes -9 bytes zopfli --i10000 --mls128 --bsr40 --lazy --ohh October 13, 2015 @ 19:36
49425 bytes -5 bytes zopfli --i1000 --mls128 --bsr17 --lazy --ohh September 20, 2015 @ 23:05
49430 bytes -2 bytes zopfli --i1000 --mls128 --bsr6 --lazy --ohh September 19, 2015 @ 04:37
49432 bytes -1 byte zopfli --i1000 --mls128 --bsr10 --lazy --ohh September 19, 2015 @ 04:29
49433 bytes -10 bytes zopfli --i1000 --mls64 --bsr6 --lazy --ohh September 19, 2015 @ 04:26
49443 bytes -6 bytes zopfli --i1000 --mls8 --bsr4 --lazy --ohh September 19, 2015 @ 04:17
49449 bytes zopfli --i100 --mls128 --bsr13 --lazy --ohh September 18, 2015 @ 21:38

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

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
49639 49638 49581 49551 49555 49535 49574 49565 49602 49596 49548 49538 49675 49669 49678
49476 49485 49434 49456 49674 49451 49509 49519 49517 49529 49520 49669 49669 49523 49525
49517 49485 49474 49475 49488 49422 49420 49516 49520 49520 49531 49549 49533 49514 49521
49491 49494 49471 49515 49429 49504 49514 49519 49520 49518 49511 49509 49516 49514 49517
49493 49460 49472 49522 49497 49480 49527 49508 49536 49529 49513 49550 49533 49527 49515
49492 49489 49471 49461 49498 49525 49426 49512 49516 49528 49506 49529 49527 49537 49515
49481 49490 49469 49474 49478 49457 49422 49525 49526 49533 49514 49525 49514 49519 49515
49499 49490 49468 49472 49487 49443 49421 49513 49515 49522 49513 49534 49521 49513 49517
49484 49481 49471 49518 49472 49432 49427 49512 49524 49518 49516 49528 49523 49512 49516
49490 49483 49472 49471 49466 49435 49420 49510 49512 49521 49514 49533 49523 49543 49515
49490 49480 49469 49473 49452 49472 49423 49521 49526 49516 49510 49517 49670 49505 49515
49490 49482 49474 49501 49484 49431 49518 49515 49515 49518 49515 49514 49520 49515 49515
49483 49475 49470 49464 49488 49429 49420 49512 49525 49518 49520 49527 49521 49511 49521
49508 49482 49463 49512 49483 49426 49409 49510 49522 49513 49514 49524 49520 49510 49521
49473 49480 49470 49468 49484 49459 49421 49512 49516 49522 49522 49522 49523 49517 49518
49511 49482 49470 49451 49483 49427 49427 49515 49520 49518 49514 49516 49512 49525 49513
49485 49488 49465 49515 49460 49462 49420 49510 49521 49521 49510 49520 49514 49530 49516
49503 49508 49474 49467 49503 49450 49418 49517 49515 49520 49515 49524 49508 49519 49518
49469 49480 49467 49515 49448 49434 49413 49514 49527 49521 49517 49531 49519 49511 49517
49497 49480 49467 49458 49487 49448 49419 49513 49521 49516 49524 49533 49533 49518 49513
49492 49485 49472 49476 49468 49429 49411 49512 49524 49516 49515 49516 49519 49509 49515
49470 49476 49472 49471 49469 49442 49434 49513 49526 49514 49513 49541 49524 49518 49515
49472 49482 49471 49444 49472 49433 49412 49515 49524 49516 49509 49528 49518 49516 49519

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 49447 bytes 100%
1,000 49425 bytes -22 bytes 100%
10,000 49414 bytes -11 bytes 100%
100,000 49409 bytes -5 bytes 1.16%
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
49704 bytes +295 bytes (+0.60%) +227 bytes
49703 bytes +294 bytes (+0.60%) +226 bytes
49704 bytes +295 bytes (+0.60%) +227 bytes
49646 bytes +237 bytes (+0.48%) +169 bytes
49594 bytes +185 bytes (+0.37%) +117 bytes
49606 bytes +197 bytes (+0.40%) +129 bytes
49509 bytes +100 bytes (+0.20%) +32 bytes
49525 bytes +116 bytes (+0.23%) +48 bytes
49477 bytes +68 bytes (+0.14%)

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 - for example, your browser actually supports it !
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 39440 bytes -9969 bytes (-20.18%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41860 bytes -7549 bytes (-15.28%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42752 bytes -6657 bytes (-13.47%)
Brotli (Wikipedia) brotli brotli -q 11 44745 bytes -4664 bytes (-9.44%)
LZMA2 (Wikipedia) xz xz -9 45408 bytes -4001 bytes (-8.10%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 47119 bytes -2290 bytes (-4.63%)
Zstandard (Wikipedia) zstd zstd -19 47802 bytes -1607 bytes (-3.25%)

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.