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

After GZIP compression these minified files vary in size:
Boot
  58307 bytes (56.9k)
CDN
Baidu
  51317 bytes (50.1k)
CDN
cdnjs
  51306 bytes (50.1k)
CDN
unpkg
  50958 bytes (49.8k)
CDN
gzip -6 (default)
  50908 bytes (49.7k)
local copy
gzip -9
  50722 bytes (49.5k)
local copy
libdeflate -12
  49109 bytes (48.0k)
local copy
zultra
  49093 bytes (47.9k)
local copy
7zip -mx=9 -tgzip
  49049 bytes (47.9k)
local copy
pigz -11 -n
  48824 bytes (47.7k)
local copy
kzip -s0 -rn -b6
  48811 bytes (47.7k)
local copy
Zopfli
  48717 bytes (47.6k)
local copy
Zopfli (defluff)
  48716 bytes (47.6k)
local copy

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

You will automatically get the smallest D3 3.3.10 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 2241 bytes by using my D3 3.3.10 Zopfli version instead of the best available CDN (4.60% smaller than unpkg, 48717 vs. 50958 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 --mls4 --bsr10 --lazy --ohh

(found December 22, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 4  --mls4
block splitting recursion 10  --bsr10
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 (48716 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.3.10/d3.min.js --location | md5sum
f19da6ee9159cc532bdd1a4017fea002  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.3.10.min.zopfli.js.gz | md5sum
f19da6ee9159cc532bdd1a4017fea002  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58307 bytes f19da6ee9159cc532bdd1a4017fea002 (invalid)
cdnjs 51306 bytes f19da6ee9159cc532bdd1a4017fea002 (invalid)
unpkg 50958 bytes f19da6ee9159cc532bdd1a4017fea002 July 11, 2016 @ 16:31

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 51317 bytes 779a94d5278672f1c1f50c1e2ee45599 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
48717 bytes -6 bytes zopfli --i100000 --mls4 --bsr10 --lazy --ohh December 22, 2015 @ 10:17
48723 bytes -1 byte zopfli --i10000 --mls4 --bsr10 --lazy --ohh October 14, 2015 @ 04:51
48724 bytes -5 bytes zopfli --i10000 --mls8 --bsr20 --lazy --ohh October 14, 2015 @ 01:01
48729 bytes -12 bytes zopfli --i1000 --mls8 --bsr20 --lazy --ohh September 19, 2015 @ 16:45
48741 bytes -9 bytes zopfli --i1000 --mls8 --bsr12 --lazy --ohh September 19, 2015 @ 16:39
48750 bytes zopfli --i100 --mls8 --bsr20 --lazy --ohh September 18, 2015 @ 20:00

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
48980 48980 48988 48872 48977 48867 48874 48892 48861 48856 49007 48879 49000 49003 49012
48844 48847 48827 48814 48885 48892 48856 48869 48821 48840 48752 48855 49006 49002 49008
48879 48863 48851 48756 48776 48863 48831 48804 48746 48762 48798 48757 48998 48997 48835
48859 48731 48765 48796 48803 48832 48840 48805 48818 48750 48737 48767 49003 48996 48816
48804 48806 48801 48775 48780 48851 48840 48815 48807 48747 48845 48769 49000 48997 48842
48871 48868 48790 48762 48775 48806 48901 48834 48825 48840 48739 48757 49000 48895 48855
48776 48717 48739 48765 48761 48870 48840 48806 48836 48870 48749 48919 48992 49007 48822
48866 48789 48872 48764 48834 48931 48829 48826 48891 48844 48843 48764 48985 48998 48845
48793 48751 48732 48763 48736 48879 48858 48798 48803 48744 48742 48753 48998 48997 48833
48774 48732 48758 48779 48761 48876 48826 48805 48810 48753 48744 48751 48987 48992 48810
48793 48786 48784 48760 48762 48870 48839 48807 48781 48746 48746 49002 48987 48993 48813
48785 48761 48784 48759 48804 48830 48850 48806 48809 48747 48736 48752 48989 48910 48858
48787 48755 48754 48754 48756 48870 48839 48835 48801 48746 48749 48753 48908 48994 48800
48786 48748 48762 48749 48759 48831 48839 48808 48813 48748 48737 48751 48985 48993 48835
48746 48763 48756 48757 48745 48867 48839 48824 48819 48748 48736 49001 48983 48992 48997
48785 48758 48762 48755 48770 48869 48836 48809 48851 48754 48746 49000 48996 48993 48980
48785 48749 48718 48757 48763 48876 48845 48806 48797 48751 48748 49003 48985 48996 48984
48791 48762 48732 48764 48781 48867 48839 48788 48813 48842 48851 49003 48985 48985 48997
48783 48760 48731 48763 48774 48869 48846 48828 48817 48756 48754 49004 48996 48993 48998
48789 48769 48756 48767 48762 48869 48850 48809 48818 48762 48744 48759 48996 48992 48833
48784 48764 48756 48755 48759 48857 48839 48803 48807 48746 48752 48756 48998 48910 48809
48785 48745 48756 48757 48778 48868 48805 48807 48798 48745 48740 48755 48990 48995 48824
48780 48756 48757 48763 48764 48883 48850 48815 48818 48756 48748 49001 48983 48992 48995

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 48746 bytes 100%
1,000 48729 bytes -17 bytes 100%
10,000 48723 bytes -6 bytes 100%
100,000 48717 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
48959 bytes +242 bytes (+0.50%) +148 bytes
49038 bytes +321 bytes (+0.66%) +227 bytes
49040 bytes +323 bytes (+0.66%) +229 bytes
48960 bytes +243 bytes (+0.50%) +149 bytes
48966 bytes +249 bytes (+0.51%) +155 bytes
48871 bytes +154 bytes (+0.32%) +60 bytes
48811 bytes +94 bytes (+0.19%)
48826 bytes +109 bytes (+0.22%) +15 bytes
48832 bytes +115 bytes (+0.24%) +21 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 39015 bytes -9702 bytes (-19.92%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41394 bytes -7323 bytes (-15.03%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42104 bytes -6613 bytes (-13.57%)
Brotli (Wikipedia) brotli brotli -q 11 44104 bytes -4613 bytes (-9.47%)
LZMA2 (Wikipedia) xz xz -9 44796 bytes -3921 bytes (-8.05%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46681 bytes -2036 bytes (-4.18%)
Zstandard (Wikipedia) zstd zstd -19 47199 bytes -1518 bytes (-3.12%)

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.