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

After GZIP compression these minified files vary in size:
Boot
  68622 bytes (67.0k)
CDN
cdnjs
  59728 bytes (58.3k)
CDN
Google
  59580 bytes (58.2k)
CDN
unpkg
  59293 bytes (57.9k)
CDN
gzip -6 (default)
  59264 bytes (57.9k)
local copy
gzip -9
  59126 bytes (57.7k)
local copy
7zip -mx=9 -tgzip
  57306 bytes (56.0k)
local copy
libdeflate -12
  57298 bytes (56.0k)
local copy
kzip -s0 -rn -b1
  57297 bytes (56.0k)
local copy
zultra
  57246 bytes (55.9k)
local copy
pigz -11 -n
  57209 bytes (55.9k)
local copy
Zopfli
  57177 bytes (55.8k)
local copy
Zopfli (defluff)
  57176 bytes (55.8k)
local copy

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

You will automatically get the smallest AngularJS 1.6.9 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 2116 bytes by using my AngularJS 1.6.9 Zopfli version instead of the best available CDN (3.70% smaller than unpkg, 57177 vs. 59293 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 --bsr18 --lazy --ohh

(found February 3, 2018)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 512  --mls512
block splitting recursion 18  --bsr18
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 (57176 bytes).

Verify file integrity

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

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

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 68622 bytes ca6464a8e26218520f4b0c3bf2137013 February 3, 2018 @ 10:23
cdnjs 59728 bytes ca6464a8e26218520f4b0c3bf2137013 February 2, 2018 @ 17:34
Google 59580 bytes ca6464a8e26218520f4b0c3bf2137013 February 10, 2018 @ 20:15
unpkg 59293 bytes ca6464a8e26218520f4b0c3bf2137013 (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
57177 bytes -2 bytes zopfli --i1000000 --mls512 --bsr18 --lazy --ohh February 3, 2018 @ 01:31
57179 bytes -6 bytes zopfli --i100000 --mls512 --bsr18 --lazy --ohh February 2, 2018 @ 16:59
57185 bytes -3 bytes zopfli --i10000 --mls512 --bsr18 --lazy --ohh February 2, 2018 @ 15:35
57188 bytes -1 byte zopfli --i1000 --mls512 --bsr18 --lazy --ohh February 2, 2018 @ 15:25
57189 bytes -1 byte zopfli --i1000 --mls512 --bsr13 --lazy --ohh February 2, 2018 @ 15:25
57190 bytes -1 byte zopfli --i1000 --mls512 --bsr19 --lazy --ohh February 2, 2018 @ 15:25
57191 bytes -16 bytes zopfli --i1000 --mls512 --bsr16 --lazy --ohh February 2, 2018 @ 15:25
57207 bytes zopfli --i100 --mls512 --bsr18 --lazy --ohh February 2, 2018 @ 15:22

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

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
57235 57235 57233 57235 57237 57237 57238 57238 57236 57234 57306 57218 57308 57209 57237
57226 57214 57213 57218 57221 57216 57215 57199 57209 57210 57195 57214 57208 57205 57213
57214 57224 57217 57223 57219 57219 57222 57217 57209 57213 57210 57214 57210 57199 57219
57220 57215 57217 57219 57201 57216 57207 57198 57202 57209 57218 57215 57212 57201 57213
57228 57212 57212 57223 57214 57219 57212 57216 57200 57206 57208 57212 57211 57207 57214
57223 57223 57211 57227 57221 57211 57207 57198 57205 57218 57210 57207 57213 57205 57207
57222 57200 57198 57202 57199 57189 57200 57194 57187 57187 57194 57213 57206 57199 57214
57218 57200 57199 57199 57201 57199 57200 57187 57193 57193 57197 57213 57210 57213 57211
57225 57225 57209 57231 57199 57200 57179 57201 57187 57194 57196 57208 57191 57200 57218
57220 57212 57198 57217 57200 57189 57201 57179 57187 57211 57194 57207 57194 57202 57210
57233 57216 57202 57223 57201 57201 57199 57189 57188 57199 57196 57208 57199 57199 57210
57228 57201 57201 57202 57189 57199 57195 57187 57182 57198 57199 57208 57195 57200 57215
57206 57201 57200 57202 57201 57200 57198 57188 57189 57196 57197 57208 57193 57202 57214
57232 57206 57190 57201 57201 57201 57200 57188 57187 57198 57197 57208 57191 57200 57228
57216 57199 57189 57201 57200 57201 57200 57188 57177 57194 57198 57214 57194 57202 57201
57229 57205 57193 57201 57200 57190 57203 57188 57187 57197 57196 57209 57196 57198 57220
57242 57202 57190 57217 57200 57201 57200 57200 57180 57196 57195 57208 57197 57200 57218
57205 57199 57199 57219 57200 57199 57188 57187 57192 57196 57198 57208 57213 57205 57217
57201 57200 57198 57216 57190 57199 57200 57188 57193 57197 57198 57214 57195 57202 57220
57227 57203 57208 57201 57201 57199 57203 57199 57187 57197 57195 57207 57207 57208 57213
57205 57206 57210 57215 57203 57201 57200 57195 57188 57197 57195 57207 57209 57202 57221
57232 57200 57189 57210 57199 57200 57200 57187 57194 57199 57198 57213 57192 57201 57208
57214 57214 57215 57213 57205 57206 57207 57189 57187 57199 57192 57197 57192 57205 57219

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 57207 bytes 100%
1,000 57188 bytes -19 bytes 100%
10,000 57185 bytes -3 bytes 100%
100,000 57179 bytes -6 bytes 1.45%
1,000,000 57177 bytes -2 bytes 0.87%
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
57313 bytes +136 bytes (+0.24%) +16 bytes
57297 bytes +120 bytes (+0.21%)
57306 bytes +129 bytes (+0.23%) +9 bytes
57312 bytes +135 bytes (+0.24%) +15 bytes
57333 bytes +156 bytes (+0.27%) +36 bytes
57338 bytes +161 bytes (+0.28%) +41 bytes
57329 bytes +152 bytes (+0.27%) +32 bytes
57358 bytes +181 bytes (+0.32%) +61 bytes
57369 bytes +192 bytes (+0.34%) +72 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 44148 bytes -13029 bytes (-22.79%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 46656 bytes -10521 bytes (-18.40%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 48397 bytes -8780 bytes (-15.36%)
Brotli (Wikipedia) brotli brotli -q 11 51966 bytes -5211 bytes (-9.11%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 52714 bytes -4463 bytes (-7.81%)
LZMA2 (Wikipedia) xz xz -9 53444 bytes -3733 bytes (-6.53%)
Zstandard (Wikipedia) zstd zstd -19 55035 bytes -2142 bytes (-3.75%)

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.