Choose a version:
16% The original file has 455457 bytes (444.8k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 74921 bytes (73.2k, 16%).

After GZIP compression these minified files vary in size:
Boot
  32211 bytes (31.5k)
CDN
Baidu
  28607 bytes (27.9k)
CDN
cdnjs
  28529 bytes (27.9k)
CDN
gzip -6 (default)
  28384 bytes (27.7k)
local copy
gzip -9
  28322 bytes (27.7k)
local copy
libdeflate -12
  27468 bytes (26.8k)
local copy
7zip -mx=9 -tgzip
  27460 bytes (26.8k)
local copy
kzip -s0 -rn -b1
  27421 bytes (26.8k)
local copy
zultra
  27406 bytes (26.8k)
local copy
pigz -11 -n
  27387 bytes (26.7k)
local copy
Zopfli
  27375 bytes (26.7k)
local copy

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

You will automatically get the smallest AngularJS 0.10.6 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 1154 bytes by using my AngularJS 0.10.6 Zopfli version instead of the best available CDN (4.22% smaller than cdnjs, 27375 vs. 28529 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 --mls512 --bsr9 --lazy --ohh

(found November 26, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 512  --mls512
block splitting recursion 9  --bsr9
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://code.angularjs.org/0.10.6/angular-0.10.6.min.js --location | md5sum
fa24c1445f1b9adbeb5049167b23f8f6  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-0.10.6.min.zopfli.js.gz | md5sum
fa24c1445f1b9adbeb5049167b23f8f6  -

SHA1:
curl --silent --compressed https://code.angularjs.org/0.10.6/angular-0.10.6.min.js --location | sha1sum
a93648760b2d3dd4ed672232b2d657cdcbd6a336  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-0.10.6.min.zopfli.js.gz | sha1sum
a93648760b2d3dd4ed672232b2d657cdcbd6a336  -

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 32211 bytes fa24c1445f1b9adbeb5049167b23f8f6 March 18, 2015 @ 10:01
cdnjs 28529 bytes fa24c1445f1b9adbeb5049167b23f8f6 January 24, 2014 @ 03:45

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 28607 bytes 8b3ded08444084fab06a34c8676c532e only whitespaces differ June 5, 2014 @ 10:05

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

Other Versions

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

1.8.2, 1.8.1, 1.8.0,
1.7.9, 1.7.8, 1.7.7, 1.7.6, 1.7.5, 1.7.4, 1.7.3, 1.7.2, 1.7.1, 1.7.0,
1.6.10, 1.6.9, 1.6.8, 1.6.7, 1.6.6, 1.6.5, 1.6.4, 1.6.3, 1.6.2, 1.6.1, 1.6.0,
1.5.11, 1.5.10, 1.5.9, 1.5.8, 1.5.7, 1.5.6, 1.5.5, 1.5.4, 1.5.3, 1.5.2, 1.5.1, 1.5.0,
1.4.14, 1.4.13, 1.4.12, 1.4.11, 1.4.10, 1.4.9, 1.4.8, 1.4.7, 1.4.6, 1.4.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4.0,
1.3.20, 1.3.19, 1.3.18, 1.3.17, 1.3.16, 1.3.15, 1.3.14, 1.3.13, 1.3.12, 1.3.11, 1.3.10, 1.3.9, 1.3.8, 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.32, 1.2.31, 1.2.30, 1.2.29, 1.2.28, 1.2.27, 1.2.26, 1.2.25, 1.2.24, 1.2.23, 1.2.22, 1.2.21, 1.2.20, 1.2.19, 1.2.18, 1.2.17, 1.2.16, 1.2.15, 1.2.14, 1.2.13, 1.2.12, 1.2.11, 1.2.10, 1.2.9, 1.2.8, 1.2.7, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0,
1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0,
1.0.8, 1.0.7, 1.0.6, 1.0.5, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0,
0.10.6, 0.10.5, 0.10.4, 0.10.3, 0.10.2, 0.10.1, 0.10.0,
0.9.19, 0.9.18, 0.9.17, 0.9.16, 0.9.15, 0.9.14, 0.9.13, 0.9.12, 0.9.11, 0.9.10, 0.9.9, 0.9.8, 0.9.7, 0.9.6, 0.9.5, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0

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

Changelog

Best Zopfli parameters so far:
Size Improvement Parameters Found
27375 bytes -1 byte zopfli --i100000 --mls512 --bsr9 --lazy --ohh November 26, 2015 @ 14:27
27376 bytes -2 bytes zopfli --i10000 --mls512 --bsr9 --lazy --ohh September 10, 2015 @ 10:08
27378 bytes -3 bytes zopfli --i1000 --mls512 --bsr9 --lazy --ohh September 7, 2015 @ 22:39
27381 bytes zopfli --i100 --mls512 --bsr9 --lazy --ohh September 7, 2015 @ 16:16

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 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
27386 27387 27387 27387 27388 27387 27387 27387 27389 27391 27392 27392 27390 27388 27387
27378 27379 27378 27378 27377 27386 27384 27383 27383 27383 27383 27382 27385 27388 27386
27385 27384 27377 27377 27385 27378 27384 27383 27383 27384 27383 27385 27388 27389 27387
27384 27381 27383 27383 27384 27384 27384 27383 27375 27383 27382 27377 27384 27390 27389
27383 27383 27383 27383 27377 27383 27384 27384 27383 27383 27381 27381 27384 27384 27384
27377 27378 27375 27377 27377 27383 27385 27375 27375 27383 27384 27383 27384 27388 27386
27378 27378 27375 27377 27378 27377 27377 27375 27383 27384 27379 27384 27388 27390 27384
27382 27377 27377 27377 27377 27377 27377 27378 27375 27383 27383 27383 27383 27388 27384
27385 27379 27384 27384 27384 27383 27384 27384 27383 27383 27383 27383 27387 27388 27390
27383 27375 27377 27375 27377 27377 27383 27375 27383 27384 27381 27383 27389 27387 27384
27383 27377 27384 27375 27377 27384 27383 27377 27383 27384 27383 27379 27384 27388 27390
27384 27378 27377 27377 27384 27384 27383 27377 27383 27384 27375 27379 27387 27388 27390
27383 27377 27383 27377 27377 27378 27377 27375 27388 27383 27383 27384 27387 27387 27389
27382 27378 27383 27377 27375 27377 27383 27384 27375 27376 27382 27384 27383 27388 27388
27380 27378 27383 27377 27377 27383 27377 27377 27375 27382 27383 27383 27383 27387 27387
27375 27377 27383 27375 27384 27383 27383 27375 27377 27375 27384 27381 27385 27388 27387
27384 27375 27383 27377 27384 27384 27383 27377 27377 27383 27382 27382 27387 27389 27384
27375 27383 27383 27377 27384 27375 27384 27384 27377 27375 27384 27383 27386 27387 27387
27375 27377 27384 27377 27377 27384 27384 27377 27375 27383 27381 27385 27384 27390 27389
27383 27377 27383 27377 27377 27375 27377 27377 27376 27384 27382 27384 27387 27388 27383
27384 27378 27383 27384 27384 27383 27384 27383 27383 27376 27382 27383 27387 27387 27389
27384 27377 27383 27377 27377 27375 27377 27377 27377 27384 27383 27384 27377 27388 27384
27384 27377 27383 27383 27384 27375 27383 27384 27375 27375 27382 27384 27384 27388 27389

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 27380 bytes 100%
1,000 27377 bytes -3 bytes 100%
10,000 27376 bytes -1 byte 100%
100,000 27375 bytes -1 byte 9.86%
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
27421 bytes +46 bytes (+0.17%)
27421 bytes +46 bytes (+0.17%)
27433 bytes +58 bytes (+0.21%) +12 bytes
27453 bytes +78 bytes (+0.28%) +32 bytes
27483 bytes +108 bytes (+0.39%) +62 bytes
27479 bytes +104 bytes (+0.38%) +58 bytes
27522 bytes +147 bytes (+0.54%) +101 bytes
27560 bytes +185 bytes (+0.68%) +139 bytes
27576 bytes +201 bytes (+0.73%) +155 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 23039 bytes -4336 bytes (-15.84%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 23518 bytes -3857 bytes (-14.09%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 24310 bytes -3065 bytes (-11.20%)
Brotli (Wikipedia) brotli brotli -q 11 25267 bytes -2108 bytes (-7.70%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 26150 bytes -1225 bytes (-4.47%)
LZMA2 (Wikipedia) xz xz -9 26468 bytes -907 bytes (-3.31%)
Zstandard (Wikipedia) zstd zstd -19 27084 bytes -291 bytes (-1.06%)

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.