Choose a version:
21% The original file has 289595 bytes (282.8k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 60354 bytes (58.9k, 21%).

After GZIP compression these minified files vary in size:
Boot
  25627 bytes (25.0k)
CDN
cdnjs
  22527 bytes (22.0k)
CDN
unpkg
  22380 bytes (21.9k)
CDN
gzip -6 (default)
  22359 bytes (21.8k)
local copy
gzip -9
  22329 bytes (21.8k)
local copy
jsdelivr
  22314 bytes (21.8k)
CDN
7zip -mx=9 -tgzip
  21621 bytes (21.1k)
local copy
kzip -s0 -rn -b4
  21613 bytes (21.1k)
local copy
libdeflate -12
  21607 bytes (21.1k)
local copy
pigz -11 -n
  21596 bytes (21.1k)
local copy
zultra
  21585 bytes (21.1k)
local copy
Zopfli
  21561 bytes (21.1k)
local copy

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

You will automatically get the smallest Knockout 3.4.2 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 753 bytes by using my Knockout 3.4.2 Zopfli version instead of the best available CDN (3.49% smaller than jsdelivr, 21561 vs. 22314 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 --mls2 --bsr15 --lazy --ohh

(found April 29, 2017)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 2  --mls2
block splitting recursion 15  --bsr15
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

Verify file integrity

After decompression, my uncompressed files are identical to the original ones:

MD5:
curl --silent --compressed https://knockoutjs.com/downloads/knockout-3.4.2.js --location | md5sum
e956a74c005b7a243f0884d67e60f8f3  -
curl --silent --compressed https://minime.stephan-brumme.com/files/knockout/knockout-3.4.2.min.zopfli.js.gz | md5sum
e956a74c005b7a243f0884d67e60f8f3  -

SHA1:
curl --silent --compressed https://knockoutjs.com/downloads/knockout-3.4.2.js --location | sha1sum
c4fda6eee21550785a1c89ce291a2d3072e0ed9b  -
curl --silent --compressed https://minime.stephan-brumme.com/files/knockout/knockout-3.4.2.min.zopfli.js.gz | sha1sum
c4fda6eee21550785a1c89ce291a2d3072e0ed9b  -

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 25627 bytes e956a74c005b7a243f0884d67e60f8f3 (invalid)
cdnjs 22527 bytes e956a74c005b7a243f0884d67e60f8f3 (invalid)
unpkg 22380 bytes e956a74c005b7a243f0884d67e60f8f3 April 28, 2017 @ 14:08
jsdelivr 22314 bytes e956a74c005b7a243f0884d67e60f8f3 (invalid)

Note: only the MD5 hashes are shown to keep things simple.

Other Versions

Available Knockout versions at minime.stephan-brumme.com:

3.5.1, 3.5.0,
3.4.2, 3.4.1, 3.4.0,
3.3.0,
3.2.0,
3.1.0, 3.0.0,
2.3.0,
2.2.1, 2.2.0,
2.1.0, 2.0.0,
1.2.1, 1.2.0,
1.1.2, 1.1.1, 1.1.0

The project site contains an overview how well these versions were compressed.
Other interesting projects are AngularJS, BackboneJS, Bootstrap, D3, Dojo, Ember, jQuery, lodash, React, Socket.IO, ThreeJS, UnderscoreJS and Vue.

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
21561 bytes -2 bytes zopfli --i100000 --mls2 --bsr15 --lazy --ohh April 29, 2017 @ 10:22
21563 bytes -4 bytes zopfli --i10000 --mls2 --bsr15 --lazy --ohh April 28, 2017 @ 17:05
21567 bytes -4 bytes zopfli --i1000 --mls2 --bsr15 --lazy --ohh April 28, 2017 @ 15:37
21571 bytes zopfli --i100 --mls2 --bsr15 --lazy --ohh April 28, 2017 @ 14:56

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

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
21589 21586 21586 21582 21584 21586 21586 21585 21585 21585 21584 21573 21576 21581 21576
21577 21581 21578 21580 21589 21581 21580 21583 21587 21581 21584 21571 21575 21573 21581
21578 21581 21579 21581 21581 21579 21581 21582 21582 21582 21585 21574 21573 21574 21579
21581 21578 21578 21581 21580 21578 21583 21582 21585 21581 21585 21569 21575 21577 21572
21579 21581 21579 21582 21581 21580 21582 21582 21585 21583 21584 21570 21571 21574 21570
21581 21581 21580 21582 21581 21579 21570 21583 21585 21583 21584 21576 21571 21576 21572
21579 21581 21581 21581 21580 21583 21579 21582 21583 21584 21584 21570 21571 21573 21578
21578 21580 21578 21583 21579 21580 21583 21582 21585 21584 21584 21570 21574 21580 21574
21580 21580 21580 21581 21581 21579 21582 21582 21585 21585 21585 21574 21575 21575 21578
21579 21581 21578 21582 21580 21580 21582 21582 21585 21582 21584 21570 21574 21577 21571
21578 21581 21578 21582 21578 21582 21582 21582 21585 21585 21584 21572 21571 21576 21580
21561 21582 21578 21581 21590 21579 21582 21582 21585 21582 21584 21570 21569 21576 21571
21583 21581 21581 21580 21580 21579 21584 21582 21583 21585 21584 21565 21569 21577 21573
21578 21581 21580 21581 21580 21584 21584 21582 21585 21584 21585 21570 21569 21577 21578
21579 21581 21578 21581 21581 21578 21584 21582 21585 21583 21584 21570 21574 21576 21579
21579 21581 21579 21580 21580 21582 21573 21582 21585 21584 21584 21566 21574 21583 21572
21577 21581 21579 21580 21581 21581 21582 21583 21585 21583 21584 21566 21570 21581 21577
21579 21581 21581 21582 21581 21579 21582 21582 21585 21582 21584 21570 21571 21573 21577
21581 21582 21579 21581 21580 21582 21582 21582 21583 21584 21584 21566 21574 21576 21570
21579 21581 21580 21583 21580 21578 21582 21582 21585 21582 21584 21570 21572 21577 21571
21579 21580 21581 21581 21581 21579 21585 21582 21585 21583 21584 21566 21575 21575 21578
21583 21581 21581 21582 21580 21583 21582 21582 21585 21584 21584 21569 21574 21577 21573
21582 21582 21580 21582 21581 21580 21582 21581 21585 21585 21584 21571 21570 21572 21572

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 21571 bytes 100%
1,000 21567 bytes -4 bytes 100%
10,000 21563 bytes -4 bytes 100%
100,000 21561 bytes -2 bytes 1.74%
1,000,000 21561 bytes 0.29%
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
21671 bytes +110 bytes (+0.51%) +58 bytes
21671 bytes +110 bytes (+0.51%) +58 bytes
21618 bytes +57 bytes (+0.26%) +5 bytes
21627 bytes +66 bytes (+0.31%) +14 bytes
21613 bytes +52 bytes (+0.24%)
21644 bytes +83 bytes (+0.38%) +31 bytes
21696 bytes +135 bytes (+0.63%) +83 bytes
21738 bytes +177 bytes (+0.82%) +125 bytes
21769 bytes +208 bytes (+0.96%) +156 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
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 18232 bytes -3329 bytes (-15.44%)
ZPAQ (Wikipedia) zpaq zpaq -method 69 18238 bytes -3323 bytes (-15.41%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 19553 bytes -2008 bytes (-9.31%)
Brotli (Wikipedia) brotli brotli -q 11 19867 bytes -1694 bytes (-7.86%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 20360 bytes -1201 bytes (-5.57%)
LZMA2 (Wikipedia) xz xz -9 21084 bytes -477 bytes (-2.21%)
Zstandard (Wikipedia) zstd zstd -19 21517 bytes -44 bytes (-0.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.