Choose a version:
47% The original file has 297607 bytes (290.6k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 139059 bytes (135.8k, 47%).

After GZIP compression these minified files vary in size:
Boot
  54435 bytes (53.2k)
CDN
Baidu
  47502 bytes (46.4k)
CDN
cdnjs
  47491 bytes (46.4k)
CDN
gzip -6 (default)
  47171 bytes (46.1k)
local copy
unpkg
  47074 bytes (46.0k)
CDN
gzip -9
  46996 bytes (45.9k)
local copy
zultra
  45484 bytes (44.4k)
local copy
7zip -mx=9 -tgzip
  45461 bytes (44.4k)
local copy
libdeflate -12
  45439 bytes (44.4k)
local copy
kzip -s0 -rn -b7
  45350 bytes (44.3k)
local copy
pigz -11 -n
  45275 bytes (44.2k)
local copy
Zopfli
  45158 bytes (44.1k)
local copy
Zopfli (defluff)
  45155 bytes (44.1k)
local copy

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

You will automatically get the smallest D3 3.1.7 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 1916 bytes by using my D3 3.1.7 Zopfli version instead of the best available CDN (4.24% smaller than unpkg, 45158 vs. 47074 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 --bsr25 --lazy --ohh

(found December 21, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 4  --mls4
block splitting recursion 25  --bsr25
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 3 more bytes (45155 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.1.7/d3.min.js --location | md5sum
6a298fe596d6b91ea600bf0106c245a7  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.1.7.min.zopfli.js.gz | md5sum
6a298fe596d6b91ea600bf0106c245a7  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.1.7/d3.min.js --location | sha1sum
632f7ab7805756a932a028fe7f35ac49da95f009  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.1.7.min.zopfli.js.gz | sha1sum
632f7ab7805756a932a028fe7f35ac49da95f009  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 54435 bytes 6a298fe596d6b91ea600bf0106c245a7 (invalid)
cdnjs 47491 bytes 6a298fe596d6b91ea600bf0106c245a7 (invalid)
unpkg 47074 bytes 6a298fe596d6b91ea600bf0106c245a7 July 11, 2016 @ 16:32

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 47502 bytes 78f41cb4edbb722264cbe39a5fca40d8 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
45158 bytes -4 bytes zopfli --i100000 --mls4 --bsr25 --lazy --ohh December 21, 2015 @ 13:40
45162 bytes -3 bytes zopfli --i10000 --mls4 --bsr25 --lazy --ohh September 23, 2015 @ 18:21
45165 bytes -9 bytes zopfli --i1000 --mls4 --bsr25 --lazy --ohh September 23, 2015 @ 17:12
45174 bytes zopfli --i100 --mls4 --bsr25 --lazy --ohh September 22, 2015 @ 10:28

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

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
45360 45357 45357 45358 45347 45369 45361 45365 45349 45347 45347 45354 45361 45359 45365
45272 45272 45276 45257 45260 45346 45223 45351 45369 45202 45257 45347 45366 45362 45361
45287 45268 45261 45208 45278 45182 45226 45239 45247 45179 45216 45193 45367 45357 45355
45351 45249 45356 45350 45228 45295 45211 45300 45184 45270 45226 45340 45372 45368 45365
45248 45291 45232 45249 45225 45194 45212 45221 45203 45186 45225 45247 45363 45364 45348
45274 45266 45353 45228 45223 45297 45184 45297 45317 45194 45243 45192 45356 45363 45364
45216 45198 45348 45187 45233 45228 45215 45292 45323 45322 45254 45191 45365 45367 45364
45343 45297 45239 45257 45242 45227 45208 45302 45188 45220 45219 45183 45368 45357 45226
45270 45351 45223 45240 45220 45235 45241 45219 45189 45173 45198 45202 45368 45352 45363
45304 45300 45274 45278 45241 45236 45225 45225 45186 45186 45206 45365 45367 45355 45364
45246 45279 45253 45255 45263 45307 45222 45300 45318 45186 45200 45201 45356 45355 45348
45219 45212 45227 45257 45231 45289 45235 45298 45317 45184 45197 45322 45368 45365 45355
45345 45282 45242 45274 45341 45175 45189 45298 45317 45188 45225 45360 45346 45356 45366
45216 45289 45363 45246 45233 45345 45289 45223 45357 45183 45244 45356 45354 45363 45340
45343 45293 45262 45237 45255 45340 45176 45343 45357 45177 45240 45191 45356 45366 45363
45290 45279 45223 45232 45235 45312 45221 45344 45357 45191 45238 45195 45357 45348 45347
45216 45225 45340 45248 45215 45310 45248 45305 45317 45186 45242 45318 45355 45363 45363
45247 45307 45264 45244 45251 45299 45182 45295 45319 45186 45254 45185 45343 45362 45363
45252 45309 45234 45333 45247 45293 45224 45300 45318 45210 45340 45366 45353 45356 45363
45345 45302 45256 45244 45254 45216 45223 45301 45245 45193 45214 45187 45367 45355 45339
45227 45158 45262 45247 45234 45178 45235 45295 45317 45180 45240 45319 45355 45340 45340
45221 45258 45265 45247 45233 45308 45187 45301 45317 45189 45236 45318 45362 45362 45353
45347 45348 45348 45240 45256 45312 45222 45313 45318 45179 45212 45319 45354 45363 45339

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 45174 bytes 100%
1,000 45165 bytes -9 bytes 100%
10,000 45162 bytes -3 bytes 100%
100,000 45158 bytes -4 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
45384 bytes +226 bytes (+0.50%) +34 bytes
45391 bytes +233 bytes (+0.52%) +41 bytes
45385 bytes +227 bytes (+0.50%) +35 bytes
45388 bytes +230 bytes (+0.51%) +38 bytes
45425 bytes +267 bytes (+0.59%) +75 bytes
45433 bytes +275 bytes (+0.61%) +83 bytes
45404 bytes +246 bytes (+0.54%) +54 bytes
45350 bytes +192 bytes (+0.43%)
45356 bytes +198 bytes (+0.44%) +6 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 36269 bytes -8889 bytes (-19.68%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 38378 bytes -6780 bytes (-15.01%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 38887 bytes -6271 bytes (-13.89%)
Brotli (Wikipedia) brotli brotli -q 11 40883 bytes -4275 bytes (-9.47%)
LZMA2 (Wikipedia) xz xz -9 41628 bytes -3530 bytes (-7.82%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 43434 bytes -1724 bytes (-3.82%)
Zstandard (Wikipedia) zstd zstd -19 43581 bytes -1577 bytes (-3.49%)

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.