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

After GZIP compression these minified files vary in size:
unpkg
  78354 bytes (76.5k)
CDN
Boot
  62294 bytes (60.8k)
CDN
Google
  62294 bytes (60.8k)
CDN
cdnjs
  62294 bytes (60.8k)
CDN
gzip -6 (default)
  61974 bytes (60.5k)
local copy
gzip -9
  61808 bytes (60.4k)
local copy
libdeflate -12
  60019 bytes (58.6k)
local copy
kzip -s0 -rn -b1
  59954 bytes (58.5k)
local copy
7zip -mx=9 -tgzip
  59949 bytes (58.5k)
local copy
zultra
  59909 bytes (58.5k)
local copy
pigz -11 -n
  59861 bytes (58.5k)
local copy
Zopfli
  59800 bytes (58.4k)
local copy
Zopfli (defluff)
  59799 bytes (58.4k)
local copy

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

You will automatically get the smallest AngularJS 1.8.1 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 2494 bytes by using my AngularJS 1.8.1 Zopfli version instead of the best available CDN (4.17% smaller than cdnjs, 59800 vs. 62294 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 July 22, 2021)
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 1 more byte (59799 bytes).

Verify file integrity

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

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

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
unpkg 78354 bytes 9f71a17dd974d29aadc65bde867a54ff (invalid)
Boot 62294 bytes 9f71a17dd974d29aadc65bde867a54ff (invalid)
Google 62294 bytes 9f71a17dd974d29aadc65bde867a54ff (invalid)
cdnjs 62294 bytes 9f71a17dd974d29aadc65bde867a54ff (invalid)

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
59800 bytes -2 bytes zopfli --i1000000 --mls2048 --bsr12 --lazy --ohh July 22, 2021 @ 21:04
59802 bytes -2 bytes zopfli --i100000 --mls2048 --bsr12 --lazy --ohh July 22, 2021 @ 12:09
59804 bytes -4 bytes zopfli --i100000 --mls512 --bsr40 --lazy --ohh July 22, 2021 @ 11:20
59808 bytes -2 bytes zopfli --i10000 --mls512 --bsr40 --lazy --ohh July 21, 2021 @ 22:43
59810 bytes -1 byte zopfli --i10000 --mls512 --bsr12 --lazy --ohh July 21, 2021 @ 19:52
59811 bytes -1 byte zopfli --i10000 --mls1024 --bsr40 --lazy --ohh July 21, 2021 @ 18:47
59812 bytes -1 byte zopfli --i10000 --mls256 --bsr18 --lazy --ohh July 21, 2021 @ 16:18
59813 bytes -2 bytes zopfli --i1000 --mls512 --bsr40 --lazy --ohh July 21, 2021 @ 15:25
59815 bytes -1 byte zopfli --i1000 --mls4096 --bsr16 --lazy --ohh July 21, 2021 @ 14:36
59816 bytes -1 byte zopfli --i1000 --mls4096 --bsr17 --lazy --ohh July 21, 2021 @ 14:30
59817 bytes -10 bytes zopfli --i1000 --mls4096 --bsr22 --lazy --ohh July 21, 2021 @ 14:20
59827 bytes zopfli --i100 --mls1024 --bsr20 --lazy --ohh July 21, 2021 @ 13:56

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

Most recent activity on July 23, 2021 @ 11:17.

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
59907 59879 59874 59881 59873 59852 59873 59875 59841 59837 59958 59874 59957 59848 59874
59857 59860 59849 59854 59846 59856 59860 59858 59834 59841 59837 59830 59835 59855 59857
59841 59841 59854 59847 59847 59852 59856 59855 59840 59830 59840 59856 59833 59841 59857
59848 59870 59848 59864 59846 59855 59846 59845 59849 59830 59840 59861 59832 59840 59857
59875 59872 59856 59852 59851 59859 59858 59857 59836 59830 59837 59851 59833 59845 59856
59848 59855 59859 59855 59846 59846 59860 59856 59831 59832 59841 59856 59832 59839 59856
59836 59840 59850 59847 59847 59855 59845 59855 59821 59814 59824 59856 59833 59843 59857
59842 59844 59845 59834 59840 59856 59843 59845 59824 59816 59813 59815 59835 59822 59856
59843 59856 59845 59853 59859 59849 59843 59812 59810 59815 59800 59814 59815 59820 59856
59842 59841 59843 59845 59833 59854 59843 59854 59811 59813 59824 59813 59819 59812 59857
59854 59840 59840 59843 59833 59860 59847 59815 59812 59813 59824 59816 59817 59815 59856
59846 59845 59847 59837 59846 59855 59847 59816 59812 59813 59824 59846 59818 59825 59856
59844 59832 59841 59835 59842 59847 59846 59855 59825 59813 59824 59811 59814 59813 59835
59843 59844 59848 59835 59830 59854 59846 59813 59810 59816 59824 59813 59817 59815 59856
59842 59842 59853 59845 59831 59846 59846 59812 59811 59815 59814 59813 59815 59825 59857
59841 59842 59842 59842 59833 59847 59859 59810 59824 59814 59814 59814 59817 59832 59856
59843 59848 59843 59838 59850 59856 59846 59814 59814 59814 59816 59812 59816 59843 59854
59841 59841 59846 59840 59847 59856 59855 59810 59813 59815 59823 59814 59832 59844 59857
59835 59841 59838 59838 59832 59853 59846 59812 59820 59822 59811 59811 59840 59839 59858
59829 59838 59840 59856 59834 59854 59856 59856 59820 59813 59824 59856 59832 59831 59857
59832 59838 59841 59840 59847 59853 59859 59818 59815 59826 59825 59814 59823 59821 59856
59840 59837 59838 59836 59830 59856 59847 59811 59825 59810 59824 59816 59817 59822 59856
59850 59848 59842 59851 59839 59838 59835 59829 59804 59811 59837 59830 59824 59831 59856

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 59827 bytes 100%
1,000 59813 bytes -14 bytes 100%
10,000 59808 bytes -5 bytes 100%
100,000 59802 bytes -6 bytes 0.58%
1,000,000 59800 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
59958 bytes +158 bytes (+0.26%) +4 bytes
59954 bytes +154 bytes (+0.26%)
59960 bytes +160 bytes (+0.27%) +6 bytes
59972 bytes +172 bytes (+0.29%) +18 bytes
59992 bytes +192 bytes (+0.32%) +38 bytes
59978 bytes +178 bytes (+0.30%) +24 bytes
59973 bytes +173 bytes (+0.29%) +19 bytes
59996 bytes +196 bytes (+0.33%) +42 bytes
60008 bytes +208 bytes (+0.35%) +54 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 45993 bytes -13807 bytes (-23.09%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 48716 bytes -11084 bytes (-18.54%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 50599 bytes -9201 bytes (-15.39%)
Brotli (Wikipedia) brotli brotli -q 11 54212 bytes -5588 bytes (-9.34%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 54847 bytes -4953 bytes (-8.28%)
LZMA2 (Wikipedia) xz xz -9 55820 bytes -3980 bytes (-6.66%)
Zstandard (Wikipedia) zstd zstd -19 57175 bytes -2625 bytes (-4.39%)

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.