Choose a version:
14% The original file has 1135200 bytes (1,108.6k) and is available from the project website.
There you can find the official minified version, too, which brings down the size to 155225 bytes (151.6k, 14%).

After GZIP compression these minified files vary in size:
Boot
  63230 bytes (61.7k)
CDN
cdnjs
  55324 bytes (54.0k)
CDN
unpkg
  54947 bytes (53.7k)
CDN
gzip -6 (default)
  54933 bytes (53.6k)
local copy
Google
  54883 bytes (53.6k)
CDN
gzip -9
  54834 bytes (53.5k)
local copy
7zip -mx=9 -tgzip
  53150 bytes (51.9k)
local copy
libdeflate -12
  53108 bytes (51.9k)
local copy
zultra
  53103 bytes (51.9k)
local copy
kzip -s0 -rn -b8
  53062 bytes (51.8k)
local copy
pigz -11 -n
  53043 bytes (51.8k)
local copy
Zopfli
  53004 bytes (51.8k)
local copy

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

You will automatically get the smallest AngularJS 1.5.2 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 1879 bytes by using my AngularJS 1.5.2 Zopfli version instead of the best available CDN (3.55% smaller than Google, 53004 vs. 54883 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 --mls512 --bsr40 --lazy --ohh

(found March 21, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 512  --mls512
block splitting recursion 40  --bsr40
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

Verify file integrity

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

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

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 63230 bytes f20e684c7cf479a26d8df43857f6d500 May 3, 2016 @ 10:32
cdnjs 55324 bytes f20e684c7cf479a26d8df43857f6d500 March 19, 2016 @ 13:46
unpkg 54947 bytes f20e684c7cf479a26d8df43857f6d500 July 11, 2016 @ 15:52
Google 54883 bytes f20e684c7cf479a26d8df43857f6d500 March 19, 2016 @ 19:29

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
53004 bytes -5 bytes zopfli --i1000000 --mls512 --bsr40 --lazy --ohh March 21, 2016 @ 07:43
53009 bytes -3 bytes zopfli --i100000 --mls512 --bsr40 --lazy --ohh March 21, 2016 @ 01:38
53012 bytes -9 bytes zopfli --i10000 --mls512 --bsr40 --lazy --ohh March 21, 2016 @ 00:57
53021 bytes -3 bytes zopfli --i1000 --mls512 --bsr40 --lazy --ohh March 21, 2016 @ 00:45
53024 bytes -4 bytes zopfli --i1000 --mls4096 --bsr30 --lazy --ohh March 21, 2016 @ 00:43
53028 bytes zopfli --i100 --mls4096 --bsr30 --lazy --ohh March 20, 2016 @ 11:15

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

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
53049 53049 53049 53050 53050 53052 53052 53052 53039 53051 53051 53039 53042 53051 53049
53043 53043 53042 53034 53032 53026 53028 53027 53026 53033 53025 53027 53025 53023 53037
53034 53033 53035 53032 53032 53033 53029 53025 53024 53033 53033 53024 53027 53027 53030
53037 53033 53045 53039 53040 53029 53039 53023 53037 53033 53024 53041 53023 53037 53021
53036 53032 53037 53033 53033 53029 53029 53023 53022 53023 53033 53036 53040 53023 53024
53045 53035 53028 53035 53031 53030 53030 53026 53022 53023 53022 53021 53037 53023 53037
53037 53033 53042 53042 53034 53029 53028 53026 53031 53023 53023 53021 53022 53022 53037
53033 53030 53042 53041 53025 53028 53027 53026 53024 53033 53023 53023 53037 53024 53032
53024 53033 53042 53037 53033 53026 53029 53023 53025 53034 53023 53021 53028 53024 53037
53040 53041 53042 53034 53025 53026 53029 53026 53025 53023 53023 53023 53027 53023 53024
53051 53034 53040 53042 53025 53029 53030 53024 53022 53024 53023 53020 53027 53024 53024
53037 53033 53043 53042 53025 53026 53029 53027 53022 53023 53024 53023 53035 53023 53037
53038 53032 53038 53030 53025 53029 53026 53027 53034 53023 53023 53022 53027 53023 53023
53023 53030 53027 53037 53033 53025 53028 53026 53024 53023 53030 53033 53026 53021 53036
53035 53033 53042 53037 53034 53029 53029 53027 53024 53023 53023 53024 53037 53023 53037
53038 53034 53038 53033 53033 53029 53028 53026 53022 53022 53023 53021 53028 53025 53037
53023 53032 53037 53033 53024 53029 53029 53025 53024 53023 53023 53023 53027 53024 53036
53035 53033 53038 53037 53040 53029 53029 53022 53022 53023 53023 53021 53025 53023 53036
53023 53023 53039 53038 53025 53029 53029 53026 53024 53023 53023 53022 53026 53026 53038
53024 53011 53039 53037 53024 53028 53028 53025 53022 53022 53023 53023 53028 53024 53038
53024 53023 53028 53030 53025 53028 53029 53022 53022 53035 53023 53023 53026 53023 53037
53024 53024 53042 53024 53025 53029 53029 53027 53022 53035 53024 53021 53027 53024 53037
53029 53022 53030 53031 53022 53019 53016 53013 53004 53020 53023 53023 53037 53021 53023

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 53028 bytes 100%
1,000 53021 bytes -7 bytes 100%
10,000 53012 bytes -9 bytes 100%
100,000 53009 bytes -3 bytes 1.16%
1,000,000 53004 bytes -5 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
53137 bytes +133 bytes (+0.25%) +75 bytes
53131 bytes +127 bytes (+0.24%) +69 bytes
53152 bytes +148 bytes (+0.28%) +90 bytes
53150 bytes +146 bytes (+0.28%) +88 bytes
53151 bytes +147 bytes (+0.28%) +89 bytes
53189 bytes +185 bytes (+0.35%) +127 bytes
53184 bytes +180 bytes (+0.34%) +122 bytes
53107 bytes +103 bytes (+0.19%) +45 bytes
53062 bytes +58 bytes (+0.11%)

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 41109 bytes -11895 bytes (-22.44%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 43440 bytes -9564 bytes (-18.04%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 44826 bytes -8178 bytes (-15.43%)
Brotli (Wikipedia) brotli brotli -q 11 48258 bytes -4746 bytes (-8.95%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 48974 bytes -4030 bytes (-7.60%)
LZMA2 (Wikipedia) xz xz -9 49692 bytes -3312 bytes (-6.25%)
Zstandard (Wikipedia) zstd zstd -19 51141 bytes -1863 bytes (-3.51%)

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.