Choose a version:
53% The original file has 174048 bytes (170.0k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 91599 bytes (89.5k, 53%).

After GZIP compression these minified files vary in size:
Boot
  23891 bytes (23.3k)
CDN
gzip -6 (default)
  23869 bytes (23.3k)
local copy
gzip -9
  23768 bytes (23.2k)
local copy
libdeflate -12
  22956 bytes (22.4k)
local copy
7zip -mx=9 -tgzip
  22900 bytes (22.4k)
local copy
zultra
  22892 bytes (22.4k)
local copy
kzip -s0 -rn -b0
  22858 bytes (22.3k)
local copy
pigz -11 -n
  22856 bytes (22.3k)
local copy
Zopfli
  22840 bytes (22.3k)
local copy
cdnjs
  20264 bytes (19.8k)
CDN

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

You will automatically get the smallest Socket.IO 1.3.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

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 --i10000 --mb8 --mls8 --bsr19 --lazy --ohh

(found June 29, 2016)
Description Value Parameter
iterations 10000  --i10000
maximum blocks 8  --mb8
maximum length score 8  --mls8
block splitting recursion 19  --bsr19
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://raw.githubusercontent.com/socketio/socket.io-client/1.3.7/socket.io.min.js --location | md5sum
037dade50d7be057b0e797d9104cc88c  -
curl --silent --compressed https://minime.stephan-brumme.com/files/socket.io/socket.io-1.3.7.min.zopfli.js.gz | md5sum
037dade50d7be057b0e797d9104cc88c  -

SHA1:
curl --silent --compressed https://raw.githubusercontent.com/socketio/socket.io-client/1.3.7/socket.io.min.js --location | sha1sum
cc4ef607b3fa437dab6f2475e8b79a2c68a99395  -
curl --silent --compressed https://minime.stephan-brumme.com/files/socket.io/socket.io-1.3.7.min.zopfli.js.gz | sha1sum
cc4ef607b3fa437dab6f2475e8b79a2c68a99395  -

CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Boot 23891 bytes 9fec62f1433124d05ff8381f367e9f5c < !function(e){if("object"==typeof exports&&"undefined"!=typ [...]
< this.query=this.query||{};if(!callbacks){if(!global.___eio [...]
< }}function createByte(codePoint,shift){return stringFromCh [...]
> !function(t){if("object"==typeof exports&&"undefined"!=typ [...]
> (!c||e)&&(this.supportsBinary=!1),r.call(this,t)}var r=t(" [...]
> U()}return"$"},D=function(t){var e,n;if("$"==t&&U(),"strin [...]
(invalid)
cdnjs 20264 bytes 9fec62f1433124d05ff8381f367e9f5c < !function(e){if("object"==typeof exports&&"undefined"!=typ [...]
< this.query=this.query||{};if(!callbacks){if(!global.___eio [...]
< }}function createByte(codePoint,shift){return stringFromCh [...]
> !function(t){if("object"==typeof exports&&"undefined"!=typ [...]
> (!c||e)&&(this.supportsBinary=!1),r.call(this,t)}var r=t(" [...]
> U()}return"$"},D=function(t){var e,n;if("$"==t&&U(),"strin [...]
(invalid)

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

Other Versions

Available Socket.IO versions at minime.stephan-brumme.com:

4.5.4, 4.5.3, 4.5.2, 4.5.1, 4.5.0, 4.4.1, 4.4.0, 4.3.2, 4.3.1, 4.3.0, 4.2.0, 4.1.3, 4.1.2, 4.1.1, 4.1.0, 4.0.2, 4.0.1, 4.0.0,
3.1.2, 3.1.1, 3.1.0, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0,
2.4.0, 2.3.1, 2.3.0, 2.2.0, 2.1.1, 2.1.0, 2.0.4, 2.0.3, 2.0.2, 2.0.1, 2.0.0,
1.7.4, 1.7.2, 1.7.1, 1.7.0, 1.6.0, 1.5.0, 1.4.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4.0, 1.3.7, 1.3.6, 1.3.5, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0, 1.0.6, 1.0.5, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0

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

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
22840 bytes -1 byte zopfli --i10000 --mls8 --bsr19 --lazy --ohh June 29, 2016 @ 15:46
22841 bytes -1 byte zopfli --i1000 --mls8 --bsr19 --lazy --ohh June 29, 2016 @ 15:26
22842 bytes zopfli --i100 --mls8 --bsr19 --lazy --ohh June 29, 2016 @ 13:34

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
22846 22846 22872 22854 22855 22856 22847 22854 22842 22843 22852 22854 22855 22859 22855
22859 22871 22871 22873 22855 22872 22846 22845 22844 22843 22854 22853 22854 22856 22857
22843 22846 22841 22849 22844 22842 22844 22843 22844 22854 22855 22855 22856 22854 22856
22849 22842 22849 22849 22852 22841 22841 22841 22843 22842 22855 22852 22852 22853 22853
22847 22843 22843 22848 22850 22850 22842 22842 22842 22841 22853 22852 22852 22856 22856
22843 22842 22841 22842 22841 22842 22841 22842 22841 22842 22856 22854 22854 22853 22858
22849 22851 22851 22850 22850 22841 22842 22840 22842 22845 22855 22854 22854 22853 22853
22856 22853 22851 22850 22850 22850 22847 22848 22843 22841 22857 22852 22853 22853 22858
22850 22842 22851 22848 22843 22850 22843 22842 22842 22842 22856 22858 22857 22853 22853
22842 22843 22841 22841 22841 22843 22844 22841 22842 22842 22855 22856 22853 22853 22856
22843 22842 22842 22847 22842 22841 22842 22842 22844 22841 22855 22851 22853 22852 22858
22849 22849 22850 22842 22852 22841 22842 22842 22843 22841 22853 22855 22852 22853 22855
22843 22851 22852 22850 22850 22851 22848 22852 22842 22841 22856 22854 22857 22852 22858
22851 22843 22852 22852 22852 22849 22841 22841 22843 22842 22855 22851 22852 22853 22858
22843 22842 22841 22846 22842 22841 22842 22842 22841 22841 22856 22853 22854 22853 22858
22842 22841 22840 22847 22842 22843 22841 22842 22842 22841 22856 22856 22855 22853 22855
22843 22841 22851 22848 22842 22850 22842 22841 22844 22841 22853 22851 22857 22856 22858
22850 22843 22847 22852 22850 22851 22842 22843 22842 22842 22856 22855 22852 22854 22858
22845 22841 22842 22850 22851 22843 22841 22841 22842 22842 22855 22855 22856 22856 22858
22843 22842 22842 22846 22842 22841 22843 22841 22842 22856 22854 22851 22853 22853 22858
22842 22843 22842 22843 22841 22850 22842 22842 22842 22841 22854 22854 22853 22853 22856
22842 22842 22851 22850 22841 22850 22842 22842 22843 22841 22856 22854 22857 22855 22855
22842 22843 22842 22841 22842 22843 22842 22842 22842 22843 22855 22855 22856 22855 22854

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 22842 bytes 100%
1,000 22841 bytes -1 byte 100%
10,000 22840 bytes -1 byte 100%
100,000 22840 bytes 0.58%
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
22858 bytes +18 bytes (+0.08%)
22873 bytes +33 bytes (+0.14%) +15 bytes
22860 bytes +20 bytes (+0.09%) +2 bytes
22901 bytes +61 bytes (+0.27%) +43 bytes
22934 bytes +94 bytes (+0.41%) +76 bytes
22967 bytes +127 bytes (+0.56%) +109 bytes
23004 bytes +164 bytes (+0.72%) +146 bytes
23033 bytes +193 bytes (+0.85%) +175 bytes
23038 bytes +198 bytes (+0.87%) +180 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 18457 bytes -4383 bytes (-19.19%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 19499 bytes -3341 bytes (-14.63%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 20366 bytes -2474 bytes (-10.83%)
Brotli (Wikipedia) brotli brotli -q 11 21514 bytes -1326 bytes (-5.81%)
LZMA2 (Wikipedia) xz xz -9 22292 bytes -548 bytes (-2.40%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 22539 bytes -301 bytes (-1.32%)
Zstandard (Wikipedia) zstd zstd -19 22629 bytes -211 bytes (-0.92%)

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.