Choose a version:
20% The original file has 292521 bytes (285.7k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 58737 bytes (57.4k, 20%).

After GZIP compression these minified files vary in size:
Boot
  26718 bytes (26.1k)
CDN
Baidu
  24154 bytes (23.6k)
CDN
cdnjs
  24090 bytes (23.5k)
CDN
gzip -6 (default)
  24014 bytes (23.5k)
local copy
gzip -9
  23981 bytes (23.4k)
local copy
libdeflate -12
  23392 bytes (22.8k)
local copy
7zip -mx=9 -tgzip
  23108 bytes (22.6k)
local copy
zultra
  23052 bytes (22.5k)
local copy
kzip -s0 -rn -b3
  23014 bytes (22.5k)
local copy
pigz -11 -n
  23007 bytes (22.5k)
local copy
Zopfli
  22981 bytes (22.4k)
local copy
Zopfli (defluff)
  22980 bytes (22.4k)
local copy

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

You will automatically get the smallest AngularJS 0.9.5 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 1109 bytes by using my AngularJS 0.9.5 Zopfli version instead of the best available CDN (4.83% smaller than cdnjs, 22981 vs. 24090 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 --mls256 --bsr11 --lazy --ohh

(found February 4, 2016)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 256  --mls256
block splitting recursion 11  --bsr11
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 (22980 bytes).

Verify file integrity

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

MD5:
curl --silent --compressed https://code.angularjs.org/0.9.5/angular-0.9.5.min.js --location | md5sum
92cc47417e306ba6e4daf095fa2d9464  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-0.9.5.min.zopfli.js.gz | md5sum
92cc47417e306ba6e4daf095fa2d9464  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 26718 bytes 92cc47417e306ba6e4daf095fa2d9464 March 18, 2015 @ 10:05
cdnjs 24090 bytes 92cc47417e306ba6e4daf095fa2d9464 March 28, 2014 @ 14:15

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Baidu 24154 bytes b6e0aa201ada7b9bfbb84295e8688b61 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
22981 bytes -2 bytes zopfli --i100000 --mls256 --bsr11 --lazy --ohh February 4, 2016 @ 23:17
22983 bytes -2 bytes zopfli --i10000 --mls256 --bsr9 --lazy --ohh November 26, 2015 @ 10:55
22985 bytes -6 bytes zopfli --i1000 --mls256 --bsr9 --lazy --ohh September 17, 2015 @ 04:46
22991 bytes -1 byte zopfli --i1000 --mls8192 --bsr9 --lazy --ohh September 7, 2015 @ 21:42
22992 bytes -1 byte zopfli --i1000 --mls1024 --bsr16 --lazy --ohh September 7, 2015 @ 21:41
22993 bytes -1 byte zopfli --i1000 --mls512 --bsr14 --lazy --ohh September 7, 2015 @ 21:40
22994 bytes -4 bytes zopfli --i1000 --mls512 --bsr6 --lazy --ohh September 7, 2015 @ 21:39
22998 bytes zopfli --i100 --mls8192 --bsr9 --lazy --ohh September 7, 2015 @ 16:11

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

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
23010 23011 23011 23006 23004 23007 23009 23010 23020 23018 23025 23020 23021 23028 23030
22992 23013 22989 23017 23019 23018 23016 23013 22999 23002 23010 22999 22992 23004 23005
22994 22999 22996 23002 23004 23010 23011 22992 22991 22994 23001 23008 22996 23010 23007
23005 23003 23007 22994 22994 22995 22997 22993 22994 23004 22992 23014 23000 22998 23019
23006 23009 22992 22993 22998 23000 22995 22997 23003 22992 23000 22992 22990 23010 23011
23006 22996 22991 22994 22994 22993 22994 22981 23000 22990 23001 22991 22989 23004 23004
22999 22993 22991 22994 22993 22992 22993 22981 22991 22996 22997 22990 22989 22998 23006
22997 22997 22991 22994 22992 22991 22993 22981 22994 22997 22991 22991 22995 23002 23010
22993 22998 22993 22990 22992 22993 22993 22993 22993 22994 22997 22993 22990 22998 23008
23000 22996 22991 22991 22990 22991 22993 22992 22998 22999 22995 22992 22990 23006 23012
22995 22997 22991 22993 22990 22992 22997 22996 22992 22993 22991 22992 23008 22999 23007
23005 23004 22999 22991 22995 22994 22992 22993 22994 22998 22991 22992 22989 23001 23006
22998 22998 22991 22994 22991 22992 22995 22992 22994 22990 22989 22995 22990 22999 23005
22999 22991 22991 22993 22993 22993 22994 22995 22993 22999 22993 22998 22990 22999 23021
22998 22998 23007 22995 22994 22995 22994 22995 22995 22992 22992 22993 22992 22999 23012
23001 22999 22992 22993 22990 22993 22995 22995 22995 22997 22991 22995 22990 23001 23007
22998 22992 22991 22995 22995 22992 23000 22998 22995 22995 22992 22990 22997 23007 23015
22998 22998 22994 22994 22994 22995 22992 22982 22994 22994 22993 22990 22995 22998 23007
22994 22998 22991 22992 22992 22994 22995 22992 22995 22993 22994 22992 22999 22999 23009
23000 22996 22994 22995 22992 22993 22995 22991 22995 22993 22992 22991 22990 23004 23006
22998 22998 22991 22993 22994 22993 22994 22982 23000 22991 22990 22991 22990 22998 23006
23006 22994 22991 22992 22993 22993 22998 22993 22995 22993 22991 22992 22990 22998 23006
22999 22994 22992 22993 22991 22993 22994 22992 22994 22992 22992 22991 22990 22999 23008

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 22991 bytes 100%
1,000 22985 bytes -6 bytes 100%
10,000 22983 bytes -2 bytes 100%
100,000 22981 bytes -2 bytes 1.45%
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
23078 bytes +97 bytes (+0.42%) +64 bytes
23481 bytes +500 bytes (+2.18%) +467 bytes
23077 bytes +96 bytes (+0.42%) +63 bytes
23014 bytes +33 bytes (+0.14%)
23029 bytes +48 bytes (+0.21%) +15 bytes
23045 bytes +64 bytes (+0.28%) +31 bytes
23078 bytes +97 bytes (+0.42%) +64 bytes
23110 bytes +129 bytes (+0.56%) +96 bytes
23127 bytes +146 bytes (+0.64%) +113 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 20193 bytes -2788 bytes (-12.13%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 20723 bytes -2258 bytes (-9.83%)
Brotli (Wikipedia) brotli brotli -q 11 21329 bytes -1652 bytes (-7.19%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 21728 bytes -1253 bytes (-5.45%)
LZMA2 (Wikipedia) xz xz -9 22596 bytes -385 bytes (-1.68%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 23197 bytes +216 bytes (+0.94%)
Zstandard (Wikipedia) zstd zstd -19 23247 bytes +266 bytes (+1.16%)

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.