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

After GZIP compression these minified files vary in size:
Boot
  56291 bytes (55.0k)
CDN
jsdelivr
  56291 bytes (55.0k)
CDN
Baidu
  49310 bytes (48.2k)
CDN
cdnjs
  49300 bytes (48.1k)
CDN
gzip -6 (default)
  48920 bytes (47.8k)
local copy
unpkg
  48896 bytes (47.8k)
CDN
gzip -9
  48737 bytes (47.6k)
local copy
zultra
  47189 bytes (46.1k)
local copy
libdeflate -12
  47145 bytes (46.0k)
local copy
7zip -mx=9 -tgzip
  47128 bytes (46.0k)
local copy
pigz -11 -n
  46898 bytes (45.8k)
local copy
kzip -s0 -rn -b6
  46893 bytes (45.8k)
local copy
Zopfli
  46798 bytes (45.7k)
local copy
Zopfli (defluff)
  46797 bytes (45.7k)
local copy

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

You will automatically get the smallest D3 3.2.8 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 2098 bytes by using my D3 3.2.8 Zopfli version instead of the best available CDN (4.48% smaller than unpkg, 46798 vs. 48896 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 --bsr8 --lazy --ohh

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

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.2.8/d3.min.js --location | sha1sum
8c20d53ba2c073a0b939b06847f12204ba0f81c6  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.2.8.min.zopfli.js.gz | sha1sum
8c20d53ba2c073a0b939b06847f12204ba0f81c6  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 56291 bytes 5db72951d2ee027b0536fe8b19928762 (invalid)
jsdelivr 56291 bytes 5db72951d2ee027b0536fe8b19928762 (invalid)
cdnjs 49300 bytes 5db72951d2ee027b0536fe8b19928762 (invalid)
unpkg 48896 bytes 5db72951d2ee027b0536fe8b19928762 July 11, 2016 @ 16:32

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 49310 bytes 3ae7d4aacc68ee40d0f5b6b778705563 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
46798 bytes -5 bytes zopfli --i100000 --mls128 --bsr8 --lazy --ohh December 21, 2015 @ 16:36
46803 bytes -6 bytes zopfli --i10000 --mls128 --bsr8 --lazy --ohh October 14, 2015 @ 03:09
46809 bytes -3 bytes zopfli --i1000 --mls128 --bsr8 --lazy --ohh September 20, 2015 @ 01:33
46812 bytes -1 byte zopfli --i1000 --mls8 --bsr16 --lazy --ohh September 20, 2015 @ 01:18
46813 bytes -7 bytes zopfli --i1000 --mls8 --bsr7 --lazy --ohh September 20, 2015 @ 01:14
46820 bytes zopfli --i100 --mls128 --bsr8 --lazy --ohh September 18, 2015 @ 21:03

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

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
46962 46911 46959 46980 46916 46927 46903 46965 46881 47046 46896 47068 47091 46936 47072
46896 46920 46912 46903 46900 46869 46859 46841 46840 46852 46847 46852 47094 46837 46898
46853 46849 46867 46872 46836 46916 46843 46875 46826 46839 46826 46822 47066 46891 46874
46850 46837 46809 46885 46891 46856 46845 46847 46850 46857 46841 46833 47075 46919 46815
46864 46866 46955 46842 46870 46871 46798 46900 46841 46847 46857 46842 47087 46938 46927
46855 46875 46844 46890 46822 46857 46869 46899 46843 46838 46833 46844 47089 46855 46833
46852 46859 46856 46857 46839 46820 46835 46835 46832 46833 47010 46990 47074 46937 46841
46913 46859 46848 46894 46850 46855 46869 46871 46831 46828 46828 46802 47067 46916 46824
46847 46896 46821 46894 46826 46883 46876 46869 46825 46832 46831 46807 47076 46924 46888
46830 46855 46863 46879 46863 46859 46880 46872 46837 46831 46831 46826 47078 46916 46827
46837 46853 46867 46860 46843 46833 46840 46834 46836 46836 46845 46812 47070 46871 46871
46830 46898 46861 46856 46847 46881 46832 46883 46827 46832 46840 46822 47094 46877 46839
46875 46849 46802 46897 46815 46873 46877 46884 46843 46832 46846 46816 47076 46842 46835
46900 46860 46834 46885 46829 46839 46879 46853 46828 46835 46835 46822 47076 46878 46859
46851 46860 46857 46862 46861 46832 46860 46874 46836 46833 46842 46823 47097 46889 46808
46856 46891 46847 46858 46840 46876 46882 46885 46841 46832 46839 46808 47080 46879 46855
46905 46837 46865 46883 46835 46843 46830 46869 46842 46829 46825 46815 47076 46867 46890
46907 46904 46846 46858 46876 46833 46868 46888 46832 46837 46828 46818 47076 46841 46848
46839 46848 46873 46850 46840 46841 46866 46857 46845 46831 46830 46828 47092 46862 46857
46852 46848 46885 46881 46865 46869 46831 46864 46836 46831 46827 46825 47070 46861 46860
46905 46853 46841 46843 46844 46869 46844 46890 46873 46832 46833 46831 47078 46821 46858
46843 46881 46823 46845 46812 46851 46858 46885 46856 46886 46830 46802 47077 46828 46828
46832 46850 46872 46849 46858 46856 46850 46860 46828 46831 46832 46811 47081 46907 46864

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 46820 bytes 100%
1,000 46809 bytes -11 bytes 100%
10,000 46803 bytes -6 bytes 100%
100,000 46798 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
47033 bytes +235 bytes (+0.50%) +140 bytes
47125 bytes +327 bytes (+0.70%) +232 bytes
47116 bytes +318 bytes (+0.68%) +223 bytes
47030 bytes +232 bytes (+0.50%) +137 bytes
47035 bytes +237 bytes (+0.51%) +142 bytes
46971 bytes +173 bytes (+0.37%) +78 bytes
46893 bytes +95 bytes (+0.20%)
46925 bytes +127 bytes (+0.27%) +32 bytes
46927 bytes +129 bytes (+0.28%) +34 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 37515 bytes -9283 bytes (-19.84%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 39696 bytes -7102 bytes (-15.18%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 40300 bytes -6498 bytes (-13.89%)
Brotli (Wikipedia) brotli brotli -q 11 42303 bytes -4495 bytes (-9.61%)
LZMA2 (Wikipedia) xz xz -9 43036 bytes -3762 bytes (-8.04%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 44883 bytes -1915 bytes (-4.09%)
Zstandard (Wikipedia) zstd zstd -19 45301 bytes -1497 bytes (-3.20%)

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.