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

After GZIP compression these minified files vary in size:
Boot
  60158 bytes (58.7k)
CDN
cdnjs
  52768 bytes (51.5k)
CDN
gzip -6 (default)
  52432 bytes (51.2k)
local copy
unpkg
  52432 bytes (51.2k)
CDN
Google
  52363 bytes (51.1k)
CDN
gzip -9
  52328 bytes (51.1k)
local copy
7zip -mx=9 -tgzip
  50691 bytes (49.5k)
local copy
libdeflate -12
  50687 bytes (49.5k)
local copy
kzip -s0 -rn -b0
  50672 bytes (49.5k)
local copy
zultra
  50665 bytes (49.5k)
local copy
pigz -11 -n
  50625 bytes (49.4k)
local copy
Zopfli
  50527 bytes (49.3k)
local copy

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

You will automatically get the smallest AngularJS 1.4.4 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 1836 bytes by using my AngularJS 1.4.4 Zopfli version instead of the best available CDN (3.63% smaller than Google, 50527 vs. 52363 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 --i100000 --mb8 --mls16384 --bsr15 --lazy --ohh

(found October 13, 2015)
Description Value Parameter
iterations 100000  --i100000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 15  --bsr15
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.4.4/angular.min.js --location | md5sum
feeb76d0de3487eb412c1928625e8fca  -
curl --silent --compressed https://minime.stephan-brumme.com/files/angularjs/angular-1.4.4.min.zopfli.js.gz | md5sum
feeb76d0de3487eb412c1928625e8fca  -

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 60158 bytes feeb76d0de3487eb412c1928625e8fca August 17, 2015 @ 08:56
cdnjs 52768 bytes feeb76d0de3487eb412c1928625e8fca August 14, 2015 @ 18:34
unpkg 52432 bytes feeb76d0de3487eb412c1928625e8fca July 11, 2016 @ 15:52
Google 52363 bytes feeb76d0de3487eb412c1928625e8fca August 13, 2015 @ 23:08

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
50527 bytes -2 bytes zopfli --i100000 --mls16384 --bsr15 --lazy --ohh October 13, 2015 @ 22:35
50529 bytes -1 byte zopfli --i10000 --mls16384 --bsr17 --lazy --ohh September 25, 2015 @ 16:29
50530 bytes -5 bytes zopfli --i10000 --mls16384 --bsr13 --lazy --ohh September 17, 2015 @ 10:52
50535 bytes -2 bytes zopfli --i1000 --mls16384 --bsr13 --lazy --ohh September 11, 2015 @ 17:18
50537 bytes -2 bytes zopfli --i1000 --mls16384 --bsr7 --lazy --ohh September 11, 2015 @ 17:11
50539 bytes -9 bytes zopfli --i1000 --mls16384 --bsr11 --lazy --ohh September 11, 2015 @ 16:12
50548 bytes zopfli --i100 --mls16384 --bsr13 --lazy --ohh September 11, 2015 @ 15:14

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 or 100,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
50598 50599 50600 50602 50612 50609 50612 50604 50611 50604 50615 50606 50610 50609 50606
50590 50549 50560 50596 50551 50592 50586 50586 50575 50574 50588 50589 50585 50566 50592
50584 50548 50529 50567 50587 50579 50586 50585 50589 50584 50588 50584 50583 50545 50598
50551 50552 50551 50567 50582 50559 50568 50593 50573 50574 50572 50574 50576 50531 50591
50547 50545 50531 50550 50546 50580 50572 50572 50588 50576 50587 50590 50575 50543 50550
50569 50546 50566 50597 50549 50591 50582 50585 50562 50573 50592 50574 50572 50544 50595
50543 50552 50546 50559 50586 50575 50572 50589 50583 50573 50572 50578 50579 50536 50595
50567 50553 50560 50556 50559 50579 50586 50585 50564 50574 50572 50577 50573 50536 50591
50572 50558 50563 50559 50558 50580 50568 50589 50573 50572 50592 50584 50573 50539 50551
50572 50556 50569 50579 50570 50592 50584 50581 50584 50577 50592 50574 50574 50528 50587
50569 50570 50558 50554 50551 50579 50586 50573 50583 50572 50588 50573 50577 50546 50595
50551 50555 50551 50563 50581 50571 50570 50589 50560 50572 50587 50574 50576 50527 50596
50569 50551 50565 50560 50554 50589 50557 50589 50583 50573 50587 50584 50589 50541 50589
50553 50552 50570 50542 50541 50572 50565 50577 50588 50572 50574 50591 50576 50527 50551
50555 50555 50561 50563 50562 50578 50584 50572 50583 50572 50574 50584 50586 50536 50596
50555 50557 50542 50557 50560 50574 50587 50573 50560 50575 50587 50576 50576 50532 50596
50553 50554 50544 50563 50561 50577 50571 50588 50584 50572 50587 50577 50572 50537 50589
50554 50558 50562 50556 50560 50579 50559 50588 50573 50573 50587 50574 50572 50550 50590
50555 50555 50564 50559 50556 50580 50558 50572 50587 50570 50587 50583 50590 50531 50596
50552 50552 50557 50557 50557 50580 50571 50586 50572 50576 50588 50576 50572 50535 50600
50570 50555 50567 50578 50570 50577 50571 50572 50563 50577 50574 50584 50573 50530 50589
50583 50553 50567 50561 50557 50580 50564 50588 50588 50574 50574 50585 50573 50548 50590
50570 50555 50591 50560 50560 50572 50582 50582 50583 50567 50587 50587 50576 50527 50589

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 50548 bytes 100%
1,000 50533 bytes -15 bytes 100%
10,000 50529 bytes -4 bytes 100%
100,000 50527 bytes -2 bytes 2.90%
1,000,000
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
50672 bytes +145 bytes (+0.29%)
50672 bytes +145 bytes (+0.29%)
50696 bytes +169 bytes (+0.33%) +24 bytes
50691 bytes +164 bytes (+0.32%) +19 bytes
50710 bytes +183 bytes (+0.36%) +38 bytes
50730 bytes +203 bytes (+0.40%) +58 bytes
50721 bytes +194 bytes (+0.38%) +49 bytes
50745 bytes +218 bytes (+0.43%) +73 bytes
50788 bytes +261 bytes (+0.52%) +116 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 39540 bytes -10987 bytes (-21.74%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41664 bytes -8863 bytes (-17.54%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42881 bytes -7646 bytes (-15.13%)
Brotli (Wikipedia) brotli brotli -q 11 46132 bytes -4395 bytes (-8.70%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46963 bytes -3564 bytes (-7.05%)
LZMA2 (Wikipedia) xz xz -9 47504 bytes -3023 bytes (-5.98%)
Zstandard (Wikipedia) zstd zstd -19 48927 bytes -1600 bytes (-3.17%)

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.