Choose a version:
13% The original file has 1210835 bytes (1,182.5k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 162536 bytes (158.7k, 13%).

After GZIP compression these minified files vary in size:
Boot
  65901 bytes (64.4k)
CDN, direct link
cdnjs
  57569 bytes (56.2k)
CDN, direct link
unpkg
  57166 bytes (55.8k)
CDN, direct link
gzip -6 (default)
  57161 bytes (55.8k)
local copy
Google
  57127 bytes (55.8k)
CDN, direct link
gzip -9
  57055 bytes (55.7k)
local copy
7zip -mx=9 -tgzip
  55362 bytes (54.1k)
local copy
kzip -s0 -rn -b8
  55319 bytes (54.0k)
local copy
libdeflate -12
  55309 bytes (54.0k)
local copy
pigz -11 -n
  55260 bytes (54.0k)
local copy
Zopfli
  55195 bytes (53.9k)
local copy
Zopfli (defluff)
  55194 bytes (53.9k)
local copy

perma-link to the smallest file on my server:
http://minime.stephan-brumme.com/files/angularjs/angular-1.5.9.min.js

You will automatically get the smallest AngularJS 1.5.9 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 1932 bytes by using my AngularJS 1.5.9 Zopfli version instead of the best available CDN (3.50% smaller than Google, 55195 vs. 57127 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 --i1000000 --mb8 --mls16384 --bsr16 --lazy --ohh

(found November 25, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 16  --bsr16
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 (55194 bytes).

Verify file integrity

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

MD5:
curl --silent --compressed https://code.angularjs.org/1.5.9/angular.min.js --location | md5sum
5cc821195b6fa4846144538a50e512e1  -
curl --silent --compressed http://minime.stephan-brumme.com/files/angularjs/angular-1.5.9.min.zopfli.js.gz | md5sum
5cc821195b6fa4846144538a50e512e1  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 65901 bytes 5cc821195b6fa4846144538a50e512e1 November 28, 2016 @ 17:03
cdnjs 57569 bytes 5cc821195b6fa4846144538a50e512e1 November 26, 2016 @ 12:02
unpkg 57166 bytes 5cc821195b6fa4846144538a50e512e1 November 25, 2016 @ 10:43
Google 57127 bytes 5cc821195b6fa4846144538a50e512e1 November 25, 2016 @ 08:07

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

Other Versions

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

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
55195 bytes -3 bytes zopfli --i1000000 --mls16384 --bsr16 --lazy --ohh November 25, 2016 @ 21:43
55198 bytes -5 bytes zopfli --i100000 --mls16384 --bsr16 --lazy --ohh November 25, 2016 @ 11:50
55203 bytes -3 bytes zopfli --i10000 --mls16384 --bsr16 --lazy --ohh November 25, 2016 @ 10:58
55206 bytes -28 bytes zopfli --i1000 --mls16384 --bsr16 --lazy --ohh November 25, 2016 @ 10:52
55234 bytes -12 bytes zopfli --i1000 --mls2048 --bsr40 --lazy --ohh November 25, 2016 @ 10:52
55246 bytes zopfli --i100 --mls2048 --bsr17 --lazy --ohh November 25, 2016 @ 10:47

If there are multiple parameter sets yielding the same compressed size, only the first one found is shown.

Most recent activity on January 25, 2017 @ 15:23.

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
55268 55250 55250 55250 55251 55251 55243 55251 55251 55248 55255 55226 55237 55229 55251
55241 55253 55245 55246 55244 55241 55241 55232 55232 55232 55233 55228 55231 55242 55242
55245 55244 55243 55243 55238 55239 55242 55232 55233 55231 55241 55218 55232 55242 55237
55254 55257 55254 55252 55235 55244 55217 55232 55240 55232 55240 55217 55231 55242 55239
55242 55253 55242 55240 55226 55235 55241 55231 55235 55221 55239 55217 55226 55223 55232
55245 55244 55244 55245 55245 55244 55227 55232 55218 55231 55239 55219 55217 55246 55242
55245 55241 55243 55242 55241 55241 55237 55226 55221 55233 55226 55218 55231 55242 55239
55244 55244 55246 55248 55232 55235 55238 55231 55218 55233 55230 55221 55231 55242 55237
55246 55257 55254 55247 55246 55235 55221 55232 55218 55231 55244 55218 55231 55240 55231
55248 55246 55247 55253 55234 55240 55227 55239 55218 55233 55228 55218 55231 55227 55240
55241 55243 55242 55247 55238 55242 55244 55232 55218 55232 55229 55221 55218 55242 55239
55250 55253 55242 55248 55239 55242 55229 55234 55218 55233 55227 55220 55231 55231 55239
55244 55243 55243 55243 55238 55227 55237 55244 55218 55231 55227 55218 55231 55195 55230
55245 55247 55245 55239 55239 55235 55235 55233 55218 55231 55227 55219 55231 55228 55238
55244 55247 55242 55239 55240 55241 55228 55231 55218 55232 55228 55218 55231 55242 55237
55249 55249 55242 55248 55238 55241 55240 55231 55219 55233 55227 55221 55231 55240 55238
55246 55245 55245 55239 55226 55234 55241 55235 55217 55231 55228 55222 55231 55242 55239
55247 55248 55247 55242 55237 55240 55248 55232 55218 55233 55227 55221 55231 55241 55237
55244 55244 55252 55241 55241 55241 55240 55226 55218 55231 55227 55217 55231 55242 55238
55243 55243 55242 55242 55239 55238 55237 55232 55232 55231 55227 55218 55231 55235 55228
55243 55247 55251 55243 55238 55241 55227 55232 55232 55239 55243 55231 55231 55231 55239
55240 55249 55239 55236 55240 55237 55233 55232 55227 55233 55228 55221 55231 55240 55239
55241 55241 55237 55238 55222 55231 55222 55231 55216 55233 55227 55218 55231 55236 55239

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 55246 bytes 100%
1,000 55206 bytes -40 bytes 100%
10,000 55203 bytes -3 bytes 100%
100,000 55198 bytes -5 bytes 9.28%
1,000,000 55195 bytes -3 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
55339 bytes +144 bytes (+0.26%) +20 bytes
55330 bytes +135 bytes (+0.24%) +11 bytes
55369 bytes +174 bytes (+0.32%) +50 bytes
55357 bytes +162 bytes (+0.29%) +38 bytes
55368 bytes +173 bytes (+0.31%) +49 bytes
55374 bytes +179 bytes (+0.32%) +55 bytes
55375 bytes +180 bytes (+0.33%) +56 bytes
55398 bytes +203 bytes (+0.37%) +79 bytes
55319 bytes +124 bytes (+0.22%)

Non-DEFLATE Algorithms

Archivers based on completely different compression algorithms often produce superior results.
Unfortunately, browsers only support gzip compression at the moment.
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 42788 bytes -12407 bytes (-22.48%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 45202 bytes -9993 bytes (-18.10%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 46810 bytes -8385 bytes (-15.19%)
Brotli (Wikipedia) brotli brotli -q 11 50211 bytes -4984 bytes (-9.03%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 50984 bytes -4211 bytes (-7.63%)
LZMA2 (Wikipedia) xz xz -9 51712 bytes -3483 bytes (-6.31%)
ZSTD (Wikipedia) zstd zstd -19 53211 bytes -1984 bytes (-3.59%)

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 2017.
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