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

After GZIP compression these minified files vary in size:
Boot
  60152 bytes (58.7k)
CDN
cdnjs
  60152 bytes (58.7k)
CDN
Google
  60027 bytes (58.6k)
CDN
unpkg
  59719 bytes (58.3k)
CDN
gzip -6 (default)
  59697 bytes (58.3k)
local copy
gzip -9
  59553 bytes (58.2k)
local copy
7zip -mx=9 -tgzip
  57739 bytes (56.4k)
local copy
zultra
  57728 bytes (56.4k)
local copy
libdeflate -12
  57721 bytes (56.4k)
local copy
kzip -s0 -rn -b6
  57705 bytes (56.4k)
local copy
pigz -11 -n
  57642 bytes (56.3k)
local copy
Zopfli
  57601 bytes (56.3k)
local copy
Zopfli (defluff)
  57599 bytes (56.2k)
local copy

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

You will automatically get the smallest AngularJS 1.7.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 2118 bytes by using my AngularJS 1.7.1 Zopfli version instead of the best available CDN (3.68% smaller than unpkg, 57601 vs. 59719 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 June 12, 2018)
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

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 (57599 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.1/angular.min.js --location | md5sum
406649793abe268ff4755ee5875d27e1  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-1.7.1.min.zopfli.js.gz | md5sum
406649793abe268ff4755ee5875d27e1  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 60152 bytes 406649793abe268ff4755ee5875d27e1 June 26, 2018 @ 12:15
cdnjs 60152 bytes 406649793abe268ff4755ee5875d27e1 June 26, 2018 @ 12:15
Google 60027 bytes 406649793abe268ff4755ee5875d27e1 June 16, 2018 @ 20:15
unpkg 59719 bytes 406649793abe268ff4755ee5875d27e1 (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
57601 bytes -1 byte zopfli --i1000000 --mls512 --bsr20 --lazy --ohh June 12, 2018 @ 10:34
57602 bytes -6 bytes zopfli --i100000 --mls512 --bsr11 --lazy --ohh June 11, 2018 @ 20:00
57608 bytes -3 bytes zopfli --i10000 --mls512 --bsr11 --lazy --ohh June 11, 2018 @ 18:01
57611 bytes -1 byte zopfli --i1000 --mls512 --bsr21 --lazy --ohh June 11, 2018 @ 17:28
57612 bytes -9 bytes zopfli --i1000 --mls512 --bsr40 --lazy --ohh June 11, 2018 @ 17:27
57621 bytes zopfli --i100 --mls512 --bsr20 --lazy --ohh June 11, 2018 @ 17:23

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
57669 57671 57671 57673 57673 57673 57664 57673 57668 57671 57642 57641 57646 57639 57672
57650 57643 57650 57651 57640 57641 57638 57636 57636 57629 57635 57631 57637 57625 57657
57656 57658 57656 57657 57648 57651 57641 57629 57633 57627 57636 57635 57636 57635 57646
57650 57638 57656 57656 57658 57653 57633 57626 57639 57641 57640 57636 57636 57636 57633
57644 57656 57658 57653 57660 57653 57638 57628 57631 57631 57626 57637 57632 57631 57659
57656 57643 57649 57652 57650 57649 57639 57628 57631 57631 57618 57636 57636 57630 57651
57646 57645 57660 57643 57640 57639 57624 57622 57609 57621 57619 57619 57636 57630 57653
57647 57646 57643 57655 57613 57622 57621 57604 57601 57618 57619 57620 57636 57630 57652
57637 57646 57656 57658 57655 57658 57617 57610 57609 57610 57610 57618 57618 57636 57632
57641 57631 57654 57656 57641 57634 57626 57611 57612 57627 57618 57619 57619 57619 57638
57644 57636 57649 57658 57623 57623 57626 57613 57613 57610 57620 57621 57620 57637 57652
57661 57625 57655 57656 57657 57634 57620 57613 57611 57628 57636 57621 57619 57614 57640
57641 57624 57641 57657 57621 57633 57618 57609 57621 57610 57618 57619 57619 57611 57638
57627 57626 57642 57639 57622 57638 57624 57610 57612 57609 57615 57620 57620 57613 57653
57639 57626 57656 57640 57639 57657 57625 57611 57603 57611 57620 57618 57618 57613 57638
57628 57628 57641 57641 57620 57639 57625 57611 57617 57628 57619 57619 57619 57614 57656
57652 57622 57642 57656 57639 57636 57621 57609 57601 57618 57618 57618 57618 57629 57656
57629 57628 57640 57642 57622 57643 57617 57611 57604 57617 57618 57619 57620 57629 57647
57650 57628 57644 57642 57639 57639 57625 57611 57610 57611 57618 57625 57635 57628 57650
57647 57646 57643 57642 57635 57632 57622 57612 57610 57628 57619 57620 57636 57628 57652
57634 57645 57631 57642 57624 57640 57618 57622 57618 57612 57619 57618 57619 57627 57635
57646 57645 57639 57637 57621 57632 57621 57612 57610 57614 57619 57618 57619 57616 57632
57650 57635 57639 57640 57635 57641 57626 57619 57609 57609 57619 57617 57621 57629 57633

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 57621 bytes 100%
1,000 57611 bytes -10 bytes 100%
10,000 57608 bytes -3 bytes 100%
100,000 57602 bytes -6 bytes 1.45%
1,000,000 57601 bytes -1 byte 0.58%
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
57757 bytes +156 bytes (+0.27%) +52 bytes
57759 bytes +158 bytes (+0.27%) +54 bytes
57780 bytes +179 bytes (+0.31%) +75 bytes
57747 bytes +146 bytes (+0.25%) +42 bytes
57780 bytes +179 bytes (+0.31%) +75 bytes
57771 bytes +170 bytes (+0.30%) +66 bytes
57705 bytes +104 bytes (+0.18%)
57722 bytes +121 bytes (+0.21%) +17 bytes
57743 bytes +142 bytes (+0.25%) +38 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 - for example, your browser actually supports it !
Algorithm Program Parameters Size Compared To Best Zopfli
ZPAQ (Wikipedia) zpaq zpaq -method 69 44413 bytes -13188 bytes (-22.90%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 46985 bytes -10616 bytes (-18.43%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 48759 bytes -8842 bytes (-15.35%)
Brotli (Wikipedia) brotli brotli -q 11 52358 bytes -5243 bytes (-9.10%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 52991 bytes -4610 bytes (-8.00%)
LZMA2 (Wikipedia) xz xz -9 53864 bytes -3737 bytes (-6.49%)
Zstandard (Wikipedia) zstd zstd -19 55429 bytes -2172 bytes (-3.77%)

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.