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

After GZIP compression these minified files vary in size:
Google
  73208 bytes (71.5k)
CDN
Boot
  61596 bytes (60.2k)
CDN
cdnjs
  61596 bytes (60.2k)
CDN
gzip -6 (default)
  61116 bytes (59.7k)
local copy
unpkg
  61110 bytes (59.7k)
CDN
gzip -9
  60973 bytes (59.5k)
local copy
libdeflate -12
  59151 bytes (57.8k)
local copy
kzip -s0 -rn -b1
  59132 bytes (57.7k)
local copy
7zip -mx=9 -tgzip
  59110 bytes (57.7k)
local copy
zultra
  59068 bytes (57.7k)
local copy
pigz -11 -n
  59034 bytes (57.7k)
local copy
Zopfli
  58978 bytes (57.6k)
local copy
Zopfli (defluff)
  58976 bytes (57.6k)
local copy

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

You will automatically get the smallest AngularJS 1.7.4 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 2132 bytes by using my AngularJS 1.7.4 Zopfli version instead of the best available CDN (3.61% smaller than unpkg, 58978 vs. 61110 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 --mls2048 --bsr12 --lazy --ohh

(found September 8, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 2048  --mls2048
block splitting recursion 12  --bsr12
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 (58976 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.4/angular.min.js --location | md5sum
ecac443e145a7684c1de1e3d67d1765b  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-1.7.4.min.zopfli.js.gz | md5sum
ecac443e145a7684c1de1e3d67d1765b  -

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

These CDNs send you the original file:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 61596 bytes ecac443e145a7684c1de1e3d67d1765b October 24, 2018 @ 17:52
cdnjs 61596 bytes ecac443e145a7684c1de1e3d67d1765b October 24, 2018 @ 17:52
unpkg 61110 bytes ecac443e145a7684c1de1e3d67d1765b (invalid)

And some CDNs send you a different file:
CDN Size (compressed) MD5 (uncompressed) Comment / Diff Timestamp
Google 73208 bytes 12d999e28575a8bdbd2e57ead535cc5d < (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.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
58978 bytes -2 bytes zopfli --i1000000 --mls2048 --bsr12 --lazy --ohh September 8, 2018 @ 04:16
58980 bytes -5 bytes zopfli --i100000 --mls2048 --bsr12 --lazy --ohh September 7, 2018 @ 18:19
58985 bytes -2 bytes zopfli --i10000 --mls2048 --bsr12 --lazy --ohh September 7, 2018 @ 16:57
58987 bytes -3 bytes zopfli --i10000 --mls2048 --bsr13 --lazy --ohh September 7, 2018 @ 16:53
58990 bytes -3 bytes zopfli --i1000 --mls2048 --bsr12 --lazy --ohh September 7, 2018 @ 15:54
58993 bytes -1 byte zopfli --i1000 --mls2048 --bsr10 --lazy --ohh September 7, 2018 @ 15:54
58994 bytes -4 bytes zopfli --i1000 --mls2048 --bsr23 --lazy --ohh September 7, 2018 @ 15:53
58998 bytes zopfli --i100 --mls512 --bsr20 --lazy --ohh September 7, 2018 @ 15:50

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

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
59039 59039 59046 59046 59047 59053 59010 59012 59019 59017 59133 59032 59132 59011 59059
59029 59033 59041 59028 59031 59032 59030 59018 59020 59006 59009 59021 59017 59016 59028
59037 59037 59038 59027 59037 59031 59029 59015 59018 59002 59015 59030 59014 59011 59030
59039 59039 59032 59044 59036 59028 59014 59016 59016 59005 59029 59021 59013 59021 59028
59026 59030 59032 59026 59026 59029 59033 59018 59008 59009 59006 59024 59007 59017 59038
59031 59035 59031 59031 59028 59032 59034 59015 58999 59003 59013 59021 59028 59012 59030
59041 59019 59036 59016 59017 59013 59006 59005 59006 59002 58989 59023 59010 59006 59038
59016 59017 59037 59013 59015 59021 59004 59004 59007 59006 59003 59021 59013 59013 59038
59037 59036 59036 59034 59017 59020 59004 59004 58991 58994 58978 59021 59027 59001 59028
59017 59033 59019 59015 59016 59020 59020 59004 59006 59016 58982 59021 58998 59000 59039
59017 59018 59035 59014 59013 59016 59021 59008 58990 58992 59000 59021 59014 59012 59000
59019 59016 59020 59021 59011 59029 59004 59004 59003 59016 58990 59020 59001 58990 59038
59015 59017 59020 59017 59022 59029 59000 59006 59005 59005 58988 59021 59015 59011 59031
59042 59019 59021 59012 59016 59016 58998 59005 59000 59003 58981 59020 59014 58998 59038
59019 59040 59023 59007 59016 59022 59022 58995 59006 59006 58996 59021 59001 59000 59038
59033 59023 59036 59011 59029 59005 59004 59006 59007 59002 58995 59020 58999 59013 59029
59018 59017 59037 59030 59032 59022 59000 59003 58990 59005 58989 59021 59013 59013 59038
59016 59019 59033 59010 59017 59014 59035 59004 58991 58990 58999 59032 59013 58999 59038
59017 59027 59029 59016 59030 59017 59000 59005 59004 59003 59002 59021 59010 59013 59015
59013 59021 59022 59017 59016 59000 59001 59007 59005 58990 58990 59021 59014 59013 59039
59023 59020 59023 59012 59017 59004 59004 59004 58995 59003 59001 59030 59015 59013 59026
59024 59013 59025 59022 59027 59022 59018 59003 59004 58994 59003 59020 58998 58991 59030
59025 59027 59024 59025 59025 59015 59008 59007 58990 58991 58990 59002 59013 59014 59014

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 58998 bytes 100%
1,000 58990 bytes -8 bytes 100%
10,000 58985 bytes -5 bytes 100%
100,000 58980 bytes -5 bytes 0.87%
1,000,000 58978 bytes -2 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
59132 bytes +154 bytes (+0.26%)
59132 bytes +154 bytes (+0.26%)
59135 bytes +157 bytes (+0.27%) +3 bytes
59140 bytes +162 bytes (+0.27%) +8 bytes
59149 bytes +171 bytes (+0.29%) +17 bytes
59151 bytes +173 bytes (+0.29%) +19 bytes
59146 bytes +168 bytes (+0.28%) +14 bytes
59179 bytes +201 bytes (+0.34%) +47 bytes
59187 bytes +209 bytes (+0.35%) +55 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 45535 bytes -13443 bytes (-22.79%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 48035 bytes -10943 bytes (-18.55%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 49864 bytes -9114 bytes (-15.45%)
Brotli (Wikipedia) brotli brotli -q 11 53442 bytes -5536 bytes (-9.39%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 54133 bytes -4845 bytes (-8.21%)
LZMA2 (Wikipedia) xz xz -9 55116 bytes -3862 bytes (-6.55%)
Zstandard (Wikipedia) zstd zstd -19 56527 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 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.