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

After GZIP compression these minified files vary in size:
Google
  73203 bytes (71.5k)
CDN
gzip -6 (default)
  61105 bytes (59.7k)
local copy
unpkg
  61104 bytes (59.7k)
CDN
gzip -9
  60964 bytes (59.5k)
local copy
libdeflate -12
  59148 bytes (57.8k)
local copy
kzip -s0 -rn -b1
  59122 bytes (57.7k)
local copy
7zip -mx=9 -tgzip
  59111 bytes (57.7k)
local copy
pigz -11 -n
  59026 bytes (57.6k)
local copy
Zopfli
  58971 bytes (57.6k)
local copy
Zopfli (defluff)
  58969 bytes (57.6k)
local copy

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

You will automatically get the smallest AngularJS 1.7.3 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 2133 bytes by using my AngularJS 1.7.3 Zopfli version instead of the best available CDN (3.62% smaller than unpkg, 58971 vs. 61104 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 --mls1024 --bsr14 --lazy --ohh

(found August 10, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 1024  --mls1024
block splitting recursion 14  --bsr14
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 2 more bytes (58969 bytes).

Verify file integrity

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

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

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 61104 bytes a3635f2c02e1972150e3413d8a9656e8 (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Google 73203 bytes d5e6e78b2b52950b2588f69cedc4ac27 < (function(B){'use strict';function oe(a){if(F(a))v(a.objec [...]
< f;f=arguments[d];f="function"==typeof f?f.toString().repla [...]
< xa(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c+ [...]
< function Yb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e< [...]
< 10)}function $b(a,b){return R(Object.create(a),b)}function [...]
< ma.call(a)}function I(a){return Array.isArray(a)||a instan [...]
< se.test(ma.call(a))}function Zb(a){return!(!a||!(a.nodeNam [...]
< (b[f]=e(a[f],c));else for(f in a)sa.call(a,f)&&(b[f]=e(a[f [...]
< a.byteOffset,a.length);case "[object ArrayBuffer]":if(!a.s [...]
< var g=[],k=[];d=Wb(d)?d:NaN;if(b){if(re(b)||"[object Array [...]
[...]
September 21, 2018 @ 20:41

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

Other Versions

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

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
58971 bytes -2 bytes zopfli --i1000000 --mls1024 --bsr14 --lazy --ohh August 10, 2018 @ 21:10
58973 bytes -1 byte zopfli --i100000 --mls2048 --bsr20 --lazy --ohh August 10, 2018 @ 11:52
58974 bytes -4 bytes zopfli --i100000 --mls2048 --bsr10 --lazy --ohh August 10, 2018 @ 11:52
58978 bytes -1 byte zopfli --i10000 --mls2048 --bsr10 --lazy --ohh August 10, 2018 @ 10:52
58979 bytes -4 bytes zopfli --i10000 --mls2048 --bsr12 --lazy --ohh August 10, 2018 @ 10:36
58983 bytes -1 byte zopfli --i1000 --mls2048 --bsr12 --lazy --ohh August 10, 2018 @ 10:15
58984 bytes -2 bytes zopfli --i1000 --mls512 --bsr20 --lazy --ohh August 10, 2018 @ 10:15
58986 bytes -2 bytes zopfli --i1000 --mls512 --bsr14 --lazy --ohh August 10, 2018 @ 10:15
58988 bytes -2 bytes zopfli --i1000 --mls512 --bsr12 --lazy --ohh August 10, 2018 @ 10:15
58990 bytes zopfli --i100 --mls1024 --bsr30 --lazy --ohh August 10, 2018 @ 10:11

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

Most recent activity on September 21, 2018 @ 20:41.

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
59034 59032 59040 59040 59042 59041 59043 59003 59010 59010 59126 59026 59125 58998 59052
59034 59028 59034 59037 59020 59021 59023 59008 59012 59000 59002 59014 59010 59009 59024
59030 59031 59031 59030 59040 59027 59021 59011 59009 59008 59005 59022 59008 59006 59025
59032 59044 59026 59023 59022 59026 59008 59009 59019 58997 59021 59015 59020 59016 59024
59023 59023 59030 59017 59025 59023 59019 59008 59003 59002 59000 59018 58999 59007 59031
59023 59028 59028 59025 59024 59022 59026 59011 58994 58994 59010 59015 59006 59007 59019
59012 59016 59033 59012 59013 59011 58981 59000 58997 58994 58974 59016 59006 58998 59031
59008 59011 59031 59011 59010 59014 59013 59001 58999 58997 58997 59015 59010 59005 59032
59024 59029 59031 59027 59010 59018 58999 58998 58983 58984 58974 59015 59019 59005 59024
59014 59027 59011 59026 59016 59018 58997 58999 59000 58994 58982 59015 59007 58992 59024
59015 59013 59029 59009 59010 59012 58997 59000 58983 58971 58983 59015 58992 58985 58991
59013 59012 59017 59014 59007 59025 59013 58999 58995 58993 58982 59015 58987 58984 59031
59009 59011 59011 59035 59008 59015 59014 58999 58999 58999 58982 59015 58998 58992 58993
59011 59013 59030 59010 59011 59008 58993 58999 58992 58993 58982 59014 59008 58996 59031
59012 59030 59013 59007 59010 59018 59017 58982 58998 58995 58989 59015 58981 59005 59033
59026 59016 59016 59005 59024 58999 58998 59000 59000 58996 58991 59014 59014 59007 59020
59009 59008 59031 59021 59019 59015 58994 58998 58981 59006 58972 59015 58995 59005 59031
59011 59013 59030 59009 59011 59015 59027 58999 58983 58985 58993 59021 59010 59005 59031
59022 59023 59025 59017 59026 59007 59006 58996 58998 59007 58981 59015 59006 58996 59004
59008 59012 59014 59002 59009 58994 58994 59001 58997 58981 58981 59014 59007 59007 59033
59017 59013 59016 59004 59011 59011 59013 58995 58988 58992 58993 59022 59002 59005 59020
59019 59005 59017 59015 59011 59010 59001 58996 58999 58981 58992 59015 58994 58983 58997
59020 59021 59018 59018 59013 59012 59002 58998 58984 58996 58982 59006 59007 59005 59009

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 58990 bytes 100%
1,000 58983 bytes -7 bytes 100%
10,000 58978 bytes -5 bytes 100%
100,000 58973 bytes -5 bytes 1.16%
1,000,000 58971 bytes -2 bytes 0.58%
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
59135 bytes +164 bytes (+0.28%) +13 bytes
59122 bytes +151 bytes (+0.26%)
59135 bytes +164 bytes (+0.28%) +13 bytes
59145 bytes +174 bytes (+0.30%) +23 bytes
59142 bytes +171 bytes (+0.29%) +20 bytes
59137 bytes +166 bytes (+0.28%) +15 bytes
59152 bytes +181 bytes (+0.31%) +30 bytes
59167 bytes +196 bytes (+0.33%) +45 bytes
59184 bytes +213 bytes (+0.36%) +62 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 45531 bytes -13440 bytes (-22.79%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 48036 bytes -10935 bytes (-18.54%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 49861 bytes -9110 bytes (-15.45%)
Brotli (Wikipedia) brotli brotli -q 11 53571 bytes -5400 bytes (-9.16%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 54123 bytes -4848 bytes (-8.22%)
LZMA2 (Wikipedia) xz xz -9 55084 bytes -3887 bytes (-6.59%)
Zstandard (Wikipedia) zstd zstd -19 56520 bytes -2451 bytes (-4.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 2018.
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