Choose a version:
47% The original file has 267841 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 126781 bytes (123.8k, 47%).

After GZIP compression these minified files vary in size:
Boot
  48719 bytes (47.6k)
CDN
Baidu
  42628 bytes (41.6k)
CDN
cdnjs
  42622 bytes (41.6k)
CDN
gzip -6 (default)
  42294 bytes (41.3k)
local copy
unpkg
  42267 bytes (41.3k)
CDN
gzip -9
  42179 bytes (41.2k)
local copy
7zip -mx=9 -tgzip
  40786 bytes (39.8k)
local copy
libdeflate -12
  40755 bytes (39.8k)
local copy
zultra
  40736 bytes (39.8k)
local copy
pigz -11 -n
  40725 bytes (39.8k)
local copy
kzip -s0 -rn -b8
  40641 bytes (39.7k)
local copy
Zopfli
  40498 bytes (39.5k)
local copy
Zopfli (defluff)
  40496 bytes (39.5k)
local copy

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

You will automatically get the smallest D3 3.0.3 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 1769 bytes by using my D3 3.0.3 Zopfli version instead of the best available CDN (4.37% smaller than unpkg, 40498 vs. 42267 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 --mls64 --bsr14 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 64  --mls64
block splitting recursion 14  --bsr14
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 (40496 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.3/d3.min.js --location | md5sum
833fd80464e37d80484782fcfc01fce8  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.0.3.min.zopfli.js.gz | md5sum
833fd80464e37d80484782fcfc01fce8  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.0.3/d3.min.js --location | sha1sum
1b93c78acf3a251f7e3c037d7b01b979310d3997  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.0.3.min.zopfli.js.gz | sha1sum
1b93c78acf3a251f7e3c037d7b01b979310d3997  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 48719 bytes 833fd80464e37d80484782fcfc01fce8 (invalid)
cdnjs 42622 bytes 833fd80464e37d80484782fcfc01fce8 (invalid)
unpkg 42267 bytes 833fd80464e37d80484782fcfc01fce8 July 11, 2016 @ 16:32

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 42628 bytes 9cf522b2f811b8f21ded232e853df321 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
40498 bytes -6 bytes zopfli --i100000 --mls64 --bsr14 --lazy --ohh December 21, 2015 @ 11:33
40504 bytes -1 byte zopfli --i10000 --mls64 --bsr14 --lazy --ohh November 23, 2015 @ 16:06
40505 bytes -3 bytes zopfli --i10000 --mls512 --bsr6 --lazy --ohh November 23, 2015 @ 15:59
40508 bytes -1 byte zopfli --i1000 --mls512 --bsr6 --lazy --ohh September 20, 2015 @ 20:11
40509 bytes -7 bytes zopfli --i1000 --mls64 --bsr14 --lazy --ohh September 20, 2015 @ 20:05
40516 bytes -4 bytes zopfli --i1000 --mls16 --bsr6 --lazy --ohh September 20, 2015 @ 20:02
40520 bytes -6 bytes zopfli --i1000 --mls16 --bsr12 --lazy --ohh September 20, 2015 @ 20:01
40526 bytes zopfli --i100 --mls64 --bsr14 --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:54.

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
40620 40635 40634 40587 40633 40637 40626 40685 40632 40709 40710 40630 40710 40710 40722
40681 40695 40693 40562 40682 40690 40686 40668 40614 40712 40707 40541 40714 40616 40695
40534 40521 40557 40508 40681 40533 40679 40680 40500 40711 40711 40613 40714 40556 40717
40684 40596 40555 40604 40676 40522 40550 40552 40677 40582 40709 40577 40718 40580 40580
40687 40592 40600 40582 40675 40539 40542 40515 40568 40532 40516 40581 40709 40641 40711
40683 40607 40676 40531 40571 40526 40558 40677 40593 40703 40576 40701 40710 40580 40689
40554 40589 40673 40591 40521 40547 40568 40553 40560 40566 40567 40577 40714 40615 40689
40559 40545 40544 40534 40686 40537 40619 40575 40578 40529 40530 40594 40708 40612 40718
40587 40559 40520 40516 40686 40522 40582 40580 40574 40532 40523 40591 40708 40615 40699
40543 40557 40546 40534 40591 40586 40551 40572 40529 40708 40703 40581 40709 40711 40591
40555 40555 40546 40532 40683 40498 40567 40531 40571 40527 40565 40557 40711 40613 40715
40558 40562 40538 40562 40539 40553 40563 40684 40590 40709 40710 40572 40698 40582 40714
40529 40559 40689 40542 40542 40539 40568 40586 40696 40520 40702 40560 40727 40576 40690
40684 40556 40573 40538 40525 40514 40565 40675 40564 40695 40697 40573 40708 40581 40709
40561 40630 40559 40547 40548 40560 40566 40580 40575 40571 40576 40585 40578 40581 40691
40561 40560 40560 40555 40548 40526 40621 40526 40696 40697 40696 40555 40695 40645 40580
40687 40625 40553 40689 40534 40545 40581 40577 40598 40709 40704 40580 40719 40573 40709
40561 40586 40577 40537 40574 40523 40531 40571 40577 40527 40577 40580 40711 40617 40596
40594 40673 40560 40548 40590 40549 40562 40597 40527 40711 40710 40582 40712 40614 40588
40586 40536 40543 40547 40571 40545 40586 40563 40532 40529 40576 40585 40709 40580 40716
40553 40538 40546 40545 40585 40532 40567 40586 40556 40710 40527 40590 40694 40583 40715
40575 40557 40583 40549 40508 40544 40553 40571 40572 40528 40580 40590 40718 40613 40691
40683 40537 40578 40537 40568 40590 40582 40570 40695 40572 40703 40573 40710 40610 40592

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 40526 bytes 100%
1,000 40508 bytes -18 bytes 100%
10,000 40504 bytes -4 bytes 100%
100,000 40498 bytes -6 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
40727 bytes +229 bytes (+0.57%) +86 bytes
40737 bytes +239 bytes (+0.59%) +96 bytes
40728 bytes +230 bytes (+0.57%) +87 bytes
40741 bytes +243 bytes (+0.60%) +100 bytes
40732 bytes +234 bytes (+0.58%) +91 bytes
40760 bytes +262 bytes (+0.65%) +119 bytes
40747 bytes +249 bytes (+0.61%) +106 bytes
40734 bytes +236 bytes (+0.58%) +93 bytes
40641 bytes +143 bytes (+0.35%)

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 32825 bytes -7673 bytes (-18.95%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 34621 bytes -5877 bytes (-14.51%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 36121 bytes -4377 bytes (-10.81%)
Brotli (Wikipedia) brotli brotli -q 11 36810 bytes -3688 bytes (-9.11%)
LZMA2 (Wikipedia) xz xz -9 37632 bytes -2866 bytes (-7.08%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 39206 bytes -1292 bytes (-3.19%)
Zstandard (Wikipedia) zstd zstd -19 39279 bytes -1219 bytes (-3.01%)

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.