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

After GZIP compression these minified files vary in size:
Boot
  60120 bytes (58.7k)
CDN
jsdelivr
  60120 bytes (58.7k)
CDN
cdnjs
  54072 bytes (52.8k)
CDN
unpkg
  52377 bytes (51.1k)
CDN
gzip -6 (default)
  52363 bytes (51.1k)
local copy
Google
  52290 bytes (51.1k)
CDN
gzip -9
  52273 bytes (51.0k)
local copy
7zip -mx=9 -tgzip
  50628 bytes (49.4k)
local copy
libdeflate -12
  50627 bytes (49.4k)
local copy
kzip -s0 -rn -b8
  50607 bytes (49.4k)
local copy
zultra
  50593 bytes (49.4k)
local copy
pigz -11 -n
  50558 bytes (49.4k)
local copy
Zopfli
  50457 bytes (49.3k)
local copy
Zopfli (defluff)
  50455 bytes (49.3k)
local copy

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

You will automatically get the smallest AngularJS 1.4.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 1833 bytes by using my AngularJS 1.4.5 Zopfli version instead of the best available CDN (3.63% smaller than Google, 50457 vs. 52290 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 --mls16384 --bsr10 --lazy --ohh

(found September 17, 2015)
Description Value Parameter
iterations 1000000  --i1000000
maximum blocks 8  --mb8
maximum length score 16384  --mls16384
block splitting recursion 10  --bsr10
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 (50455 bytes).

Verify file integrity

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

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

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

All listed CDNs deliver identical contents:
CDN Size (compressed) MD5 (uncompressed) Timestamp
Boot 60120 bytes 26680517e1024ca2c4f9ed4e0aa1619e September 1, 2015 @ 08:06
jsdelivr 60120 bytes 26680517e1024ca2c4f9ed4e0aa1619e September 28, 2015 @ 21:55
cdnjs 54072 bytes 26680517e1024ca2c4f9ed4e0aa1619e August 29, 2015 @ 07:04
unpkg 52377 bytes 26680517e1024ca2c4f9ed4e0aa1619e July 11, 2016 @ 15:52
Google 52290 bytes 26680517e1024ca2c4f9ed4e0aa1619e August 29, 2015 @ 20:23

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
50457 bytes -2 bytes zopfli --i1000000 --mls16384 --bsr10 --lazy --ohh September 17, 2015 @ 01:23
50459 bytes -1 byte zopfli --i100000 --mls16384 --bsr10 --lazy --ohh September 12, 2015 @ 13:50
50460 bytes -2 bytes zopfli --i100000 --mls16384 --bsr6 --lazy --ohh September 12, 2015 @ 13:00
50462 bytes -1 byte zopfli --i10000 --mls16384 --bsr10 --lazy --ohh September 11, 2015 @ 19:55
50463 bytes -3 bytes zopfli --i100000 --mls8192 --bsr8 --lazy --ohh September 10, 2015 @ 19:24
50466 bytes -1 byte zopfli --i10000 --mls8192 --bsr11 --lazy --ohh September 8, 2015 @ 00:08
50467 bytes -2 bytes zopfli --i10000 --mls8192 --bsr12 --lazy --ohh September 7, 2015 @ 23:55
50469 bytes -3 bytes zopfli --i1000 --mls8192 --bsr8 --lazy --ohh September 7, 2015 @ 17:12
50472 bytes -11 bytes zopfli --i1000 --mls8192 --bsr9 --lazy --ohh September 7, 2015 @ 17:12
50483 bytes zopfli --i100 --mls8192 --bsr11 --lazy --ohh September 7, 2015 @ 16:29

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

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
50533 50532 50532 50545 50547 50546 50546 50543 50548 50539 50549 50550 50548 50509 50543
50483 50487 50532 50529 50510 50527 50511 50524 50529 50527 50526 50526 50494 50473 50502
50532 50517 50468 50535 50531 50510 50487 50523 50529 50526 50530 50521 50511 50460 50492
50488 50479 50482 50486 50507 50506 50494 50525 50530 50509 50527 50510 50510 50512 50512
50484 50485 50487 50490 50509 50498 50493 50524 50510 50510 50526 50530 50463 50477 50489
50521 50490 50512 50532 50509 50506 50512 50522 50510 50506 50529 50521 50465 50464 50484
50515 50515 50474 50489 50509 50508 50511 50490 50525 50487 50511 50527 50493 50457 50500
50517 50518 50481 50499 50508 50507 50502 50526 50510 50487 50513 50510 50462 50464 50507
50494 50495 50472 50499 50509 50484 50489 50512 50525 50509 50513 50509 50466 50464 50513
50516 50516 50469 50511 50509 50505 50509 50523 50510 50489 50528 50509 50493 50465 50487
50520 50494 50469 50484 50510 50508 50490 50524 50525 50509 50511 50510 50470 50458 50494
50494 50482 50479 50481 50510 50493 50491 50491 50530 50508 50511 50509 50493 50463 50495
50482 50493 50497 50496 50509 50506 50486 50525 50510 50509 50528 50510 50494 50475 50483
50515 50482 50490 50474 50508 50492 50491 50523 50525 50509 50528 50510 50463 50466 50504
50492 50494 50488 50488 50509 50509 50509 50527 50525 50490 50510 50510 50494 50464 50497
50489 50484 50468 50500 50509 50489 50512 50490 50510 50508 50527 50522 50512 50469 50483
50506 50482 50468 50500 50509 50510 50485 50523 50525 50490 50513 50510 50468 50472 50480
50493 50482 50482 50497 50511 50506 50511 50491 50510 50489 50528 50510 50467 50467 50502
50496 50486 50498 50488 50511 50508 50487 50523 50526 50511 50512 50510 50487 50467 50505
50496 50483 50497 50487 50509 50508 50490 50525 50525 50527 50511 50521 50470 50467 50462
50496 50482 50473 50493 50508 50507 50499 50525 50527 50507 50527 50522 50476 50468 50477
50496 50496 50465 50488 50509 50505 50491 50524 50527 50490 50527 50509 50470 50467 50481
50505 50506 50500 50509 50509 50522 50506 50521 50520 50509 50528 50509 50494 50477 50503

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 50483 bytes 100%
1,000 50465 bytes -18 bytes 100%
10,000 50462 bytes -3 bytes 100%
100,000 50459 bytes -3 bytes 4.35%
1,000,000 50457 bytes -2 bytes 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
50609 bytes +152 bytes (+0.30%) +2 bytes
50610 bytes +153 bytes (+0.30%) +3 bytes
50626 bytes +169 bytes (+0.33%) +19 bytes
50623 bytes +166 bytes (+0.33%) +16 bytes
50644 bytes +187 bytes (+0.37%) +37 bytes
50667 bytes +210 bytes (+0.42%) +60 bytes
50660 bytes +203 bytes (+0.40%) +53 bytes
50680 bytes +223 bytes (+0.44%) +73 bytes
50607 bytes +150 bytes (+0.30%)

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 39445 bytes -11012 bytes (-21.82%)
RAR (proprietary) RAR rar a -m5 -md64m -mc63:128t -mt1 41614 bytes -8843 bytes (-17.53%)
PPMd (Wikipedia) 7zip 7za a -mx=9 -m0=ppmd 42822 bytes -7635 bytes (-15.13%)
Brotli (Wikipedia) brotli brotli -q 11 46003 bytes -4454 bytes (-8.83%)
Burrows-Wheeler transform (Wikipedia) bzip2 bzip2 -9 46919 bytes -3538 bytes (-7.01%)
LZMA2 (Wikipedia) xz xz -9 47448 bytes -3009 bytes (-5.96%)
Zstandard (Wikipedia) zstd zstd -19 48881 bytes -1576 bytes (-3.12%)

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.