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

After GZIP compression these minified files vary in size:
Boot
  58754 bytes (57.4k)
CDN
jsdelivr
  58754 bytes (57.4k)
CDN
cdnjs
  51819 bytes (50.6k)
CDN
unpkg
  51536 bytes (50.3k)
CDN
gzip -6 (default)
  51448 bytes (50.2k)
local copy
gzip -9
  51287 bytes (50.1k)
local copy
zultra
  49599 bytes (48.4k)
local copy
libdeflate -12
  49597 bytes (48.4k)
local copy
7zip -mx=9 -tgzip
  49540 bytes (48.4k)
local copy
pigz -11 -n
  49338 bytes (48.2k)
local copy
kzip -s0 -rn -b8
  49309 bytes (48.2k)
local copy
Zopfli
  49254 bytes (48.1k)
local copy
Zopfli (defluff)
  49253 bytes (48.1k)
local copy

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

You will automatically get the smallest D3 3.4.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 2282 bytes by using my D3 3.4.10 Zopfli version instead of the best available CDN (4.63% smaller than unpkg, 49254 vs. 51536 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 --bsr23 --lazy --ohh

(found December 22, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 64  --mls64
block splitting recursion 23  --bsr23
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 (49253 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.4.10/d3.min.js --location | md5sum
a3a3ed087687efb5717c473625aca768  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.4.10.min.zopfli.js.gz | md5sum
a3a3ed087687efb5717c473625aca768  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/mbostock/d3/v3.4.10/d3.min.js --location | sha1sum
894dc83744ac311874626e85a990fa9851163ef7  -
curl --silent --compressed https://minime.stephan-brumme.com/files/d3/d3-3.4.10.min.zopfli.js.gz | sha1sum
894dc83744ac311874626e85a990fa9851163ef7  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 58754 bytes a3a3ed087687efb5717c473625aca768 (invalid)
jsdelivr 58754 bytes a3a3ed087687efb5717c473625aca768 (invalid)
cdnjs 51819 bytes a3a3ed087687efb5717c473625aca768 (invalid)
unpkg 51536 bytes a3a3ed087687efb5717c473625aca768 July 11, 2016 @ 16:31

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
49254 bytes -5 bytes zopfli --i100000 --mls64 --bsr23 --lazy --ohh December 22, 2015 @ 14:04
49259 bytes -1 byte zopfli --i10000 --mls64 --bsr23 --lazy --ohh November 23, 2015 @ 18:00
49260 bytes -3 bytes zopfli --i10000 --mls512 --bsr14 --lazy --ohh November 23, 2015 @ 17:55
49263 bytes -8 bytes zopfli --i10000 --mls256 --bsr7 --lazy --ohh October 14, 2015 @ 00:33
49271 bytes -7 bytes zopfli --i1000 --mls512 --bsr14 --lazy --ohh September 19, 2015 @ 06:51
49278 bytes -3 bytes zopfli --i1000 --mls256 --bsr20 --lazy --ohh September 19, 2015 @ 06:49
49281 bytes -1 byte zopfli --i1000 --mls64 --bsr15 --lazy --ohh September 19, 2015 @ 06:40
49282 bytes -4 bytes zopfli --i1000 --mls64 --bsr4 --lazy --ohh September 19, 2015 @ 06:37
49286 bytes -7 bytes zopfli --i1000 --mls32 --bsr13 --lazy --ohh September 19, 2015 @ 06:34
49293 bytes zopfli --i100 --mls32 --bsr13 --lazy --ohh September 18, 2015 @ 19:48

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 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
49414 49456 49416 49454 49461 49461 49386 49430 49440 49420 49501 49513 49515 49384 49516
49297 49301 49306 49295 49323 49270 49277 49291 49295 49364 49368 49380 49501 49382 49506
49299 49296 49279 49306 49328 49310 49319 49275 49274 49351 49383 49370 49501 49369 49501
49285 49360 49310 49324 49340 49275 49343 49263 49296 49362 49362 49364 49499 49370 49343
49283 49320 49309 49412 49296 49341 49342 49363 49315 49358 49367 49368 49502 49369 49368
49279 49422 49309 49414 49295 49319 49331 49270 49274 49362 49352 49518 49500 49364 49356
49295 49275 49293 49314 49294 49318 49359 49278 49284 49357 49355 49351 49501 49366 49361
49292 49348 49310 49295 49293 49340 49351 49285 49274 49356 49367 49352 49500 49373 49307
49283 49278 49292 49305 49293 49347 49326 49276 49278 49361 49356 49357 49500 49348 49367
49294 49334 49308 49348 49280 49304 49320 49266 49281 49361 49347 49351 49500 49348 49354
49302 49314 49290 49299 49297 49313 49325 49269 49255 49348 49353 49371 49504 49372 49291
49321 49306 49295 49311 49293 49273 49329 49277 49282 49351 49351 49365 49499 49365 49349
49286 49337 49291 49306 49400 49314 49354 49265 49278 49349 49349 49351 49499 49371 49358
49302 49292 49289 49303 49319 49309 49288 49283 49274 49348 49353 49364 49499 49363 49288
49400 49399 49290 49314 49398 49403 49285 49362 49303 49354 49344 49373 49501 49366 49312
49291 49399 49312 49294 49288 49340 49284 49353 49265 49360 49346 49364 49501 49345 49362
49308 49293 49308 49318 49289 49302 49323 49270 49277 49358 49346 49361 49501 49349 49299
49402 49396 49316 49303 49323 49274 49325 49265 49269 49357 49346 49365 49500 49361 49294
49255 49283 49284 49312 49283 49268 49291 49256 49293 49350 49342 49357 49499 49362 49294
49280 49397 49310 49298 49400 49254 49325 49274 49275 49359 49347 49357 49498 49365 49358
49292 49316 49307 49313 49292 49314 49327 49277 49315 49357 49349 49355 49500 49362 49359
49304 49298 49293 49314 49287 49349 49328 49270 49274 49362 49348 49365 49500 49347 49346
49294 49302 49304 49298 49295 49351 49282 49280 49288 49361 49368 49363 49500 49352 49342

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 49289 bytes 100%
1,000 49271 bytes -18 bytes 100%
10,000 49259 bytes -12 bytes 100%
100,000 49254 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
49539 bytes +285 bytes (+0.58%) +230 bytes
49535 bytes +281 bytes (+0.57%) +226 bytes
49524 bytes +270 bytes (+0.55%) +215 bytes
49465 bytes +211 bytes (+0.43%) +156 bytes
49416 bytes +162 bytes (+0.33%) +107 bytes
49421 bytes +167 bytes (+0.34%) +112 bytes
49323 bytes +69 bytes (+0.14%) +14 bytes
49338 bytes +84 bytes (+0.17%) +29 bytes
49309 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 39295 bytes -9959 bytes (-20.22%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41708 bytes -7546 bytes (-15.32%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42614 bytes -6640 bytes (-13.48%)
Brotli (Wikipedia) brotli brotli -q 11 44516 bytes -4738 bytes (-9.62%)
LZMA2 (Wikipedia) xz xz -9 45212 bytes -4042 bytes (-8.21%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46997 bytes -2257 bytes (-4.58%)
Zstandard (Wikipedia) zstd zstd -19 47585 bytes -1669 bytes (-3.39%)

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.