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

After GZIP compression these minified files vary in size:
Boot
  68076 bytes (66.5k)
CDN
cdnjs
  59335 bytes (57.9k)
CDN
Google
  59198 bytes (57.8k)
CDN
unpkg
  58907 bytes (57.5k)
CDN
gzip -6 (default)
  58886 bytes (57.5k)
local copy
gzip -9
  58761 bytes (57.4k)
local copy
7zip -mx=9 -tgzip
  56966 bytes (55.6k)
local copy
kzip -s0 -rn -b8
  56948 bytes (55.6k)
local copy
libdeflate -12
  56940 bytes (55.6k)
local copy
zultra
  56940 bytes (55.6k)
local copy
pigz -11 -n
  56878 bytes (55.5k)
local copy
Zopfli
  56836 bytes (55.5k)
local copy

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

You will automatically get the smallest AngularJS 1.6.5 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 2071 bytes by using my AngularJS 1.6.5 Zopfli version instead of the best available CDN (3.64% smaller than unpkg, 56836 vs. 58907 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 --bsr20 --lazy --ohh

(found July 10, 2017)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 512  --mls512
block splitting recursion 20  --bsr20
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.6.5/angular.min.js --location | md5sum
07a72b597f2fc10d6f88c8277d903d94  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-1.6.5.min.zopfli.js.gz | md5sum
07a72b597f2fc10d6f88c8277d903d94  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 68076 bytes 07a72b597f2fc10d6f88c8277d903d94 July 9, 2017 @ 04:18
cdnjs 59335 bytes 07a72b597f2fc10d6f88c8277d903d94 (invalid)
Google 59198 bytes 07a72b597f2fc10d6f88c8277d903d94 July 6, 2017 @ 20:15
unpkg 58907 bytes 07a72b597f2fc10d6f88c8277d903d94 July 7, 2017 @ 17:25

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
56836 bytes -3 bytes zopfli --i1000000 --mls512 --bsr20 --lazy --ohh July 10, 2017 @ 20:16
56839 bytes -5 bytes zopfli --i100000 --mls512 --bsr20 --lazy --ohh July 10, 2017 @ 08:30
56844 bytes -1 byte zopfli --i10000 --mls512 --bsr20 --lazy --ohh July 7, 2017 @ 21:50
56845 bytes -1 byte zopfli --i10000 --mls512 --bsr16 --lazy --ohh July 7, 2017 @ 21:31
56846 bytes -1 byte zopfli --i10000 --mls2048 --bsr40 --lazy --ohh July 7, 2017 @ 21:24
56847 bytes -1 byte zopfli --i10000 --mls256 --bsr40 --lazy --ohh July 7, 2017 @ 21:20
56848 bytes -2 bytes zopfli --i1000 --mls2048 --bsr18 --lazy --ohh July 7, 2017 @ 19:07
56850 bytes -1 byte zopfli --i1000 --mls2048 --bsr40 --lazy --ohh July 7, 2017 @ 19:00
56851 bytes -3 bytes zopfli --i1000 --mls256 --bsr40 --lazy --ohh July 7, 2017 @ 18:58
56854 bytes zopfli --i100 --mls2048 --bsr40 --lazy --ohh July 7, 2017 @ 17:41

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

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
56885 56887 56887 56887 56887 56887 56888 56887 56886 56892 56871 56867 56893 56867 56886
56881 56881 56890 56886 56883 56870 56871 56865 56864 56870 56861 56865 56864 56872 56874
56885 56875 56878 56877 56878 56875 56876 56875 56859 56872 56869 56865 56869 56863 56867
56887 56886 56877 56893 56889 56869 56871 56870 56859 56870 56863 56872 56868 56868 56865
56878 56873 56876 56888 56874 56870 56870 56859 56864 56865 56867 56868 56868 56872 56866
56883 56882 56886 56876 56877 56878 56870 56867 56868 56865 56865 56864 56867 56870 56865
56886 56877 56876 56879 56875 56864 56870 56872 56850 56854 56853 56865 56869 56861 56876
56879 56864 56864 56879 56875 56868 56870 56855 56846 56856 56861 56865 56869 56862 56860
56882 56878 56888 56885 56877 56869 56870 56853 56851 56850 56859 56859 56854 56866 56865
56878 56883 56871 56879 56877 56876 56877 56875 56840 56854 56861 56865 56856 56862 56874
56879 56871 56880 56879 56876 56868 56880 56859 56846 56851 56846 56858 56867 56862 56867
56886 56885 56866 56878 56877 56871 56870 56855 56846 56856 56860 56865 56868 56862 56873
56885 56882 56877 56877 56868 56865 56870 56850 56841 56849 56855 56866 56855 56864 56865
56883 56874 56869 56876 56876 56867 56869 56854 56846 56851 56861 56865 56855 56861 56865
56881 56881 56877 56878 56868 56868 56870 56875 56840 56853 56843 56865 56869 56860 56871
56886 56886 56873 56877 56878 56869 56873 56870 56850 56853 56865 56865 56868 56861 56874
56886 56894 56886 56877 56877 56857 56869 56868 56836 56850 56864 56866 56869 56861 56873
56884 56883 56876 56878 56877 56868 56870 56866 56846 56856 56850 56865 56868 56869 56873
56880 56869 56876 56876 56877 56873 56870 56853 56851 56856 56861 56865 56867 56863 56865
56887 56869 56872 56880 56877 56868 56876 56867 56846 56848 56856 56866 56866 56862 56869
56859 56867 56878 56879 56879 56866 56869 56870 56841 56852 56854 56865 56852 56867 56871
56869 56868 56863 56862 56858 56860 56870 56859 56849 56857 56846 56861 56852 56865 56860
56868 56864 56860 56860 56866 56861 56864 56847 56846 56849 56846 56847 56868 56865 56854

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 56854 bytes 100%
1,000 56848 bytes -6 bytes 100%
10,000 56844 bytes -4 bytes 100%
100,000 56839 bytes -5 bytes 1.74%
1,000,000 56836 bytes -3 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
56972 bytes +136 bytes (+0.24%) +24 bytes
56964 bytes +128 bytes (+0.23%) +16 bytes
56985 bytes +149 bytes (+0.26%) +37 bytes
56981 bytes +145 bytes (+0.26%) +33 bytes
56996 bytes +160 bytes (+0.28%) +48 bytes
56995 bytes +159 bytes (+0.28%) +47 bytes
56989 bytes +153 bytes (+0.27%) +41 bytes
57019 bytes +183 bytes (+0.32%) +71 bytes
56948 bytes +112 bytes (+0.20%)

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 43913 bytes -12923 bytes (-22.74%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 46391 bytes -10445 bytes (-18.38%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 48127 bytes -8709 bytes (-15.32%)
Brotli (Wikipedia) brotli brotli -q 11 51616 bytes -5220 bytes (-9.18%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 52328 bytes -4508 bytes (-7.93%)
LZMA2 (Wikipedia) xz xz -9 53120 bytes -3716 bytes (-6.54%)
Zstandard (Wikipedia) zstd zstd -19 54677 bytes -2159 bytes (-3.80%)

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.