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

After GZIP compression these minified files vary in size:
Boot
  64421 bytes (62.9k)
CDN
cdnjs
  56350 bytes (55.0k)
CDN
unpkg
  55967 bytes (54.7k)
CDN
gzip -6 (default)
  55960 bytes (54.6k)
local copy
Google
  55907 bytes (54.6k)
CDN
gzip -9
  55877 bytes (54.6k)
local copy
7zip -mx=9 -tgzip
  54116 bytes (52.8k)
local copy
libdeflate -12
  54104 bytes (52.8k)
local copy
zultra
  54081 bytes (52.8k)
local copy
pigz -11 -n
  54039 bytes (52.8k)
local copy
kzip -s0 -rn -b8
  54037 bytes (52.8k)
local copy
Zopfli
  53959 bytes (52.7k)
local copy
Zopfli (defluff)
  53958 bytes (52.7k)
local copy

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

You will automatically get the smallest AngularJS 1.5.6 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 1948 bytes by using my AngularJS 1.5.6 Zopfli version instead of the best available CDN (3.61% smaller than Google, 53959 vs. 55907 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 --mls4 --bsr11 --lazy --ohh

(found June 2, 2016)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 4  --mls4
block splitting recursion 11  --bsr11
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 (53958 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.6/angular.min.js --location | md5sum
1fbd6b010938cee7268f503865b56559  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-1.5.6.min.zopfli.js.gz | md5sum
1fbd6b010938cee7268f503865b56559  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 64421 bytes 1fbd6b010938cee7268f503865b56559 May 29, 2016 @ 19:30
cdnjs 56350 bytes 1fbd6b010938cee7268f503865b56559 May 29, 2016 @ 10:31
unpkg 55967 bytes 1fbd6b010938cee7268f503865b56559 July 11, 2016 @ 15:51
Google 55907 bytes 1fbd6b010938cee7268f503865b56559 June 2, 2016 @ 00:19

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
53959 bytes -5 bytes zopfli --i1000000 --mls4 --bsr11 --lazy --ohh June 2, 2016 @ 06:51
53964 bytes -4 bytes zopfli --i100000 --mls4 --bsr11 --lazy --ohh May 28, 2016 @ 14:54
53968 bytes -4 bytes zopfli --i10000 --mls4 --bsr11 --lazy --ohh May 28, 2016 @ 13:53
53972 bytes -1 byte zopfli --i1000 --mls4 --bsr11 --lazy --ohh May 28, 2016 @ 13:47
53973 bytes -15 bytes zopfli --i1000 --mls4 --bsr23 --lazy --ohh May 28, 2016 @ 13:47
53988 bytes zopfli --i100 --mls4 --bsr11 --lazy --ohh May 28, 2016 @ 13:43

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
54032 54031 54030 54035 54031 54032 54033 54032 54034 54035 54032 54023 54026 54032 54032
54022 54024 54020 54024 54020 54021 54013 54019 54020 54013 54022 54021 54019 54018 54018
54020 54019 54019 54019 54021 54014 54011 54019 54021 54019 54020 54022 54019 53974 54020
54017 54020 53997 54030 54025 54022 54010 54017 54011 54026 54023 54008 54010 53974 54009
54020 53980 53980 54018 54020 54019 54011 54018 54011 54011 54010 54012 54023 54012 54021
54015 54020 54023 54017 54020 54014 54010 54018 54011 54011 54023 54018 54009 53973 54008
54036 54001 53999 54018 54020 54022 54010 54018 54010 54020 54011 54021 54010 53975 54010
54027 53959 53984 53983 54025 54019 54010 54018 54010 54019 54011 54008 54010 53976 54020
54012 53979 54022 54026 54020 54015 54010 54018 54015 54010 54010 54020 54009 53975 54020
54011 54012 54021 54019 54020 54021 54011 54018 54010 54019 54011 54008 54010 53977 54010
53974 53970 53979 53995 54020 54020 54011 54019 54018 54020 54011 54011 54011 53974 54019
54012 54016 54027 54018 54021 54022 54010 54018 54021 54022 54011 54021 54011 54010 54010
54022 53982 53991 53985 54020 54019 54013 54018 54011 54021 54023 54012 54010 54010 54010
54016 53980 53987 54018 54020 54019 54010 54018 54019 54022 54020 54008 54010 53978 54013
54019 54012 54018 54019 54020 54020 54010 54018 54012 54019 54013 54009 54010 53975 54020
54019 54018 54020 54020 54020 54019 54010 54018 54011 54020 54023 54008 54009 53975 54009
54012 53970 53985 54018 54020 54021 54010 54018 53981 54012 54020 54008 54011 53974 54013
54014 54012 53993 54018 54020 54019 54010 54017 54019 54011 54011 54008 54010 54012 54010
54019 54012 54021 54020 54020 54020 54010 54018 54019 54023 54011 54009 54009 54010 54009
54001 53966 54029 54022 54020 54019 54009 54018 54020 54023 54009 54021 54009 53977 54017
54015 54011 54019 54018 54021 54019 54010 54019 54021 54021 54011 54020 54012 53974 54020
54007 54007 54006 54006 54020 54021 54010 54018 53981 54019 54011 54008 54012 53976 54008
54004 54002 54007 54006 54007 54009 53996 54008 54010 54019 54023 54021 54009 53982 54008

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 53988 bytes 100%
1,000 53972 bytes -16 bytes 100%
10,000 53968 bytes -4 bytes 100%
100,000 53964 bytes -4 bytes 0.58%
1,000,000 53959 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
54112 bytes +153 bytes (+0.28%) +75 bytes
54118 bytes +159 bytes (+0.29%) +81 bytes
54126 bytes +167 bytes (+0.31%) +89 bytes
54116 bytes +157 bytes (+0.29%) +79 bytes
54119 bytes +160 bytes (+0.30%) +82 bytes
54148 bytes +189 bytes (+0.35%) +111 bytes
54140 bytes +181 bytes (+0.34%) +103 bytes
54087 bytes +128 bytes (+0.24%) +50 bytes
54037 bytes +78 bytes (+0.14%)

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 41784 bytes -12175 bytes (-22.56%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 44163 bytes -9796 bytes (-18.15%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 45652 bytes -8307 bytes (-15.40%)
Brotli (Wikipedia) brotli brotli -q 11 49087 bytes -4872 bytes (-9.03%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 49796 bytes -4163 bytes (-7.72%)
LZMA2 (Wikipedia) xz xz -9 50572 bytes -3387 bytes (-6.28%)
Zstandard (Wikipedia) zstd zstd -19 52036 bytes -1923 bytes (-3.56%)

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.