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

After GZIP compression these minified files vary in size:
Boot
  61033 bytes (59.6k)
CDN
cdnjs
  53625 bytes (52.4k)
CDN
jsdelivr
  53625 bytes (52.4k)
CDN
unpkg
  53625 bytes (52.4k)
CDN
gzip -6 (default)
  53499 bytes (52.2k)
local copy
gzip -9
  53362 bytes (52.1k)
local copy
libdeflate -12
  51662 bytes (50.5k)
local copy
zultra
  51623 bytes (50.4k)
local copy
7zip -mx=9 -tgzip
  51604 bytes (50.4k)
local copy
pigz -11 -n
  51341 bytes (50.1k)
local copy
kzip -s0 -rn -b8
  51316 bytes (50.1k)
local copy
Zopfli
  51261 bytes (50.1k)
local copy
Zopfli (defluff)
  51260 bytes (50.1k)
local copy

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

You will automatically get the smallest D3 3.5.11 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 2364 bytes by using my D3 3.5.11 Zopfli version instead of the best available CDN (4.61% smaller than unpkg, 51261 vs. 53625 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 --i1000000 --mb8 --mls128 --bsr7 --lazy --ohh

(found December 16, 2015)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 128  --mls128
block splitting recursion 7  --bsr7
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 (51260 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.5.11/d3.min.js --location | md5sum
a04119baf5a4c866e8e5445be4449bd5  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.5.11.min.zopfli.js.gz | md5sum
a04119baf5a4c866e8e5445be4449bd5  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 61033 bytes a04119baf5a4c866e8e5445be4449bd5 December 15, 2015 @ 16:43
cdnjs 53625 bytes a04119baf5a4c866e8e5445be4449bd5 (invalid)
jsdelivr 53625 bytes a04119baf5a4c866e8e5445be4449bd5 (invalid)
unpkg 53625 bytes a04119baf5a4c866e8e5445be4449bd5 July 11, 2016 @ 16:30

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
51261 bytes -3 bytes zopfli --i1000000 --mls128 --bsr7 --lazy --ohh December 16, 2015 @ 01:26
51264 bytes -2 bytes zopfli --i100000 --mls128 --bsr7 --lazy --ohh December 15, 2015 @ 16:29
51266 bytes -8 bytes zopfli --i10000 --mls128 --bsr7 --lazy --ohh December 15, 2015 @ 15:15
51274 bytes -8 bytes zopfli --i10000 --mls32768 --bsr9 --lazy --ohh December 15, 2015 @ 14:55
51282 bytes -7 bytes zopfli --i1000 --mls32768 --bsr9 --lazy --ohh December 15, 2015 @ 14:50
51289 bytes zopfli --i100 --mls32768 --bsr9 --lazy --ohh December 15, 2015 @ 14:45

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

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, 100,000 or 1,000,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
51420 51391 51432 51448 51407 51409 51443 51436 51433 51436 51520 51524 51410 51410 51544
51335 51301 51289 51325 51375 51322 51381 51403 51382 51390 51398 51412 51396 51390 51298
51348 51337 51328 51348 51333 51316 51322 51391 51368 51378 51379 51391 51372 51403 51287
51450 51430 51332 51368 51367 51320 51261 51374 51383 51383 51375 51399 51376 51379 51334
51355 51347 51326 51351 51455 51420 51334 51396 51372 51398 51385 51406 51542 51373 51536
51343 51331 51356 51369 51352 51363 51349 51408 51397 51385 51385 51412 51385 51371 51265
51375 51353 51456 51381 51332 51380 51357 51398 51373 51388 51525 51415 51379 51384 51394
51401 51424 51420 51340 51439 51442 51341 51407 51370 51390 51389 51389 51390 51370 51306
51314 51351 51355 51330 51287 51365 51452 51403 51388 51391 51390 51397 51378 51377 51321
51311 51347 51353 51375 51336 51315 51373 51395 51389 51390 51390 51400 51384 51380 51303
51448 51451 51449 51344 51351 51422 51348 51392 51371 51379 51392 51389 51383 51370 51371
51372 51286 51331 51464 51348 51381 51357 51390 51371 51376 51369 51387 51381 51370 51336
51391 51425 51354 51371 51381 51424 51323 51398 51372 51390 51388 51397 51379 51377 51289
51350 51362 51353 51324 51455 51380 51451 51407 51387 51389 51371 51401 51377 51377 51301
51312 51430 51316 51372 51350 51422 51346 51403 51400 51391 51390 51411 51381 51378 51339
51312 51411 51424 51375 51386 51420 51314 51402 51393 51388 51397 51397 51376 51371 51304
51374 51348 51332 51358 51349 51365 51460 51399 51394 51388 51395 51405 51376 51373 51320
51373 51353 51332 51372 51346 51379 51338 51392 51390 51382 51393 51404 51378 51371 51266
51309 51349 51360 51376 51350 51421 51342 51396 51409 51392 51395 51406 51378 51371 51292
51348 51429 51333 51380 51353 51338 51322 51396 51393 51378 51393 51390 51378 51371 51307
51321 51431 51331 51374 51385 51370 51347 51394 51393 51386 51382 51391 51380 51369 51321
51285 51357 51357 51371 51349 51342 51346 51399 51412 51389 51388 51399 51374 51371 51304
51411 51412 51359 51362 51315 51423 51319 51402 51371 51390 51396 51396 51378 51394 51299

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 51289 bytes 100%
1,000 51274 bytes -15 bytes 100%
10,000 51266 bytes -8 bytes 100%
100,000 51264 bytes -2 bytes 2.90%
1,000,000 51261 bytes -3 bytes 0.87%
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
51569 bytes +308 bytes (+0.60%) +253 bytes
51569 bytes +308 bytes (+0.60%) +253 bytes
51575 bytes +314 bytes (+0.61%) +259 bytes
51512 bytes +251 bytes (+0.49%) +196 bytes
51455 bytes +194 bytes (+0.38%) +139 bytes
51450 bytes +189 bytes (+0.37%) +134 bytes
51348 bytes +87 bytes (+0.17%) +32 bytes
51358 bytes +97 bytes (+0.19%) +42 bytes
51316 bytes +55 bytes (+0.11%)

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 40884 bytes -10377 bytes (-20.24%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 43501 bytes -7760 bytes (-15.14%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 44556 bytes -6705 bytes (-13.08%)
Brotli (Wikipedia) brotli brotli -q 11 46312 bytes -4949 bytes (-9.65%)
LZMA2 (Wikipedia) xz xz -9 47004 bytes -4257 bytes (-8.30%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 48995 bytes -2266 bytes (-4.42%)
Zstandard (Wikipedia) zstd zstd -19 49550 bytes -1711 bytes (-3.34%)

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.